CloudWatch ログパターンに基づいたアラートテキストメッセージの送信
パク・ヒョンテク
Twigfarmのシニア・フルスタック・エンジニア
前書き
システムの信頼性を維持するには、予期せぬ事態が発生したときに監視またはアラートを受け取ることが不可欠です。システム障害は、できる限り早く、適切な担当者に検討してもらう必要があります。これは以下のように簡単に説明できます。 クラウドウォッチ。
この投稿では、簡単なものを作成します ラムダ 関数と、正常状態のテストとエラー状態のテストが2つあります。エラー状態が発生すると、ノースバージニア(us-east-1)から韓国のソウル(ap-northeast-2)まで、SMSテキストメッセージが私の携帯電話番号に送信されます。
アイデアは簡単です:
- ラムダの実行中に例外が発生する
- のロギングエラー クラウドウォッチ そのラムダに関連付けられています
- クラウドウォッチ ログテキストに否定的な表現が含まれている場合、SMS テキストメッセージを説明する別の lambda 関数を呼び出します
シンプルなラムダ関数の作成
に移動 ラムダ関数 そしてクリック 関数を作成。次に、好きな名前で簡単な関数を作成します。
ラムダコードは単純な除算を行います。私たちの目標は、次のような場合に参加することです。 例外をゼロで除算 起こる。
テスト入力 (OK ケース)
OK テストケースのログ
テスト入力 (エラーケース)
エラーテストケースのログ
SMS 送信者ラムダ関数
という別のラムダ関数を作成しましょう SMS 送信者CloudWatch ログに特定のパターンが含まれている場合にトリガーされます。今のところ、このラムダ関数は入力を出力するだけなので、CloudWatch の入力形式がどのようなものかを識別できます。
SMS 送信者
クラウドウォッチサブスクリプションフィルター
今 クラウドウォッチサブスクリプションフィルター 次の 2 つの Lambda 関数が接続されています。
CloudWatch —> ログ —> ロググループ —> /aws/lambda/cloudwatch-alert-test に移動します
次に、をクリックします 購読フィルター タブをクリックして選択 Lambda サブスクリプションフィルターの作成
次のように入力してください。
- ラムダ関数:SMS送信者
- ログ形式:その他
- サブスクリプションフィルターパターン:ゼロ例外による除算
- 購読フィルター名: 好きな名前なら何でも
をクリックします ストリーミングを開始する ボタンをクリックして CloudWatch サブスクリプションフィルターの設定を終了します。
つまり SMS 送信者 Lambda 関数がテストされるのは、CloudWatch ログに文字列が含まれている場合のみです 例外をゼロで除算。
テスト
次の 2 つのテストを作成しました。 クラウドウォッチアラートテスト。それぞれを実行して CloudWatch のログをチェックしてください。 SMS 送信者 関数が次の場合のみ意図されているかどうかを確認する 例外をゼロで除算 幸せです。
入力の受け渡し元 クラウドウォッチ に SMS 送信者
何が見えますか SMS 送信者 クラウドウォッチログ?関数はエラーテストケースでのみトリガーされましたか?まさしくそうです。次に、ログ内のイベントパラメータ値を見てみましょう。次のようなデータ値が表示されるはずです。
それはなんですか?データを解読するには解凍する必要があります。
からのデコード入力 クラウドウォッチ
次のコードでは、CloudWatch からの入力を解凍します。
変数 StringResult は、次のような入力の文字列化されたバージョンを表示します。
アラートメソッドの要件がWebhook通知の場合は、ラムダ関数にHTTP POST呼び出し用のコードを数行追加するだけで済みます。話は終わりです。
SMSテキストメッセージはアラート要件の手段であるため、もう1つ設定が必要です。
SMS テキストメッセージング用の Amazon 簡易通知サービス (SNS) の設定
2021 年 12 月現在、モバイルテキストメッセージング (SMS) 機能はソウル地域 (ap-northeast-2) ではサポートされていません。そこで、地域を変更して SNS のテキストメッセージ設定を完了しました。
サポートされている地域は以下のとおりです。 https://docs.aws.amazon.com/sns/latest/dg/sns-supported-regions-countries.html
リージョンをus-east-1に変更したら、 アマゾン SNS —> モバイル —> テキストメッセージ (SMS)。お住まいの地域でテキストメッセージ (SMS) が表示されるようになった場合は、お住まいの地域ではこの機能がサポートされていない可能性があります。
サンドボックス宛先の電話番号の下にあるをクリックします 電話番号を追加 レシピの電話番号を追加するため。デフォルトではサンドボックスモードになっていますが、次のようないくつかの問題があります。
- 受信者の電話番号を確認する必要があります
- 1 USD がご利用いただける上限額です。(限度額を受け取るとメッセージの送信を停止します)
注:制限の引き上げはいつでもこちらからリクエストできます。 https://aws.amazon.com/premiumsupport/knowledge-center/sns-sms-spending-limit-increase/
AWS サポートでは、制限のリクエストに応じてサンドボックスから抜け出すこともできます。
テスト用に受信者の電話番号を追加したら、次に戻りましょう SMS 送信者 テキストメッセージ用のコードを追加するためのLambda関数。
でのテキストメッセージコードの公開 SMS 送信者
以下は完全なラムダコードです SMS 送信者、メッセージ送信機能が追加されています。
ほぼ完了しました。最後の調整が 1 つ残っています。Lambda ロールにはテキストメッセージを送信する権限が必要です。
テキストメッセージの IAM ロール
IAMの役割に移りましょう SMS 送信者 ラムダ関数。
Lambda ロールで、をクリックします ポリシーをアタッチ —> チェック アマゾン SNS フルアクセス —> クリック ポリシーをアタッチ ボタン。
最終テスト
これで、すべてのコンポーネントがセットアップされ、準備が整いました。に戻る クラウドウォッチアラートテスト Lambda 関数と実行エラーテストケース。数秒待ってください。すべての設定が完了したらテキストメッセージが届きます。メッセージは好きなように変更できます。メッセージが 160 文字を超える場合、メッセージは別々のメッセージに分割されることに注意してください。
Conclusion
アラートシステムは、さまざまなログパターンでさまざまな方法で設計できます。もう長くはかかりません。 CloudWatch サブスクリプションフィルター。
何かが長く続く場合にアラートを受け取ることは非常に便利です。しかし、携帯電話の振動が本来あるべき値よりも大きくなると驚くかもしれません。はい、バランスを取るのはとても難しいです。分かってるよ 例外をゼロで除算 SMSテキストメッセージアラートを受け取るのに適したケースではありません:)
システムごとに信頼性要件は異なります。アラームを発するタイミングは、要件に従って設計する必要があります。誤警報を課すことも克服すべき重要なポイントです。
ハッピークリスマス、そして信頼できるシステムへ!