9月11日(火)の早朝から、DatadogのAutomutingが効かなくなりました。その原因を探ったのでその記録です。
AutoMutingとは?
ASGを使って、ScaleOut/ScaleInを頻繁にするようなシステムの場合、ScaleInで縮退する時(Instanceの削除)にはそのInstanceは監視対象外にしたいです。でないと、Instanceが削除されるたびにMetricsが来ないNODATAやdatadog.agent.up
を見ている場合にアラートが発生します。
それを解決するためにDatadogではAutomutingをサポートしており、CloudWatchの情報を使ってInstanceが死んだら自動でInstanceのMuteをするようにしています。
これはDatadogのAWSとの連携設定の中にあります。
何が原因なのか?
ホストベースの簡単なMonitorを作成すると、次のようなクエリの監視ができあがります。
"datadog.agent.up".over("*").by("host").last(2).count_by_status()
これは通常、InstanceがTerminatedされた時にはDatadog側でそのホストは自動的にMuteされるのですが、この機能が動かずアラートが鳴りまくるという事象が発生しました。
原因について
結論から言えば、Datadog側の挙動が変わりました。サポートに連絡したところ、いくつかのIssueがあって解決中とのことなので、また元の挙動に戻るかもしれません。
ひとまず、現時点での挙動を記録に残しておきます。
原因判明について
こちらが解決のヒントになりました。
ありがたや、ありがたや。
このスレッドに、様々なスクリーンショットがありますのでご参考まで。
現時点の挙動について
Datadogは課金対象のInstanceを、Agentが動いている もしくは Datadogが認識したEC2インスタンス
としています。Agentを動かしていなくても、DatadogがEC2 Instanceを認識すればCloudWatch経由でMetricsを取ってきます。これも課金対象になります。
そのため、開発用にささっと立てたInstanceにDatadogのAgentを入れていなくても課金対象になってしまいます。
それを回避するため、limit metrics collection
の設定をします(下図参照)。例えば、ここにdatadog:enabled
と入れるとAWSのタグにdatadog:enabled
と設定されているInstanceが対象になります。(※当然ですがタグの設定がなくてもAgentが動いていれば課金対象です)
これらがどのように変わったのか、下の図にまとめました。
端的に言えば、limit metrics collectionの設定がある場合に、EC2にそのTagを設定していなくてもAgentの起動をしていればAutomutingの対象でしたが、該当日から対象外になりました。
Before
Agent起動 |
Tag有り |
課金対象 |
Automutingが動作するか |
F |
F |
F |
F |
F |
T |
T |
T |
T |
F |
T |
T |
T |
T |
T |
T |
Aftre
Agent起動 |
Tag有り |
課金対象 |
Automutingが動作するか |
F |
F |
F |
F |
F |
T |
T |
T |
T |
F |
T |
F |
T |
T |
T |
T |
サポートに連絡したところ、最終的には次の回答をもらいました。
I found out that we do have some issues with the EC2 automuting feature and the autoscaling groups. Our engineers are currently working on it.
We’re sorry for the inconvenience and will keep you updated.
しばらく様子を見ます。
なお、タグの設定を一回外すということをすると、このように課金対象ホストが増えてしまうので注意です。(これは実験のために意図して外したので真似はしないように。。)