ECS x Mackerel
by
Yoshiaki Yoshida
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ECS x Mackerel JAWS-UG コンテナ支部 2017.07.21 ~ 動的ポートマッピングに対応したタスクのメトリクスを取得する ~
Slide 2
Slide 2 text
吉田 慶章 @kakakakakku - Makuake : CyberAgent Crowd Funding, Inc. - DevOps エンジニア & サーバサイドエンジニア - エンジニアリングマネージャー - 趣味 : ブログ更新 - http://kakakakakku.hatenablog.com/ - 副業 : プログラミング講師
Slide 3
Slide 3 text
7/5 は「Aurora 事例祭り」に登壇 http://kakakakakku.hatenablog.com/entry/2017/07/05/214133
Slide 4
Slide 4 text
最近使い始めた ECS の話 まだ本番投入はしてない ( ゚д゚)
Slide 5
Slide 5 text
モチベーション - 運用面を考えると, メトリクスの取得は重要 - コンテナインスタンスだけじゃなくて, タスクも対象にしたい - やっぱり「動的ポートマッピング」も使いたい - ポートが増減する環境で, どのようにメトリクスを取得する? - 既に導入済の Mackerel を使いたい
Slide 6
Slide 6 text
Mackerel で 「動的ポートマッピング」に対応した タスクのメトリクスを取得する方法を考えてみた ちなみに Datadog なら ECS Integration がある ( ゚д゚)!!!
Slide 7
Slide 7 text
アーキテクチャ
Slide 8
Slide 8 text
Docker Container Instance ALB ECS Alarm Instance Auto Scaling Service Auto Scaling ( Dynamic Port Mapping ) Service ( AZ Balanced Spread ) Docker Container Instance
Slide 9
Slide 9 text
ポイント - コンテナインスタンスに mackerel-agent をインストールする - 「カスタムメトリクス取得スクリプト」を配置する - cloud-init (User Data) 経由
Slide 10
Slide 10 text
カスタムメトリクス取得スクリプト #!/bin/sh if [ "${MACKEREL_AGENT_PLUGIN_META}" != "1" ];then for PORT in $(docker ps —format=‘{{.Ports}}' --filter name=xxxxx | cut -f1 -d- | cut -f2 -d:); do /usr/bin/mackerel-plugin-gostats -port ${PORT} -path=/stats -metric-key-prefix=gostats.${PORT} done else /usr/bin/mackerel-plugin-gostats -metric-key-prefix=gostats.# fi ( 今回は mackerel-plugin-gostats をサンプルにした ) docker ps の結果からポートを取得する カスタムメトリクスの プレフィックスにポートを付与する メタ情報
Slide 11
Slide 11 text
タスク単位で取得できるようになった
Slide 12
Slide 12 text
次は, ダッシュボード化
Slide 13
Slide 13 text
ロールグラフだと ポート部分をワイルドカードにして グラフ表示をすることができない ( メトリクスはサンプル )
Slide 14
Slide 14 text
アドバンスクエリで頑張った role('service:role', 'custom.gostats.*.runtime.goroutine_num')
Slide 15
Slide 15 text
何となく良さそうな ダッシュボード化はできた
Slide 16
Slide 16 text
実は他にも検討した - mackerel-agent タスクを One Task Per Host で起動する - mackerel-agent タスクから, 同じコンテナインスタンスで 動く他のタスクのメトリクスが取得できない - タスクと mackerel-agent タスクを link して起動する - 1 タスク 1 ホストで課金されると厳しい
Slide 17
Slide 17 text
まとめ - ECS を運用する場合, コンテナインスタンスだけじゃなくて, タスクのメトリクスも取得したい - Mackerel で「動的ポートマッピング」に対応した 「カスタムメトリクス取得」と「ダッシュボード化」を考えた - もし Mackerel で正式に ECS 対応が入るなら不要になる - 引き続き ECS を使っていくぞ!