中小企業の社内システムのログ監視とアラート設計。何を見張るか、通知の宛先と夜間の扱い、誤報を減らす設定をAWS CloudWatchの例で
中
この
株式会社bundlyzeでは
ログ監視は「使う人が困ること」から見張る項目を決める
ログ監視で
| 使う |
見張るもの | AWSでの |
|---|---|---|
| ログインできない、 |
外から |
CloudWatch Synthetics で |
| 画面が |
応答に |
ロードバランサーや |
| 保存したはずの |
アプリの |
アプリの |
| 夜の |
処理が |
成功した |
| 請求書や |
メール送信の |
送信サービスのは |
| 突然 |
ディスクや |
容量の |
表の
外から開く監視と、中のログを数える監視の両方を置く
監視は、
| 種類 | 気づける |
気づけない |
|---|---|---|
| 外から |
画面が |
画面は |
| 中の |
保存の |
サーバーごと |
外から
中の
アラートは「すぐ起こす」「翌朝見る」「記録だけ」の3段に分ける
アラートは、
| 段 | 鳴らす条件の |
通知の経路 | 受けた |
|---|---|---|---|
| すぐ起こす | 画面が |
当番の |
手順書に |
| 翌朝見る | エラーの |
チャットの |
始業時に |
| 記録だけ | 1件ごとの |
通知せず、 |
週に |
段を
通知の宛先は個人ではなく窓口にし、夜間は起こす条件を絞る
アラートの
AWSでは、
夜間や
- 夜間に
起こす相手と、 :取り決めのその 時間帯を 保守の 取り決めに 書く ない 時間帯に 「すぐ 起こす」 アラートが 鳴っても、 受ける 人が いなければ 意味が ありません - 夜間は
「翌朝見る」の :CloudWatchの通知を 止める アラームの ミュートルール (Alarm Mute Rules)では、 繰り返しの 時間帯を 決めて、 その間の アラームの 動作だけを 止められます。 アラームの 評価は 続き、 時間帯が 終わった 時点で まだ 異常が 続いていれば、 止めていた 動作が もう 一度 実行されます - 夜間の
処理と :夜の重なる 時間は、 関係する アラートを 止める バックアップや 集計で 一時的に 負荷が 上がる 時間に、 応答時間の アラートが 鳴らないようにします
誤報は「何回のうち何回」「欠けたデータの扱い」「組み合わせ」の3つで減らす
アラートの
1つ目は、
2つ目は、
| 設定 | 欠けた |
向いている |
|---|---|---|
| notBreaching | 基準内 |
エラーが |
| breaching | 基準超え |
成功した |
| ignore | 今の |
届く |
| missing | 評価する |
常に |
3つ目は、
CloudWatchでの設定の例
ここでは、
アプリのlevel が ERROR の
aws logs put-metric-filter \
--log-group-name /internal-app/web \
--filter-name app-error-count \
--filter-pattern '{ $.level = "ERROR" }' \
--metric-transformations \
metricName=AppErrorCount,metricNamespace=InternalApp,metricValue=1,defaultValue=0メトリクスフィルターは、
この
aws cloudwatch put-metric-alarm \
--alarm-name internal-app-error-burst \
--alarm-description "手順書: 社内Wikiの『エラー増加時の確認』を参照" \
--namespace InternalApp \
--metric-name AppErrorCount \
--statistic Sum \
--period 300 \
--evaluation-periods 3 \
--datapoints-to-alarm 2 \
--threshold 5 \
--comparison-operator GreaterThanOrEqualToThreshold \
--treat-missing-data notBreaching \
--alarm-actions arn:aws:sns:ap-northeast-1:123456789012:alert-next-morning夜間の
# 夜間の処理の最後(成功したときだけ)に実行する
aws cloudwatch put-metric-data \
--namespace InternalApp \
--metric-name NightlyJobSucceeded \
--value 1
# 24時間のあいだに成功の記録が1件もなければ鳴らす
aws cloudwatch put-metric-alarm \
--alarm-name internal-app-nightly-job-missing \
--namespace InternalApp \
--metric-name NightlyJobSucceeded \
--statistic Sum \
--period 86400 \
--evaluation-periods 1 \
--threshold 1 \
--comparison-operator LessThanThreshold \
--treat-missing-data breaching \
--alarm-actions arn:aws:sns:ap-northeast-1:123456789012:alert-next-morningこのbreaching を
アラームごとに、鳴ったときの手順書を1枚用意する
アラームを
手順書には、
- この
アラームが :どの何を 意味するか 困りごとに つながっているか - 最初に
見る :ダッシュボード、画面 ログの 検索の 条件 - よく
ある 原因と、 それぞれの 確かめ方 - 自分で
戻して :再よい 操作と、 してはいけない 操作 起動して よいか、 データに 触れて よいか - 誰に、
いつ知らせるか :利用者への周知が 要る 場合の 文面の 置き場所
CloudWatchの
月に一度、鳴ったアラートを振り返って設定を直す
アラートの
| 振り返りで |
直し方 |
|---|---|
| 鳴ったが、 |
段を |
| 鳴らなかったが、 |
見張る |
| 夜間に |
本当に |
| 手順 |
手順書を |
振り返りの
ログ監視とアラートを始める順番
最初から
- 使う
人が :発注者と困る ことの 表を 作る 保守の 担当で 一緒に 埋める - アプリの
ログを、 :時刻・重さの数えられる 形で 出す 段階・処理の 名前・要求の 番号。 個人情報は 出さない - 外から
開く :ログイン画面が監視を 1つ 置く 開く かから 始める - 3段の
窓口を :段ごとの作る 通知先と、 夜間に 起こす相手を 決める - アラームを
作り、 欠けた データの 扱いと 何回の うち何回を 決める - アラームごとの
手順書を 書く - 月に
一度の 振り返りを 予定に 入れる
監視の
出典
以下の
- Amazon CloudWatch ユーザーガイド Alarm evaluation:Period・Evaluation Periods・Datapoints to Alarm と、
M out of N の アラーム - Amazon CloudWatch ユーザーガイド Configuring how CloudWatch alarms treat missing data:欠けた
データの 4つの 扱いと 既定の missing - Amazon CloudWatch ユーザーガイド Create a composite alarm:複合アラームの
条件の 書き方、 説明欄に 手順書への リンクを 書ける こと - Amazon CloudWatch ユーザーガイド Alarm suppression:複合アラームの
抑止の 設定 - Amazon CloudWatch ユーザーガイド Alarm Mute Rules:時間帯を
決めて アラームの 動作を 止める 設定と、 終了時の 再実行 - Amazon CloudWatch Logs ユーザーガイド Creating metrics from log events using filters:メトリクスフィルターが
作成後に 取り込まれた ログにだけ当ては まる こと - AWS Certificate Manager ユーザーガイド Supported CloudWatch metrics:証明書の
期限までの 日数を 表す DaysToExpiry - Amazon CloudWatch ユーザーガイド Synthetic monitoring (canaries):決まった
間隔で 利用者と 同じ 操作を たどる カナリア
よくある質問
ログ監視は、エラーが1件出たらすぐに通知する設定でよいですか?
1件ごとの
社員が少なく、夜間に対応できる人がいません。夜のアラートはどうすればよいですか?
夜に
CloudWatchのアラームが「データ不足」の状態になるのは、異常ですか?
必ずしも