【GCP入門編・第22回】 Stackdriver Logging で収集したログに対して、フィルタの実行や警告を設定しよう!

GCP

投稿日:2018/08/28 | 最終更新日:2018/10/11

前回の記事【第21回】 Stackdriver Logging でアプリケーションのログを収集しよう! では、 Stackdriver Logging を用いて gcloud コマンド、 App Engine 上のアプリケーションからログの送信を行う方法について解説しました。
この記事では、収集したログに対して詳細なフィルタを実行する方法と、収集したログをベースに Stackdriver Monitoring で警告を設定する方法を解説します。

この記事の目的

  • Stackdriver Logging で収集したアプリケーションのログに対してフィルタを実行しよう。
  • 収集したログをベースに Stackdriver Monitoring で警告を設定しよう。

収集したログに対してフィルタを実行する

前回の記事【第21回】 Stackdriver Logging でアプリケーションのログを収集しよう!で App Engine から送信したログや gcloud から送信したログなど、いくつかのタイプのログが Stackdriver Logging に収集されているかと思います。これらに対してフィルタリングを行い、条件にマッチするログを探すといった作業を行なっていきます。
まず、 Stackdriver Logging のログビューワーを開きます。 GCP のコンソールから左側のメニューをクリックし、 [Logging] をクリックします。すると、 Stackdriver Logging のログビューワーが開きます。
次に、モードを Basic から Advanced に変更します。下の画像の赤で囲われている箇所をクリックし、[Convert to advanced filter] をクリックします。
Stackdriver Logging ログビューワー
これで、詳細なクエリを編集することが可能になりました。
Stackdriver Logging のログ検索クエリは、ログエントリの各フィールドに対して検索を行うクエリと、すべてのフィールドを対象としたクエリを発行することが可能です。すべてのフィールドを対象とする場合は、通常の全文検索と同じ要領で、テキストをクエリとして発行します。構造化されたデータのフィールドに対してクエリを発行する場合は、以下の記法でログを検索することが可能です。

フィールドを指定して検索する場合

フィールドを指定して検索を行う場合、以下の方法でクエリを組み立てます。

path:query

path にはフィールドの名前、 query には検索クエリが入ります。
例えば HTTP のレスポンスコードが200であるクエリのみを検索したい場合は、以下のクエリとなります。

httpRequest.status: 200

このクエリでは、 httpRequest というキーの status200 のログを抽出します。
複数の条件を AND もしくは OR で繋ぐことも可能です。以下のクエリでは、 GAE のアプリケーションのログかつ、レスポンスコードが 200 のログを抽出しています。

httpRequest.status: 200 AND resource.type:gae_app

このクエリを発行すると、以下のようにフィルタされたログが表示されます。
GAE のステータスが 200 であるログエントリのみが表示されていることがわかるかと思います。
フィルタされたログ
次に、フィルタをかけたログを基に、警告を設定する方法について解説します。

ログを基にしたメトリクスと警告を設定する

Stackdriver Logging は、同じ Stackdriver のサービスである Stackdriver Monitoring と連携し、ログを基にしたメトリクスと警告を設定することが可能です。
今回は、 severity が CRITICAL のログが出力された場合に警告を通知するという設定を行い、実際に通知してみます。
まず、 Log based metrics の設定を行います。先ほどのログビューワーを開き、フィルタの設定を advanced log filter に変更します。
次に、以下のクエリを入力します。

logName: test-log AND severity: CRITICAL

test-log という名前のログに、 severityCRITICAL であるログを抽出するフィルタです。このフィルタを設定してクエリを発行すると、検索結果が1件もない状態で結果が表示されます。
次に、画面上部に表示されている、[CREATE METRIC] をクリックします。すると以下のようにメトリクスの名前と説明を入力するためのフィールドが表示されます。ここにメトリクスの名前として “test-log-critical” 、説明に “critical alert” と入力します。
CREATE METRIC
入力したら、 [Create Metric] をクリックしましょう。これでメトリクスの作成は完了です。
次に、画面左側に表示されているメニューの [Logs-based Metrics] をクリックします。すると、下図の通り [User defined Metrics] の下に先ほど作成したメトリクスが表示されているかと思います。
Logs-based Metrics
このメトリクスの右側にあるメニューボタンをクリックすると、 [Create alert from metric] というメニューが表示されます。
こちらをクリックし、 Stackdriver のページに移動します。
“Edit Metric Threshold Condition” というページに移動しているかと思います。
こちらで、以下の画像のように閾値を設定します。Resource は “Any” に、 FOR は “most recent value” 、 count は “0.01” に設定しましょう。
Edit Metric Threshold Condition
[Save condition] をクリックすると、 Alerting Policy の設定画面に移動します。
Notification には “Email” を指定します。
Alerting Policy
最後に [Save Policy] をクリックすることで、 Alerting Policy の設定が完了します。
それでは、早速警告を通知してみましょう。
ターミナルを開き、 gcloud コマンドで以下のコマンドを入力します。

gcloud beta logging write test-log "This is critical error" --severity CRITICAL

すると、以下のように警告がメールで届きます。

おわりに

いかがでしたか。このように、 Stackdriver Logging を使うことで、ログを検索するだけでなく、検索結果を基にして警告を通知することも可能になります。アプリケーションのログを監視して、いち早く障害に対応したい、このような場合には非常に強力なツールとなるでしょう。

同じシリーズの記事

GCP のメリットを最大限に活用しよう!

GCP・G Suite のご相談・
お見積り依頼はお気軽に
TEL.03-5840-8815
お問合せフォーム TEL.03-5840-8815