ECS x Mackerel

ECS x Mackerel

詳しくはブログに!

「JAWS-UG コンテナ支部 #9」で「ECS x Mackerel」をテーマに LT をした
http://kakakakakku.hatenablog.com/entry/2017/07/22/174531

3da5b00de1285b12a17d730262cc4824?s=128

Yoshiaki Yoshida

July 21, 2017
Tweet

Transcript

  1. ECS x Mackerel JAWS-UG コンテナ支部 2017.07.21 ~ 動的ポートマッピングに対応したタスクのメトリクスを取得する ~

  2. 吉田 慶章 @kakakakakku - Makuake : CyberAgent Crowd Funding, Inc.

    - DevOps エンジニア & サーバサイドエンジニア - エンジニアリングマネージャー - 趣味 : ブログ更新 - http://kakakakakku.hatenablog.com/ - 副業 : プログラミング講師
  3. 7/5 は「Aurora 事例祭り」に登壇 http://kakakakakku.hatenablog.com/entry/2017/07/05/214133

  4. 最近使い始めた ECS の話 まだ本番投入はしてない ( ゚д゚)

  5. モチベーション - 運用面を考えると, メトリクスの取得は重要 - コンテナインスタンスだけじゃなくて, タスクも対象にしたい - やっぱり「動的ポートマッピング」も使いたい -

    ポートが増減する環境で, どのようにメトリクスを取得する? - 既に導入済の Mackerel を使いたい
  6. Mackerel で
 「動的ポートマッピング」に対応した
 タスクのメトリクスを取得する方法を考えてみた ちなみに Datadog なら ECS Integration がある

    ( ゚д゚)!!!
  7. アーキテクチャ

  8. Docker Container Instance ALB ECS Alarm Instance Auto Scaling Service

    Auto Scaling ( Dynamic Port Mapping ) Service ( AZ Balanced Spread ) Docker Container Instance
  9. ポイント - コンテナインスタンスに mackerel-agent をインストールする - 「カスタムメトリクス取得スクリプト」を配置する - cloud-init (User

    Data) 経由
  10. カスタムメトリクス取得スクリプト #!/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 の結果からポートを取得する カスタムメトリクスの プレフィックスにポートを付与する メタ情報
  11. タスク単位で取得できるようになった

  12. 次は, ダッシュボード化

  13. ロールグラフだと
 ポート部分をワイルドカードにして
 グラフ表示をすることができない ( メトリクスはサンプル )

  14. アドバンスクエリで頑張った role('service:role', 'custom.gostats.*.runtime.goroutine_num')

  15. 何となく良さそうな ダッシュボード化はできた

  16. 実は他にも検討した - mackerel-agent タスクを One Task Per Host で起動する -

    mackerel-agent タスクから, 同じコンテナインスタンスで
 動く他のタスクのメトリクスが取得できない - タスクと mackerel-agent タスクを link して起動する - 1 タスク 1 ホストで課金されると厳しい
  17. まとめ - ECS を運用する場合, コンテナインスタンスだけじゃなくて,
 タスクのメトリクスも取得したい - Mackerel で「動的ポートマッピング」に対応した
 「カスタムメトリクス取得」と「ダッシュボード化」を考えた

    - もし Mackerel で正式に ECS 対応が入るなら不要になる - 引き続き ECS を使っていくぞ!