ECS EC2 上で起動する Datadog Agent コンテナが unhealthy になる時の処方箋

概要

1
2
3
4
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8baa0e2cff47 datadog/docker-dd-agent:latest "/entrypoint.sh supe…" 31 hours ago Up 31 hours (unhealthy) 8125/udp, 8126/tcp ecs-dd-agent-task-1-dd-agent-f6d3d5eb9febcab9c601

ある日、ECS で起動させている Datadog Agent コンテナが unhealthy になってしまう事象が発生しました。
その原因と対応法をまとめました。

結論

Datadog Agent イメージを現時点の最新バージョン 6 系にすることで解決できました。

Datadog サポートに問い合わせた所、
今回のケースでは Datadog Agent イメージのバージョンが 5 系だったことに起因していました。

datadog/docker-dd-agent:latest は 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系の最新だった!

datadog/agent:latest が 2019.01.10 時点最新の 6系 !

現最新バージョン 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
2
3
4
5
6
7
$ docker run --rm -v /tmp:/tmp -e API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx datadog/docker-dd-agent:latest /etc/init.d/datadog-agent flare <caseID>

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'))
...
2019-01-03 12:27:45,807 | INFO | dd.collector | utils.flare(flare.py:161) | Saving all files to /tmp/datadog-agent-2019-01-03-12-27-44.tar.bz2
/tmp/datadog-agent-2019-01-03-12-27-44.tar.bz2 is going to be uploaded to Datadog.
...

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'))

サポートさんありがとう♪

以上です。
参考になれば幸いです。

boto3 の AssumeRole をしたアカウントスイッチ credentials 利用時の MFA 突破対応
No space left on device が発生して i-node 枯渇してた時の原因調査法
AWS EC2 t2 から t3 へ移行する為の step by step

AWS EC2 t2 から t3 へ移行する為の step by step

概要

AWS EC2 に t3 系インタスタンスが登場した為、サクッとできるかと思いきや、つまづいた箇所をまとめました。

今回対象のインスタンスは HVM で ubuntu 16.04.5 LTS を使用しました。

t2 と比べて t3 は何がいいの?

続きを読む

プロセスの起動経過時間・CPU使用時間

備忘録です。

プロセスがいつ頃から起動しているものか、全然再起動してないと再起動するのもやや不安になるので
一旦確認しておこう、という気持ちから以下コマンドを使っています。

続きを読む
食洗機かけ終わったかわからなくなる問題を RaspberryPI + BlueButton + LINE Notify + Google Home で解決した話
子供の笑顔と笑い声を聞く為に ffmpeg + Nginx + RTMP on RaspberryPI
Flask+Service Worker on Heroku で PWA チュートリアル

顔検出 3分クッキング on MacOSX

概要

ラズパイ使って家族と判断したら
「こんにちはご主人様」
家族以外なら
「通報しまーす」
と話してくれるおもちゃを
作ろうと思ってます。

その前段の前段として
静止画で顔検出してみます。

ちなみに顔検出と顔認識は意味が全く異なります。

  • 顔検出 … 顔部分を検出すること。
  • 顔認識 … 特定の人物の顔と判断すること。

環境構築は前回記事を参照してください。

環境

  • MacOSX 10.11.5
  • Python 3

CV2 インストール

  • homebrew で cv2 インストール
1
2
$ brew tap homebrew/science
$ brew install opencv3 --with-python3
  • Python 3 を利用する
1
2
$ source ~/py3env/bin/active
(py3env)$
  • cv2.so を pip の site-package へコピー
1
2
(py3env)$ cd ~/py3env/lib/python3.4/site-packages
(py3env)$ cp /usr/local/Cellar/opencv3/3.1.0_3/lib/python3.4/site-packages/cv2.so .
  • cv2 import 確認

Version が表示されれば成功

1
2
(py3env)$ python -c 'import cv2; print(cv2.__version__)'
3.1.0

スクリプトインストール

1
2
3
(py3env)$ cd ~/py3env
(py3env)$ git clone https://gist.github.com/kenzo0107/5d174797a5a222295b5a39f6fa435777
(py3env)$ cp ./5d174797a5a222295b5a39f6fa435777/trimming.py .

スクリプト実行

1
(py3env)$ python trimming.py <img_path>
  • Before

  • After

革パンも顔認識されてしまう…

が、一応まずできました。

今回のスクリプト要点

  • 正確な検知数を向上させるべく、スクリプト上の以下 detectMultiScale メソッドのパラメータを調整します。
1
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.02, minNeighbors=3, minSize=(7,7))
Item Value
scaleFactor 画像解析する際に随時縮小し解析するその尺度
minNeighbors 最小近傍矩形
minSize 顔部分を認識するためのサイズ (縦,横)

まず最初の第一歩ができました♪