$30 off During Our Annual Pro Sale. View Details »

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

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

Yoshiaki Yoshida

February 05, 2018
Tweet

More Decks by Yoshiaki Yoshida

Other Decks in Technology

Transcript

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

    View Slide

  2. 吉田慶章 @kakakakakku
    - 株式会社マクアケ
    - インフラ, サーバサイド, 認定スクラムマスター, 技術広報など
    - 趣味は「ブログを書くまで寝ないこと」
    - http://kakakakakku.hatenablog.com/
    - 「アウトプット芸人」と呼ばれることも
    \意識高い系/

    View Slide

  3. 去年のアウトプット紹介
    - 登壇 : 14回 (月1回以上)
    - ブログ : 77記事 (週1記事以上)

    View Slide

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

    View Slide

  5. Mackerel & Makuake
    - もともと Zabbix を使っていた
    - 2016年6月に Mackerel を導入した
    - 現在は Mackerel メインで, 一部 Zabbix も併用している

    View Slide

  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 オフセット監視

    View Slide

  7. ローリングデプロイをするときに mkr でホストをメンテナンスに
    mkr : ステータス変更
    $ mkr update --status maintenance
    ELB
    EC2
    EC2
    EC2

    View Slide

  8. mkr : ダッシュボード管理
    $ mkr dashboards generate dashboards/xxx.yml
    $ git push
    ダッシュボード定義を Infrastructure as Code 化
    mkr dashboards pull
    もあると助かる‼

    View Slide

  9. mkr : 監視ルール管理
    監視ルールを Infrastructure as Code 化 + CI
    $ mkr monitors pull
    $ git push Trigger
    $ mkr monitors diff

    View Slide

  10. mackerel-agent v0.49.0 以降, 推奨
    - Docker ホストをモニタリングする場合, 大量のメトリクスを取得してしまう
    - dm-* ( デバイスマッパー )
    - veth* ( バーチャルイーサネット )
    - メトリクス数が 200 を超えると, ホスト1台に換算されてしまう
    - されていた
    - mackerel-agent v0.49.0 で修正された

    View Slide

  11. と, ここまでは普通

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. Docker
    ECS コンテナ
    インスタンス
    ALB
    ( 動的ポートマッピング )
    ECS サービス
    Docker
    ECS
    クラスタ
    ECS コンテナ
    インスタンス
    ECS
    タスク
    ECS
    タスク
    モニタリングしたくなる箇所
    mackerel-
    plugin-gostats
    で取得できる
    メトリクスなど

    View Slide

  16. どうしよう

    View Slide

  17. ECS クラスタ
    mackerel-plugin-aws-ecs
    - CPUReservation
    - CPUUtilization
    - MemoryReservation
    - MemoryUtilization
    ECS クラスタ CloudWatch インスタンス
    2017.12.23 に
    リリースされた plugin
    去年までは
    CloudWatch を見ていた

    View Slide

  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 とか作れたら便利かも

    View Slide

  19. plugin-registry
    bob/mackerel-plugin-bob
    alice/mackerel-plugin-alice
    mackerelio/plugin-registry
    mackerel-plugin-bob.json
    mackerel-plugin-alice.json
    JSON を登録する
    JSON を登録する

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. ECS コンテナインスタンス + ECS タスク
    2. コンテナインスタンスに mackerel-agent をインストールする
    Docker
    ECS コンテナ
    インスタンス
    Docker
    ECS コンテナ
    インスタンス
    ECS
    タスク
    ECS
    タスク
    cloud-init (User Data) 経由で
    mackerel-agent をインストールし,
    「カスタムメトリクス取得スクリプト」
    も配置している

    View Slide

  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 の結果からポートを取得する
    カスタムメトリクスの
    プレフィックスにポートを付与する
    メタ情報
    シェル芸

    View Slide

  25. タスク単位 (ポート) で取得できるようになった
    gostats.32769.memory.memory_sys
    gostats.32772.memory.memory_sys
    gostats.32773.memory.memory_sys

    View Slide

  26. 次に, ダッシュボードを考える
    ロールグラフだと

    ポート部分をワイルドカードにして

    グラフ表示をすることができない

    View Slide

  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

    View Slide

  28. Docker
    ECS コンテナ
    インスタンス
    ALB
    ( 動的ポートマッピング )
    ECS サービス
    Docker
    ECS
    クラスタ
    ECS コンテナ
    インスタンス
    ECS
    タスク
    ECS
    タスク
    整理するとこうなる

    View Slide

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

    - 「コンテナサポート」の詳細を聞かせてください‼

    View Slide

  30. おまけ

    View Slide

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

    View Slide

  32. AWS Fargate
    Fargate の特徴は, コンテナインスタンスの管理から解放されることと,
    awsvpc ネットワーキングモード前提になったこと ( = 動的 IP マッピング )
    どうやって ECS タスクをモニタリングしよう?

    View Slide

  33. 例えば...?
    メトリクス取得
    コンテナ
    (簡易エージェント)
    メトリクス取得
    コンテナ
    (簡易エージェント)
    メトリクス取得
    コンテナ
    (簡易エージェント)
    稼働中の NIC 情報を取得
    インスタンス
    mackerel-plugin-
    ecs-task-metrics
    ( ちなみに, Fargate だけじゃなくて, 通常の ECS でも使えて, メリットがある )
    http 経由

    View Slide

  34. 紹介したアーキテクチャは, 既に id:okzk が実装済
    今日会場に来てます✋
    MackerelでのECSのタスクのメトリクスの2018年版
    http://okzk.hatenablog.com/entry/2018/01/28/223245

    View Slide

  35. そもそも?

    View Slide

  36. シンプルに考えると
    タスクごとに mackerel-agent コンテナを link するだけで良いはず
    Docker
    ECS コンテナ
    インスタンス
    Docker
    ECS コンテナ
    インスタンス
    ECS
    タスク
    ECS
    タスク
    でも「タスク = ホスト」として
    課金されるのは厳しいので,
    コンテナ特化の課金体系が欲しい

    View Slide

  37. まとめ

    View Slide

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

    View Slide