ECS 起動タイプ EC2 にてタスク定義に datadog/agent:latest を設定したが
メトリクスが取得できない事象がありました。
Infrastructure > Containers には datadog/agent:latest を設置したタスク定義内のコンテナ情報は一覧に表示されてますが、メトリクスが取れていない、という状況でした。
1 | $ docker ps |
ある日、ECS で起動させている Datadog Agent コンテナが unhealthy になってしまう事象が発生しました。
その原因と対応法をまとめました。
Datadog Agent イメージを現時点の最新バージョン 6 系にすることで解決できました。
Datadog サポートに問い合わせた所、
今回のケースでは Datadog Agent イメージのバージョンが 5 系だったことに起因していました。
バージョン5が最新だった時には設定手続きは以下に沿って実施していました。
https://docs.datadoghq.com/integrations/faq/agent-5-amazon-ecs/
上記手順にて登場する datadog agent の ECS での起動用タスクが以下になります。
ここで指定しているイメージ (datadog/docker-dd-agent:latest) が 5系でした。
https://docs.datadoghq.com/json/dd-agent-ecs.json
datadog/docker-dd-agent:latest
は 5系の最新だった!
現最新バージョン 6系を扱うには以下設定手続きを参照します。
https://docs.datadoghq.com/integrations/amazon_ecs
手続きで変更点はタスク定義の変更くらいです。
https://docs.datadoghq.com/json/datadog-agent-ecs.json
今の所、datadog/agent:latest
が6系の最新になっています。
7系になった際には是非とも互換維持してほしいです。
サポートに問い合わせると、 caseID という問い合わせの ID をいただけます。
その後、caseID を設定し、起動時のログファイル (tar.gz) を取得し、サポート宛に添付しました。
ECS の管理下にある EC2 に ssh ログインし以下実行します。
1 | $ docker run --rm -v /tmp:/tmp -e API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx datadog/docker-dd-agent:latest /etc/init.d/datadog-agent flare <caseID> |
EC2 ホスト上に /tmp/datadog-agent-2019-01-03-12-27-44.tar.bz2
ファイルが取得できるので、それをサポート宛にメール添付しました。
上記でログも含めサポートに連絡した所、API バージョンにより接続中止されている、という指摘を受け、バージョン上げて!という話になりました。
1 | 2019-01-03 12:27:44,472 | ERROR | dd.collector | utils.dockerutil(dockerutil.py:148) | Failed to initialize the docker client. Docker-related features will fail. Will retry 0 time(s). Error: Error while fetching server API version: ('Connection aborted.', error(2, 'No such file or directory')) |
サポートさんありがとう♪
以上です。
参考になれば幸いです。
サーバ時刻の監視を Datadog で実施する際、標準時刻の参照先が異なることで
不要なアラートが発生する事象がありました。
Datadog はデフォルトで pool.ntp.org
を参照しています。
AWS EC2 に設定した Chrony ではデフォルトで ntp.nict.jp
を参照する様にしていた為、ある日突然アラートがなりまくる事象がありました。
この対策として、
Datadog と Chrony の参照先を統一して管理する様に設定しました。
Datadog Agent 6 系にアップデートして Logging 機能を試す!
2017 年末に β 版ですが、Datadog の Log 可視化ツールの利用が発表されました。
と思い早速導入してみました。
2018 年 1 月 10 日時点では 5 系がインストールされます。
5 系 | 6 系 | |
---|---|---|
ベースディレクトリ | /etc/dd-agent | /etc/datadog-agent |
各種設定ファイル | /etc/dd-agent/conf.d/nginx.yaml | /etc/dd-agent/conf.d/nginx.d/conf.yaml |
メトリクス情報 | dd-agent info | datadog-agent status |
6 系では dd-agent コマンドがありませんでした。
https://github.com/DataDog/datadog-agent/blob/master/docs/beta.md
自身の環境は Ubuntu 16.04.2 LTS だったので以下方法でアップグレードしました。
1 | $ DD_UPGRADE=true bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)" |
Error と出るので一瞬ハッとしましたが、Error Message をよく見ると
6 系の /etc/datadog-agent/datadog.yaml
は問題ない設定となっている様に見えますが、上書きしたい場合は –force を使ってね、
とあります。
datadog-agent のアップグレードは無事完了していました。
1 | $ sudo datadog-agent status |
また各種設定(/etc/datadog-agent/conf.d, checks.d)ファイルも問題なく移行できていました。
特に上記の手法で問題ないですが強制的にオーバーライドする方法を明記しておきます。
1 | // /etc/dd-agent/conf.d 以下のファイルを 6系へ移行 |
/etc/datadog-agent/conf.d/nginx.d/conf.yaml
1 | init_config: |
基本的に logs ディレクティブを記述することで OK
/etc/datadog-agent/conf.d/fluentd.d/conf.yaml
1 | init_config: |
/etc/datadog-agent/datadog.yaml
に以下設定を加えます。
1 | log_enabled: true |
1 | $ sudo systemctl restart datadog-agent |
ログを見てみます。
1 | $ sudo tail -f /var/log/datadog/agent.log |
パーミッションエラーが発生しておりdatadog-agent
を起動している dd-agent
ユーザからアクセスできない状態となっていました。
単純に /var/log/nginx/access.log
に 0644 (-rw-r–r–) を付与するだけでなく、
logrotate で生成される新たな log のパーミッションにも注意します。
1 | /var/log/nginx/*.log { |
元々 0640 でしたが 0644 で生成するようにしました。
これにて解決 ♪
ログが流れてくるのを確認できました。
Kibana の Discover ページのような作りです。
今後フィルタリングしてグラフを作ったりできたりしてくるのか、
Pro 版なら無料で使わせてもらえないかな、
なんて期待が高まっております
お願い、Datadog さん(-人-)
Rails の乗っているホストへ Datadog で Unicorn を監視しようとした所、
それらしい Integration がありません((あったら教えてください >_< ))。
ということで独自スクリプトを作成しようと思いました!
同僚「Mackerel なら plugin ありますよ?」
自分「えっ?…」
Mackerel に unicorn 監視用の plugin がありました。
はてなさんも OSS で出して頂いている、
車輪の再開発は時間の無駄、
人生は一度しかないのでこの Mackerel プラグインを Datadog で使わせて頂こうと思いました。
1 | from checks import AgentCheck |
Unicorn の PID ファイルを指定します。
1 | init_config: |
1 | $ sudo dd-agent configcheck |
1 | $ sudo service datadog-agent restart |
出てきた!
これで呉越同舟型モニタリングができました!
自分自身が呉でも越でもない所に若干の背徳感がありますが
手っ取り早く舟をこしらえたことに本記事の意味があるかと
筆を取りました。
参考になれば幸いです。