前回はRailsをDatadogでAPMの設定をしましたが、今回はPHPとなります。環境はECS/Fargate、php-fpm(Alpine Linux)でフレームワークはCakePHP、Laravel、はたまたWordPressでも関係ないので早速設定してみましょう!
Amazon Fargate/トレースの収集
まずはTerraformでAppコンテナのタスク定義内に port 8126
と DD_APM_ENABLED=true
、 を追加しましょう。ここまではRailsとまったく同じですが、PHPの場合、Appコンテナ自体に DD_TRACE_PHP_BIN=/usr/local/sbin/php-fpm
という環境変数を追加してPHPバイナリの場所を指定する必要があります。なのでコンテナに入って which php-fpm
を実行して確認しましょう。
- files/task-definitions/app.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
~省略~ "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "environment": [ { "name": "DD_TRACE_PHP_BIN", "value": "/usr/local/sbin/php-fpm" } ], "command": [ "/usr/bin/supervisord" ] }, { "image": "datadog/agent:latest", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/datadog-agent", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "ecs" } }, "cpu": 10, "memory": 256, "mountPoints": [], "portMappings": [ { "hostPort": 8126, "protocol": "tcp", "containerPort": 8126 } ], "environment": [ { "name": "ECS_FARGATE", "value": "true" }, { "name": "DD_PROCESS_AGENT_ENABLED", "value": "true" }, { "name": "DD_DOGSTATSD_NON_LOCAL_TRAFFIC", "value": "true" }, { "name": "DD_APM_ENABLED", "value": "true" }, { "name": "DD_APM_NON_LOCAL_TRAFFIC", "value": "true" } ], "networkMode": "awsvpc", "name": "datadog-agent" } ] |
- PHP アプリケーションのトレース
https://docs.datadoghq.com/ja/tracing/setup/php/
- Dockerfile(Alpine Linux 3.12系)
https://github.com/DataDog/dd-trace-php/releases/tag/0.54.0
1 2 3 |
# Datadog APM RUN curl -Lo datadog-php-tracer.apk https://github.com/DataDog/dd-trace-php/releases/download/0.54.0/datadog-php-tracer_0.54.0_noarch.apk && apk add datadog-php-tracer.apk --all RUN rm datadog-php-tracer.apk |
- Dockerfile(Alpine Linux 3.4系)
1 2 3 4 |
# Datadog APM RUN apk add --no-cache -X http://dl-3.alpinelinux.org/alpine/edge/main libexecinfo libexecinfo-dev RUN curl -Lo datadog-php-tracer.apk https://github.com/DataDog/dd-trace-php/releases/download/0.54.0/datadog-php-tracer_0.54.0_noarch.apk && apk add datadog-php-tracer.apk --all RUN rm datadog-php-tracer.apk |
次ですがdd-trace-phpというPHP拡張機能をインストールします。今回はAlpineですがOSのバージョンごとにインストール方法が違うので、上記を参考にしてDockerfileに追記してください。OSが古くてもdd-trace-phpは最新の0.54.0はインストール可能となります。
- www.conf
1 2 3 4 5 6 |
clear_env=on env[DD_SERVICE] = 'adachin' env[DD_ENV] = 'production' env[DD_VERSION] = '0.54.0' env[DD_SERVICE_MAPPING]='pdo:adachin-pdo,guzzle:adachin-guzzle,curl:adachin-curl,redis:adachin-redis' env[DD_TRACE_SAMPLING_RULES]='[{"sample_rate": 0.01}]' |
php-fpmのwww.confにDatadogで利用する環境変数を追加しましょう。 DD_SERVICE_MAPPING
を追記しないとDBのQueriesが取れないので注意しましょう。また、sample_rateのみを指定すれば全てのAPMにサンプルレートが適用されます。
- 確認
1 2 3 |
bash-4.2# php -m | grep ddtrace ddtrace ddtrace |
コマンドで動作確認できれば完了です。
APM/Services/Traces
- Web
- DB
まとめ
Railsと違ってやること多いし、なかなかハマりました。次はログを可視化してみよう!!
0件のコメント