2019年10月17日やりたかったことEC2の監視を外部サービスに依存せず、AWSの機能だけで行いたかったのと通知先はSlackにしたかったので下記を利用して設定した際のメモです。先に結論を書くと、今のところ、監視はAWSの仕組みを使わずに外部サービスを使った方が良いかもな〜というのが私の感想です。CloudWatchで取得できるメトリクスをモニタリング対象にして閾値をこえたら通知させることができるのですが、私が単にやりたかったことはディスクの容量やCPU使用率、メモリ使用率だけのシンプルなものに対して、かなり複数の要素が出てきて中々大変でした。上記をやるだけならMackerelとかの方が圧倒的に楽です。したらもっと良い方法があったのかもしれないですが、とりあえず私がやったことをメモしていきます。はじめにCloudWatchAgentのインストール設定の流れとしては、EC2にCloudwatchAgentをインストールして、メトリクスを取得する必要があります。Managerを使うことでコンソールからエージェントをインストールしたり、共通設定を適用できるようです。構成管理を行うためコンソールでポチポチではなくAnsibleでやりたいので、最低限の共通設定を下記のように作成して適用するようにしました。amazon-cloudwatch-agentこれを全台に適用すると、CloudWatchのメトリクスが取得できるようになります。CloudWatchAlarmは、取得できたメトリクスに対してアラーム(メールを送信したりする)を設定することが可能です。Chatbot少し前までは、Slackへの通知はLambda連携するのが一般的だったようです。Chatbotを使用すると簡単に通知設定できます。CloudWatchAlarmを設定する際に通知先の設定がありますので、先にChatbotでSlack通知の設定をします。Chatbotにアクセスして、画面右上よりSlackを選択します。するとアクティブなSlackのポップアップが出るのでそこでアクセスを許可します。あとは画面に沿って進めるだけです。SNSChatbotが設定できたら、SNSと連携します。SNSと連携することで、各種AWSの通知先エンドポイントとして設定できるようになります。Chatbotはサブスクリプションで設定します。CloudWatchAlarm最後に監視の設定です。いわゆる閾値設定をここで行います。この設定は中々にハードが高く、例えば、3分間の平均値でCPU使用率90%超えたらSlackに通知するというのを共通のものとしたい場合に、1つの設定を複数台のサーバーへ適用することが出来ません。そのため、一つの設定をコピーして使用することになり、これがなっかなかに大変です。そこで調べてみたところ、radiosondeというツールを使っている人が多いことがわかりました。https://github.com/codenize-tools/radiosondeこれは、Rubyで作られたツールで既存の設定をエクスポート、ドライラン、適用まで必要な機能が備わっているOSSです。今回はこちらを使用して、基本的な監視設定をコンソールで1台行い、それをエクスポートしてコピーして作るという作業をしました。本当はここから、うまいことEC2インスタンスの情報を取得して汎用的に設定できるようにしたかったのですが一旦はすべて冗長的に書いて対応することにしました。下記のようにSlackに通知されるようになりました。設定してみて最終的に、AnsibleでCloudWatchAgentはインストールできるようになり、rasiosondeがあればなんとかなるようにはなりましたが中々大変でした。個人的にはAgentのインストールが一番面倒で、一番最初にインストールした場合、Mackerelのようにデフォルト設定で最低限必要な監視が最初から行われるわけではなく、必要なメトリクスをjsonで書いてあげる必要があります。これが最初わからなくて、なんでメトリクス取得できないか小一時間悩みました。800×400」みたいなサイズだけで、何が通知されてきたのかがわからないのがツライです。これはカスタマイズできるのか、これから調べてみようと思います。監視設定にあまり工数をかけたくないというのが正直なところ。どちらかというと、初期設定よりも、その後の運用がしやすいものが良いなと改めて感じました。学びがあり、とりあえずベースが出来たので良かったです。