Mackerel で ECS をどこまでモニタリングできるのか / Monitoring ECS with Mackerel

Mackerel で ECS をどこまでモニタリングできるのか / Monitoring ECS with Mackerel

3da5b00de1285b12a17d730262cc4824?s=128

Yoshiaki Yoshida

February 05, 2018
Tweet

Transcript

  1. Mackerel で ECS を どこまでモニタリングできるのか Mackerel Meetup #11 Tokyo 2018.02.05

    @kakakakakku
  2. 吉田慶章 @kakakakakku - 株式会社マクアケ - インフラ, サーバサイド, 認定スクラムマスター, 技術広報など -

    趣味は「ブログを書くまで寝ないこと」 - http://kakakakakku.hatenablog.com/ - 「アウトプット芸人」と呼ばれることも \意識高い系/
  3. 去年のアウトプット紹介 - 登壇 : 14回 (月1回以上) - ブログ : 77記事

    (週1記事以上)
  4. 今日伝えたかったこと なぜ「食べる, 寝る」は習慣化できるのに 「ブログを書く」は習慣化できないのか?

  5. Mackerel & Makuake - もともと Zabbix を使っていた - 2016年6月に Mackerel

    を導入した - 現在は Mackerel メインで, 一部 Zabbix も併用している
  6. 使ってる plugins / check-plugins (一部) - mackerel-plugin-nginx - mackerel-plugin-php-fpm -

    mackerel-plugin-php-opcache - mackerel-plugin-fluentd - mackerel-plugin-aws-ses - mackerel-plugin-aws-ecs - mackerel-plugin-docker - check-procs - プロセス監視 - check-log - ログ監視 - check-ntpoffset - NTP オフセット監視
  7. ローリングデプロイをするときに mkr でホストをメンテナンスに mkr : ステータス変更 $ mkr update --status

    maintenance ELB EC2 EC2 EC2
  8. mkr : ダッシュボード管理 $ mkr dashboards generate dashboards/xxx.yml $ git

    push ダッシュボード定義を Infrastructure as Code 化 mkr dashboards pull もあると助かる‼
  9. mkr : 監視ルール管理 監視ルールを Infrastructure as Code 化 + CI

    $ mkr monitors pull $ git push Trigger $ mkr monitors diff
  10. mackerel-agent v0.49.0 以降, 推奨 - Docker ホストをモニタリングする場合, 大量のメトリクスを取得してしまう - dm-*

    ( デバイスマッパー ) - veth* ( バーチャルイーサネット ) - メトリクス数が 200 を超えると, ホスト1台に換算されてしまう - されていた - mackerel-agent v0.49.0 で修正された
  11. と, ここまでは普通

  12. ECS ( Amazon Elastic Container Service ) どうやって モニタリングしてますか?

  13. \2/5 19:35 コンテナサポート発表/ ちょwwwww

  14. Docker ECS コンテナ インスタンス ALB ( 動的ポートマッピング ) ECS サービス

    Docker ECS クラスタ ECS コンテナ インスタンス ECS タスク ECS タスク 構成サンプル = 今回の前提
  15. Docker ECS コンテナ インスタンス ALB ( 動的ポートマッピング ) ECS サービス

    Docker ECS クラスタ ECS コンテナ インスタンス ECS タスク ECS タスク モニタリングしたくなる箇所 mackerel- plugin-gostats で取得できる メトリクスなど
  16. どうしよう

  17. ECS クラスタ mackerel-plugin-aws-ecs - CPUReservation - CPUUtilization - MemoryReservation -

    MemoryUtilization ECS クラスタ CloudWatch インスタンス 2017.12.23 に リリースされた plugin 去年までは CloudWatch を見ていた
  18. - mackerel-plugin-aws-ecs は plugin-registry 経由でインストールする - plugin-registry はプラグインを集約する場所 - 今後のプラグインは

    mackerel-agent-plugins には依存しない - オレオレプラグインなどは plugin-registry を利用せずにインストールできる
 
 
 
 mackerel-plugin-aws-ecs $ mkr plugin install mackerelio/mackerel-plugin-aws-ecs Gemfile のように Mkrfile とか作れたら便利かも
  19. plugin-registry bob/mackerel-plugin-bob alice/mackerel-plugin-alice mackerelio/plugin-registry mackerel-plugin-bob.json mackerel-plugin-alice.json JSON を登録する JSON を登録する

  20. 話を ECS に戻すと...

  21. ECS コンテナインスタンス + ECS タスク - 戦略は大きく2種類ある - 1. mackerel-agent

    コンテナをコンテナインスタンスごとに起動する - タスク配置制約 を One Task Per Host (distinctInstance) にする - 2. コンテナインスタンスに mackerel-agent をインストールする - 普通に EC2 にインストールするのと同じ - CloudWatch でも ECS タスクのメトリクスは取得できない
  22. ECS コンテナインスタンス + ECS タスク 1. mackerel-agent コンテナをコンテナインスタンスごとに起動する Docker ECS

    コンテナ インスタンス Docker ECS コンテナ インスタンス ECS タスク ECS タスク 動的ポートマッピングだと, mackerel-agent コンテナ から ECS タスク内部のメトリクス (mackerel-plugins を使う系) を取得できず, 断念
  23. ECS コンテナインスタンス + ECS タスク 2. コンテナインスタンスに mackerel-agent をインストールする Docker

    ECS コンテナ インスタンス Docker ECS コンテナ インスタンス ECS タスク ECS タスク cloud-init (User Data) 経由で mackerel-agent をインストールし, 「カスタムメトリクス取得スクリプト」 も配置している
  24. #!/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 の結果からポートを取得する カスタムメトリクスの プレフィックスにポートを付与する メタ情報 シェル芸
  25. タスク単位 (ポート) で取得できるようになった gostats.32769.memory.memory_sys gostats.32772.memory.memory_sys gostats.32773.memory.memory_sys

  26. 次に, ダッシュボードを考える ロールグラフだと
 ポート部分をワイルドカードにして
 グラフ表示をすることができない

  27. アドバンスクエリで頑張る https://mackerel.io/embed/orgs/xxx/advanced-graph?query= role('yyy:xxx', 'custom.gostats.*.memory.memory_sys')&title=custom.gostats.*.memory.memory_sys&period=1w

  28. Docker ECS コンテナ インスタンス ALB ( 動的ポートマッピング ) ECS サービス

    Docker ECS クラスタ ECS コンテナ インスタンス ECS タスク ECS タスク 整理するとこうなる
  29. 運用してるけど... - オートスケールで ECS コンテナインスタンスが消えることもある - ダッシュボードもアドバンスクエリで頑張るしかない - 絶対にもっと良い方法があるはず -

    「コンテナサポート」の詳細を聞かせてください‼
  30. おまけ

  31. Fargate 登場でどう変わる ? 今後の話として

  32. AWS Fargate Fargate の特徴は, コンテナインスタンスの管理から解放されることと, awsvpc ネットワーキングモード前提になったこと ( = 動的

    IP マッピング ) どうやって ECS タスクをモニタリングしよう?
  33. 例えば...? メトリクス取得 コンテナ (簡易エージェント) メトリクス取得 コンテナ (簡易エージェント) メトリクス取得 コンテナ (簡易エージェント)

    稼働中の NIC 情報を取得 インスタンス mackerel-plugin- ecs-task-metrics ( ちなみに, Fargate だけじゃなくて, 通常の ECS でも使えて, メリットがある ) http 経由
  34. 紹介したアーキテクチャは, 既に id:okzk が実装済 今日会場に来てます✋ MackerelでのECSのタスクのメトリクスの2018年版 http://okzk.hatenablog.com/entry/2018/01/28/223245

  35. そもそも?

  36. シンプルに考えると タスクごとに mackerel-agent コンテナを link するだけで良いはず Docker ECS コンテナ インスタンス

    Docker ECS コンテナ インスタンス ECS タスク ECS タスク でも「タスク = ホスト」として 課金されるのは厳しいので, コンテナ特化の課金体系が欲しい
  37. まとめ

  38. まとめ - Makuake では Mackerel を活用している - plugins / mkr

    など - Mackerel で ECS (クラスタ, コンテナインスタンス, タスク) をモニタリングできる - plugins だけじゃなく, 多少のシェル芸なども必要 - 今後は Fargate 前提の仕組みも考える必要がある - と思ってたけど, 当日まさかの「コンテナサポート」発表(期待)