システムログ監視などをしている際、単発であれば無視したい、でも頻発しているときは検知させたいという場合があります。
そんな時はGCPのロギングでログベースの指標を作成してアラートを設定します。
条件
- Compute Engine インスタンスの /var/log/messages に特定のメッセージが5分間に3件以上出力されたらアラートにする。
- /var/log/messages の取り込み設定自体は済んでいる前提(下記参照)
https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/configuration?hl=ja
設定方法
ログベースの指標の作成
「ロギング」>「ログベースの指標」を開く
「ユーザー定義の指標」にある「指標を作成」を選択
以下の条件を記載します。
- 指標タイプ: Counter
- 指標の名前: error-count (任意)
- 説明: 任意
- 単位: 入力不要
- ログのスコープ: プロジェクトのログ
- フィルタ: 下記のクエリ (検知条件に合わせる)
resource.type="gce_instance"
resource.labels.instance_id="XXXXXXXX"
log_name="projects/XXXXX/logs/syslog"
jsonPayload.message=~"error-test$"
指標タイプを Counter にすることでログの件数による指標を作成します。
名前と説明は任意のわかりやすいものを入れてください。
ログのスコープはバケットを絞ることができるので、管理方法によってはバケットを指定したほうが良いですね。
フィルタでは実際にカウント対象とする特定のログの条件を記載します。
今回は あるGCEインスタンスの/logs/syslogに出力される「error-test」の件数をカウントするためのクエリにしました。
クエリ記法は下記を参照して。プレビュー機能で合っているか確認してみてください。
最下段にある「指標を作成」を選択するとユーザー定義の指標が作成されます。
アラートポリシー作成
作成したユーザー定義の指標の右にあるメニューボタンから「指標に基づいて通知を作成する」を選択
通知ポリシー作成画面に遷移するので、以下を記載
- ローリングウィンドウ: 5分
- ローリングウィンドウ関数: sum
- 時系列集計: sum
ローリングウィンドウでチェック間隔を指定します。
合計発生件数をみたいので関数は sum を指定しました。
トリガー設定
- Condition Types: Threshold
- Alert Trigger: 任意の時系列の違反
- しきい値の位置: しきい値より上
- しきい値: 2
- 条件名: 任意
3件以上発生でアラートにしたいので、条件は「しきい値より上」でしきい値は「2」を指定しています。
通知チャンネルを設定したら「ポリシーを作成」で完了です!
動作確認
実際にカウント対象のログを発生させてアラートを確認してみます。
(/var/log/messages に logger-test (カウント対象のログ)を 3件書き込みます。)
[test@test ~]$ date;i=1; while [ $i -le 3 ]; do logger error-test; i=`expr $i + 1`; done
2023年 7月 29日 土曜日 14:02:09 JST
[test@test ~]$
ちゃんと書き込んだ時刻に 3件分カウントされてますね。
アラートメールも無事に届きました。
これで単発の問題ないログとはおさらばですね!
公式のドキュメントは以下です。
ログベースの指標の概要
https://cloud.google.com/logging/docs/logs-based-metrics?hl=ja
カウンタ指標を構成する
気に入ったらぜひ共有してください。