概要
- DockerコンテナをDatadogのコンテナから監視する <- 記事があった
- DatadogでAPMを使う <- 記事があった
- Dockerコンテナ上のDatadogからコンテナ上のサービスをAPMで見る <- なかった
ので書き残してみる。公式ドキュメント以上のことは書いてないので、もうできちゃったよ! って人の場合は、特に追加の知見はないかと思います。
やること
- Dockerコンテナ上のDatadogから監視する
- そこからさらにAPMでサービスを見る
Dockerコンテナ上のDatadogから監視する
これについては日本語でも解説記事が結構あったので、大まかに。
基本はホストマシンで見るのと変わらなく、ホストマシン上で見ていたところを、Datadogコンテナから見れれば良い(多分)。
以下のようなdocker-compose.ymlを書く。
docker-compose.yml
guest:
build:
###### 省略 #####
links:
- datadog:datadog
datadog:
image: datadog/docker-dd-agent
environment:
- API_KEY=xxxyourxapixkeyxxx
- SD_BACKEND=docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
docker.sockやproc、cgroupが見れればいいっぽい。docker上のファイルパスは、設定ファイルを修正することによって変えられるが、特に修正する理由もないのでデフォルトのまま。
これだけでコンテナの監視は行える(はず)。
APMをつかう
guest上にRoR(以下rails)のサービスが乗っかっている前提。
まずはdocker-compose.ymlに追記。
docker-compose.yml
guest:
build:
###### 省略 #####
links:
- datadog:datadog
datadog:
image: datadog/docker-dd-agent
environment:
- API_KEY=xxxyourxapixkeyxxx
- DD_APM_ENABLED=true
- SD_BACKEND=docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
名称の通りだが、DD_APM_ENABLEDをtrueにすることでapmが有効化される(特に何かを追加でインストールする必要はない)。
次にguestのrailsのGemfileにddtraceを追加してbundle install。
gem 'ddtrace'
次にddtraceのコンフィグファイルを追加する。
config/initializers/datadog-tracer.rb
Datadog.configure do |c|
c.use :rails, service_name: 'my-rails-app'
c.tracer hostname: 'datadog',
port: 8126
end
ここでのhostnameはdockerのバーチャルネットワーク上での名前を指定すればいい。ポートもデフォルトから変えていないのなら8126でよい。
上記で基本的な設定は以上。これでAPMが利用可能になるはずです。
Enjoy!