プロジェクト

全般

プロフィール

第7回【いろいろなサービス使ってみよう編その4】

■CloudWatch

ひとことでCloudWatchといっても下にあげる大分類で異なる機能がある。

  • CloudWatch Alarm
  • CloudWatch Logs
  • CloudWatch Metrics
  • CloudWatch Events

CloudWatch Alarm

Metricsに基づいてAWSリソースを監視し通知を行うサービス。

EC2の自動スケーリングなどでもこの仕組みが利用される。

(自動スケール設定のイメージ)
CPU使用率をモニタリングするMetricsで5分間の平均使用率80%を超えたら発火するAlarmを作成。
Alarmでは、AMI(※)から新しいEC2インスタンスを起動するように定義する。

※ AMI=Amazon Machine Images. オートスケールのためには、最新のアプリケーションがデプロイ済のEC2インスタンスイメージをあらかじめImageとして固めておく必要がある。

CloudWatch Logs

ログの出力先となるサービス。
LambdaやECSからのアプリケーションログを始め、各種のAWSマネージドなサービスのログ出力先となる。
非マネージドサービス(EC2)から出力させるにはエージェントツールのインストールが必要。

CloudWatch Logsに出力されるログ→ストリーミングサービス(Kinesis Firehose)に流す+Lambda(整形)→S3バケットに保存
↑をAthenaで分析させる、のようなことも可能。

ログが細分化されてAWS管理コンソール上からログを探すのはつらい場合がある。
"awslogs"ツールを使うと便利。
"awslogs"をCloud9から実際に使ってみましょう。

pip install awslogs

# ロググループ名「XXX」の直近30分間のログを取得

awslogs get XXX -s 30m

ターミナルから直感的にCloudWatch Logsを検索できるawslogsコマンドの紹介

CloudWatch Metrics

各種サービスの状態に関する統計データ。
CPU使用率、メモリ使用率、ディスク使用率、Etc...(サービスによって収集されるメトリクスの種類は異なる)
これらの状態をAlarmで監視して通知などのアクションを設定できる。

CloudWatch Events

Rulesの機能で、cron式などを指定して何か(Lambdaなど)をスケジュール起動できる。
(「イベントバス」という機能は使ったことないのでよくわからん)

■CloudTrail

「いつ」「誰が」「何を」やったかの証跡を残すためのサービス。
有効化するだけでS3バケットにjsonで保存される。
CloudTrail上には90日間保存される。
CloudTrail自体は無料。保存先のS3バケットのストレージ利用料だけがかかる。
「いつまで」保存するかはS3バケット上のライフサイクルルール次第(今回は1年間に設定してみます)。

AWS CloudTrail とは
AWS CloudTrail のよくある質問


やってみること

CloudWatch Logs を文字列検知してログ内容をメールを送信してみた サブスクリプションフィルター版

  • SNSTopicの作成
  • Eメールのサブスクリプションを登録
  • 受信したメールのリンクをクリックして承認
  • メール通知用のLambda関数の作成(関数名は任意ですが"StudyCWLogSubscriptor"とでもしましょうか)
  • CloudWatchLogsでサブスクリプションフィルターを作成
  • 動作確認

↑でメール通知ができたら、こんどはこれをSlackのIncomingWebhook機能を使ってSlackのチャンネルにも通知させてみる

【2020年度版】Slack通知はSlack AppのIncoming Webhooksを使おう!やり方を解説

incomingWebhooks

  • Slack上のIncomingWebhooksの設定(管理者Only)
  • メール通知用のLambda関数を編集 → Slack通知機能を追加する(WebhookのURLにPOSTのHTTPリクエストを飛ばすだけ) ※
  • 動作確認

編集後のLambdaのコード
今回はpipの"requests"ライブラリを手軽に使うためにLambdaLayerを追加します。
このredmineの「ファイル」タブにzipファイル(requests.zip)があるのでダウンロードして、コンソールのLambda > レイヤーの画面から追加します。

参考: https://dev.classmethod.jp/articles/lambda-layer-first-action/


re:Invent
https://aws.amazon.com/jp/about-aws/events/2020/reinvent/

11 月 30 日 (月) ~ 12 月 18 日 (金) オンラインで開催 → ご興味があれば視聴してみてはいかがでしょうか(学習時間にも含められるはず)