Slide 1

Slide 1 text

ECS Fargate+Mackerelにおける 監視費用を削減するまでの話 JAWS-UGコンテナ支部 入門編 #7 初心者大歓迎LT大会 2022.08.09 株式会社ヌーラボ 中野 1

Slide 2

Slide 2 text

自己紹介 2 @maaaato Masayuki Nakano 💻: ヌーラボ Backlog課 Git Team ❤: 筋トレ/ウマ娘/ジョジョ/アニメ鑑賞/AWS 🏠: 󰘋と🐈と暮らしてます Embedded SREをしています

Slide 3

Slide 3 text

きょうお話すること ECS Fargateの監視にMackerelとCloudWatch Container Insightsを利用 ● Mackerelの費用を削減するための経緯と行ったこと ● Mackerel、CloudWatch Container Insightsでどういう監視をしているのか 質問や気になる事がありましたらお気軽にTwitterで! 3

Slide 4

Slide 4 text

なにがあったのか とある日のこと... 4 うわーぜったいうちやん... 最近リリースしたアプリの ホストメトリック数ってど うなっているっけ? あれ?Mackerelの費用が上 がってるな ホストメトリック数の超過が 目立つね ちょっと調べて みますね〜 言葉ではなく心で理解

Slide 5

Slide 5 text

Mackerelにおけるホストについて ホストとは「そのシステムを構成する最小単位」 1. スタンダートホスト a. mackerel-agentをインストールしたホスト(e.g. EC2など) 2. マイクロホスト a. mackerel-container-agentをサイドカーとして利用したホスト(e.g. ECS Fargateなど) 5

Slide 6

Slide 6 text

Mackerelにおけるホストについて ホストとは「そのシステムを構成する最小単位」 1. スタンダートホスト a. mackerel-agentをインストールしたホスト(e.g. EC2など) 2. マイクロホスト a. mackerel-container-agentをサイドカーとして利用したホスト(e.g. ECS Fargateなど) 6

Slide 7

Slide 7 text

マイクロホストメトリック数とは? >CPU使用率やメモリの使用量、ロードアベレージなど、サーバーにひも付くメ トリックを「ホストメトリック」と呼んでいます。 ※https://ja.mackerel.io/pricing より引用 マイクロホストメトリック数は上限値が設定されており 30となっている 30メトリック毎に1マイクロホスト分の費用が発生する つまり30を超えると俺が二人分になる!(2マイクロホスト扱い) 7

Slide 8

Slide 8 text

ECS Fargateの構成について ● 1つのClusterに複数のServiceが存在 ● Serviceのタスクの内訳 ○ Applicationコンテナ ○ サイドカーとしてLogコンテナと mackerel-container-agentがある ● LogはAmazon Kinesis Data Firehose経由 でログをElasticsearchに送信している 8

Slide 9

Slide 9 text

ECS Fargateのタスクと監視について 9 CloudWatch Alarmのアラート条件 1. Running Task CountがDesired Task Countを下回った 2. Running Task Countが0になった Application,Logのメトリクスを収集(自身のメトリクス含む) mackerel-plugin-gostatsを利用してカスタムメトリクスも収集 CloudWatch Container InsightsでTaskのプロセス監視 MackerelでTaskのリソース監視

Slide 10

Slide 10 text

超過したホストメトリック数に対して どういう判断をしたか Application以外のメトリクスは必要がないと判断 理由としてチームで毎朝メトリクスをチェックしている Log、mackerel-container-agentのメトリクスが安定していることがわかったため、メトリクス取 得対象から外すことにした 10 mackerel-container-agent 自身のメトリクス送信も止め る

Slide 11

Slide 11 text

特定のコンテナをignoreする 11 roles: - "Git: api" plugin: metrics: gostats: command: mackerel-plugin-gostats -port=9000 -path=/api/stats ignoreContainer: '\A(mackerel-container-agent|Log)\z' mackerel-container-agentのyamlファイルにignoreContainerを追加(正規表現が利用可能)

Slide 12

Slide 12 text

おどろきの結果 ホストメトリック数が30を切る状態になりホストメトリックの超過一覧から 運用しているコンテナが消えた もちろんMackerelの費用も下がることになり笑顔が溢れた 12 メトリックの対象からLogと mackerel-container-agentが 消えた

Slide 13

Slide 13 text

まとめ ● ホストメトリック数の扱いを把握できてなかった ● ホストメトリックの見直しをするにあたり必要がなくなったコンテナのメト リクス取得を止める判断をした ○ 必要かどうか判断をして止めたが、必要のあるメトリクスであれば無理 に止める必要はないと考えている ● Application以外のコンテナのメトリクスがMackerel上では反映されないので パッと見た時にリソース消費が減ったように錯覚 13