以前ECS/Fargateのコンテナリソースをモニタリングするブログを書きましたが、今回はその上で動作しているAPMでRailsアプリをモニタリングしてみました。設定等ハマりましたが、非常に簡単です。では紹介していきましょう。ちなみにAPMの略は「Application Performance Monitoring」です。
Amazon Fargate/トレースの収集
・上の手順に従ってタスク定義に Datadog Agent コンテナを追加し、追加の環境変数 DD_APM_ENABLED を true に設定し、ポートマッピングでホストポート(8126 と tcp プロトコルを使用)を設定します。
・現在のセットアップに基づいてアプリケーションをインスツルメントします。
・アプリケーションが Datadog Agent コンテナと同じタスク定義内で実行されていることを確認します。
まずはTerraformでAppコンテナのタスク定義内にport 8126と DD_APM_ENABLED true
を追加しましょう。
- 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 |
~省略~ { "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, "essential": true, "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" } ] |
- Ruby アプリケーションのトレース
Gemfileにddtraceやdatadog.rbを作成してトレースするようにデプロイしましょう。
- Gemfile
1 |
gem 'ddtrace' |
- config/initializers/datadog.rb
1 2 3 4 5 6 7 8 |
require 'ddtrace' Datadog.configure do |c| c.use :rails c.service = 'adachin' c.env = 'production' c.tags = { 'team' => 'sre' } c.version = '0.54.0' end |
APM/Services/Traces
Servicesからはアプリのリクエスト数、レイテンシー、エラーなどが全て可視化されます。もちろんここからMonitorも設定ができるのでアラート設定もできます。
MySQLでは実際動作しているクエリがリアルタイムに確認することができます。なのでこのクエリが重いというのもボトルネックが素早く確認できるので良き!
Tracesではアプリケーションステータスコードの一覧をリアルタイムで確認することができます。例えばErrorのみを表示させたり分析することができます。
まとめ
Datadogのドキュメントを理解するのに時間かかったのと、ドキュメントを見る場所が違ったりして、まあハマりました….APMではより細かくトレースできたり加工することもできるので後で試すぞ!
0件のコメント