ECS x Mackerel
by
Yoshiaki Yoshida
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 を使っていくぞ!