質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

310閲覧

AWS EC2の稼働状況を監視したい(slackへの通知)

abcba

総合スコア2

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2024/09/17 23:24

実現したいこと

AWS EC2インスタンスの起動状況を監視するシステムを構築中です。
以下対象期間でインスタンスが停止状態の場合はアラームをslackに発報するようにしたい。
対象期間:7時-夜21時の期間(期間中はEventbridgeスケジュールでサーバの起動停止を制御しており、期間外は停止している)

発生している問題・分からないこと

対象インスタンスのCPUUtilizationメトリクスでCloudwatchアラームを作成し、低い水準値を下回った場合またはメトリクスの値がとれていない場合(欠落データを不正として処理)にSlackにアラートを発報するように設定しました。
こちらのCloudwatchアラームをEventbridgeスケジュールで7時から21時に有効にしてそれ以外の時間はサーバ自体が停止状態のためアラートが発報されないように制御しています。
ただ、何かしらの問題で7時の時点で停止状態の場合はアラートが発報してくれません。
7時の時点(Cloudwatchアラームを有効化した時点)でサーバが停止中の場合はアラートが発報するようにしたいのですが方法がわからず、藁にも縋るおもいで本質問ページを作成しました。

どなたか知っている方がいらっしゃいましたらご教示いただけますと幸いです。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

現在こちらのシステムを2パターンにて作成してみました。
1、Eventbridgeルールでサーバの起動状況に変化(stopped)が起きたらslackにアラート発報
2、CloudwatchアラームでCPUUtilizationの値が異常値になった場合slackにアラート発報
※どちらもSNS,AWSchatbotを使用してslackに発報しています。
※どちらもEventbridgeスケジュールで7時から21時に有効となるよう制御しています。

Eventbridgeのルールでサーバのステータスがstoppedになったらアラートが発報されるように設定しましたが、やはりこちらもルールの有効化時点で停止状態の場合は発報されないようです。
イベントパターン

{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["stopping", "stopped"], "instance-id": ["i-007d83df679a3143c"] } }

補足

7時の段階でサーバが起動中の場合はこちらのシステムで問題ないのですが、アラームの有効化時にサーバがすでに問題があり停止していた場合は意味をなさない状態となってしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2024/09/18 01:36

同じような投稿を複数していますが、投稿後に追記や変更がしたいのであれば、投稿は編集できるので複数投稿はすべきではありません。 運営に連絡して、不要なものは削除依頼出してください。
abcba

2024/09/24 14:10

ご指摘助かります。 投稿ボタンを押下後、画面遷移が無かったので複数回ボタンを押下してしまいその結果質問ページが重複して作成されました。 先程削除申請しました。
guest

回答2

0

ベストアンサー

1、Eventbridgeルールでサーバの起動状況に変化(stopped)が起きたらslackにアラート発報
2、CloudwatchアラームでCPUUtilizationの値が異常値になった場合slackにアラート発報

1のほうでイベントがトリガーされないのは、単純に考えると単にまだ起動していない場合(変化したのではなく、stoppedのままの場合)じゃないですかね。
EventBridgeはイベント発生時に条件に合致するとトリガーされるので、有効化時点で既にstopping、ないしstoppedだった場合は引っかかりません。(まあ、stoppingだった場合はその後stoppedに以降するはずなのでそこでトリガーされるでしょうけれど)

2のほうはアラートのトリガー条件を書いていないのでわかりませんが、異常値の判定方法が1回の値ではないのではないでしょうか

1は今回の目的に沿いませんが、停止が発生したときにアラームが発生するのは良いと思うので継続的に設定しておいていいでしょう。

2については、稼働していない判定をCPU使用率によって行うのは悪手だと思います。CPU使用率自体の異常値は監視対象であるべきですが、異常値であることがすなわち停止していることと一致するわけではありません。

まず今回監視すべきケースは何でしょうか。

ざっくりと考えると

  • 7〜21時の間に停止が発生したケース
  • 7時時点でインスタンスが起動していないケース

が考えられます。

前者については以下の記事が参考になります
EC2インスタンスの3つの死活監視

後者は「停止が発生した」ではないケース(起動していない)が考えられるのでアプローチを変えたほうがよさそうですね。
上の記事にあるステータスの確認と合わせ、

  • Lambdaでインスタンスの状態を取得して、条件判定してSlackに通知する(既に記載いただいている方法です)
  • 何らかの監視用エージェント(DatadogやNewRelicなど)を入れているなら大体はホストの状態を示すメトリクスがあるのでそちらをトリガーにアラートを生成する
  • 外から何かしらのリクエストを送り、レスポンスを監視する(いわゆる外形監視)

などを併用するとよいと思われます

投稿2024/09/18 07:07

yu_1985

総合スコア7595

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abcba

2024/09/24 14:04

1はご記載いただいた通りLambdaで特定の時間にステータスを確認する関数を呼び出しRunning以外のステータスはSlackに通知する形で検知してくれそうです。 また、2につきましてはCPUUtilization稼働状況の監視は悪手とのことで深堀して方法もさがしたところEventbridgeRuleでインスタンスのステータス変更をトリガーにできそうなのでこれをchatbotと連携してSlackに通知する設定ができそうです。 そのほかご記載いただいた内容も大変参考になりました。 ありがとうございました。
guest

0

Amazon EventBridgeで7時にイベントを起こして
Lambda関数でEC2のインスタンス状態を取得(参考
Slackへ発報というのは如何でしょうか。

投稿2024/09/18 04:04

odataiki

総合スコア973

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abcba

2024/09/24 14:05

ありがとうございます。 こちら記載いただいている方法も使用することで状態監視ができそうです! 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問