下記記事の補足という形の記事になります。datadogをrails + fargate環境にデプロイするのが最終目的です。
いきなりfargateデプロイも悪くはないかもですが、やっぱりローカルで試せるなら試した方が、これはいけるなという感覚と共にデプロイもできると思います。個人的には。
というわけで、docker composeを利用し、rails と datadogをdockerコンテナで動かす手順です。
実装
1. railsの設定修正
最初に、rails側にdatadog gemを追加 & 設定を追加します。
こちらを参考に、gemのインストールおよびdatadog configの設定ファイルを追加してください。
そして、configを少し変えます。hostの設定です。
※fargateデプロイ時は削除してください。
config/initializers/datadog-tracer.rb
Datadog.configure do |c|
c.env = ENV["DD_ENV"] # 動的な変数は.envやdocker composeに設定するか、'local'などのハードコーディングで良いと思います。
c.service = ENV["DD_SERVICE"]
c.tracing.sampling.default_rate = (ENV["DD_TRACE_SAMPLE_RATE"] || 1.0).to_f
c.tracing.instrument(:rails, service_name: ENV["DD_SERVICE"])
c.appsec.enabled = true
c.agent.host = "datadog-agent" # 追加:ホストをdatadog-agentに設定
end
2. docker composeにdatadog agent追加
docker-compose.ymlservices
api: # railsの設定をしている箇所としてみてください
~略~
# もしdockerFileがprd向けのみの場合、envを上書き
environment:
RAILS_ENV: 'development'
BUNDLE_WITHOUT: ''
# env等を上書きする場合、各種インストールを再実行する
command: >
bash -c "rm -f tmp/pids/server.pid &&
apt-get update &&
apt-get install -y build-essential &&
bundle install &&
bundle exec rails db:migrate &&
bundle exec rails s -b 0.0.0.0 -p 4000" # ポートなどは実際の開発環境に合わせてください
# datadog-agentを追加
datadog-agent:
profiles: ["datadog"] # 指定した時のみにしたい場合、profile設定をしておく
image: public.ecr.aws/datadog/agent:latest
environment:
- DD_API_KEY=<keyを設定してください>
- DD_APM_ENABLED=true
- DD_LOGS_ENABLED=true
- DD_APM_NON_LOCAL_TRAFFIC=true
- DD_SITE=datadoghq.com
- DD_APM_RECEIVER_PORT=8126
- DD_SERVICE=<任意のサービス名>
- DD_ENV=<任意のenv(localなど)>
- DD_TRACE_SAMPLE_RATE=0.5
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
ports:
- 8126:8126
apiキーなどは実際の値に置き換えてください。
datadogコンソールで確認できます。
※githubなどの履歴には入れないようご注意ください。
以上で、ローカルのコンテナ環境でrailsのログがdatadog agentに渡され、datadogに送られることが確認できるはずです。