Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

    趣味は「ブログを書くまで寝ないこと」 - http://kakakakakku.hatenablog.com/ - 「アウトプット芸人」と呼ばれることも \意識高い系/
  2. Mackerel & Makuake - もともと Zabbix を使っていた - 2016年6月に Mackerel

    を導入した - 現在は Mackerel メインで, 一部 Zabbix も併用している
  3. 使ってる 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 オフセット監視
  4. mkr : ダッシュボード管理 $ mkr dashboards generate dashboards/xxx.yml $ git

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

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

    ( デバイスマッパー ) - veth* ( バーチャルイーサネット ) - メトリクス数が 200 を超えると, ホスト1台に換算されてしまう - されていた - mackerel-agent v0.49.0 で修正された
  7. Docker ECS コンテナ インスタンス ALB ( 動的ポートマッピング ) ECS サービス

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

    Docker ECS クラスタ ECS コンテナ インスタンス ECS タスク ECS タスク モニタリングしたくなる箇所 mackerel- plugin-gostats で取得できる メトリクスなど
  9. ECS クラスタ mackerel-plugin-aws-ecs - CPUReservation - CPUUtilization - MemoryReservation -

    MemoryUtilization ECS クラスタ CloudWatch インスタンス 2017.12.23 に リリースされた plugin 去年までは CloudWatch を見ていた
  10. - 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 とか作れたら便利かも
  11. ECS コンテナインスタンス + ECS タスク - 戦略は大きく2種類ある - 1. mackerel-agent

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

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

    ECS コンテナ インスタンス Docker ECS コンテナ インスタンス ECS タスク ECS タスク cloud-init (User Data) 経由で mackerel-agent をインストールし, 「カスタムメトリクス取得スクリプト」 も配置している
  14. #!/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 の結果からポートを取得する カスタムメトリクスの プレフィックスにポートを付与する メタ情報 シェル芸
  15. Docker ECS コンテナ インスタンス ALB ( 動的ポートマッピング ) ECS サービス

    Docker ECS クラスタ ECS コンテナ インスタンス ECS タスク ECS タスク 整理するとこうなる
  16. 例えば...? メトリクス取得 コンテナ (簡易エージェント) メトリクス取得 コンテナ (簡易エージェント) メトリクス取得 コンテナ (簡易エージェント)

    稼働中の NIC 情報を取得 インスタンス mackerel-plugin- ecs-task-metrics ( ちなみに, Fargate だけじゃなくて, 通常の ECS でも使えて, メリットがある ) http 経由
  17. シンプルに考えると タスクごとに mackerel-agent コンテナを link するだけで良いはず Docker ECS コンテナ インスタンス

    Docker ECS コンテナ インスタンス ECS タスク ECS タスク でも「タスク = ホスト」として 課金されるのは厳しいので, コンテナ特化の課金体系が欲しい
  18. まとめ - Makuake では Mackerel を活用している - plugins / mkr

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