Docker×Datadog×PHP 구현 정리(APM편)
13788 단어 PHP7ECSDatadogdocker-compose도커
개요
Datadog를 사용하여 Docker(ECS)에서 구현하는 PHP 웹 앱의 지표를 수집하여 Datadog 콘솔(APMService)에서 모니터링할 수 있습니다.
개요
· PHP 컨테이너에 DatadogAPM 측정 설정
· 로컬 개발 환경 (docker-compose)에서 datag/agent 컨테이너 구현
· 클라우드 개발 환경 (ECS)에서 datag/agent 컨테이너 구현
작업 로그
PHP 컨테이너의 DatadogAPM 측정 설정
· PHP에 Datadog 확장 기능 (datadog-php-tracer) 설치
→ PHP 컨테이너의 Dockerfile에 설치한다.
ENV DDTRACE_VERSION=0.30.1
RUN curl -Lo datadog-php-tracer.apk https://github.com/DataDog/dd-trace-php/releases/download/${DDTRACE_VERSION}/datadog-php-tracer_${DDTRACE_VERSION}_noarch.apk \
&& apk add datadog-php-tracer.apk --allow-untrusted \
&& rm datadog-php-tracer.apk
※컨테이너를 실행해,↓phpinfo()로 인스톨 되고 있는 것을 확인
※datadog-php-tracer를 인스톨하는 것만으로, 마음대로 계측해 datag/agent의 EP에 계측 데이터를 송신해 준다.
로컬 개발 환경(docker-compose)에서 datag/agent 컨테이너 구현
로컬에서 컨테이너를 실행하고 datadog 콘솔에 데이터를 보낼 수 있는지 확인합니다.
↓구성으로서는 이런 느낌.
datadog/agent 컨테이너
datadog의 공식 이미지 ( datadog/agent )에 환경 변수를 설정하고 실행
※키는 Datadog 콘솔의 Integrations - APIs - API keys 에서 확인
DD_API_KEY=***
DD_APM_ENABLED=true
DD_SITE=datadoghq.com
DD_APM_NON_LOCAL_TRAFFIC=true
PHP 컨테이너 설정
환경 변수로 측정 데이터를 설정합니다.
DD_AGENT_HOST=datadog-agent
※datadog/agent의 서비스명을 datag-agent로 했으므로 그대로 설정(디폴트는 localhost)
DD_SERVICE_NAME=php-apm
docker-compose.yml
version: '3'
services:
php-apache:
container_name: php_apache_container
build: ./php_apache_container
volumes:
- ./php_apache_container/src:/var/www/html
environment:
DD_AGENT_HOST: "datadog-agent"
DD_SERVICE_NAME: "php-apache"
DD_TRACE_GLOBAL_TAGS: "env:local,service:php-apache"
DD_TRACE_ANALYTICS_ENABLED=true
networks:
- net
datadog-agent:
container_name: datadog-agent
image: datadog/agent:latest
environment:
DD_API_KEY: "******"
DD_APM_ENABLED: "true"
DD_SITE: "datadoghq.com"
DD_APM_NON_LOCAL_TRAFFIC: "true"
networks:
net:
networks:
net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
※ 대체로 ↑의 느낌. . 업무용 코드, 고유 명사를 싹둑 삭제, 편집한 것 싣고 있습니다. 동작은 보이지 않는다.
클라우드 개발 환경(ECS)에서 datag/agent 컨테이너 구현
↓ 대체로 아래와 같은 느낌으로 실장
· ECS는 EC2 모드
· PHP 컨테이너는 Replica, AWSVPC 모드, Datadog 컨테이너는 Daemon, Bridge 모드로 시작
ENI 제한
※사용하는 인스턴스 타입은 ENI수:3
AWSVPC 모드라면 태스크마다 하나의 ENI를 사용하기 때문에 ENI 고갈을 막기 위해 datag 컨테이너는 bridge 모드로 구현
PHP 컨테이너 → Datadog 컨테이너 통신 경로
태스크간에 걸쳐 통신하는 경우, 직접 통신할 수 없기 때문에 Route53에서 PrivateHostedZone→ALB를 통해 datag/agent 컨테이너에 계측 메트릭스를 송신한다.
※서비스 검출과 SRV 레코드를 사용한 방법도 있는 것 같지만, datadog-php-tracer(의 통신에 사용하고 있는 CURL)가 SRV 레코드에 대응하지 않는 것 같기 때문에 사용할 수 없다?
작업 정의
· 로컬 환경에서도 설정한 환경 변수를 environment로 설정
· API 키는 파라미터 스토어로 설정하고, ARN을 지정
· 포트는 datagAPM 용 포트
8126
※terraform으로 관리하고 있기 때문에, 설정치를 ${var}의 형태로 외부로부터 설정할 수 있도록 하고 있다. (JSON의 LINT에 화가 나지만 신경 쓰지 않는다)[
{
"name": "datadog-agent",
"image": "datadog/agent:latest",
"cpu": 10,
"memory": 256,
"portMappings": [
{
"hostPort": ${dd_trace_agent_port},
"protocol": "tcp",
"containerPort": ${dd_trace_agent_port}
}
],
"essential": true,
"mountPoints": [
{
"containerPath": "/var/run/docker.sock",
"sourceVolume": "docker_sock",
"readOnly": true
},
{
"containerPath": "/host/sys/fs/cgroup",
"readOnly": true,
"sourceVolume": "cgroup"
},
{
"containerPath": "/host/proc",
"readOnly": true,
"sourceVolume": "proc"
}
],
"environment": [
{
"name": "DD_APM_ENABLED",
"value": "true"
},
{
"name": "DD_SITE",
"value": "datadoghq.com"
},
{
"name": "DD_APM_NON_LOCAL_TRAFFIC",
"value": "true"
},
{
"name": "DD_TAGS",
"value": "php-sample"
}
],
"secrets": [
{
"name": "DD_API_KEY",
"valueFrom": "${dd_api_key}"
}
]
}
]
Reference
이 문제에 관하여(Docker×Datadog×PHP 구현 정리(APM편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nishimu0507/items/d8b10b90d2ac26c32c2e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)