🌊

Log Analytics で Google Cloud のログを可視化する

2024/01/09に公開

こんにちは、SREディビジョンの松島です。
本記事では Cloud Logging の機能の一つである Log Analytics について機能と利用方法を解説したのち、実践的な利用例を紹介していきます。

Log Analytics とは

Log Analytics は Cloud Logging のログバケットに収集したログに対して SQL を利用してログの集計、可視化ができる機能です。

Log Analytics の GA 以前は集めたログに対する集計、可視化の機能がなく、何かしらのログ集計作業を行いたい場合はログベースメトリクスを作成するか、BigQuery に出力したログに対して集計、可視化操作を行うなどの対応が必要でした。
現在では、ダッシュボード機能はまだプレビュー機能であるものの、Log Analytics を利用することでログの集計、可視化を容易に行うことが可能となっています。

Log Analytics の使用料金

以下の通りとなります。詳細は公式ドキュメントをご参照ください。

  • 基本的にログバケットで Log Analytics を有効化することを含め、通常の Cloud Logging 利用料金からの増分は無し
  • BigQuery にリンクして分析を行う場合は BigQuery の使用料金がかかる

Log Analytics の利用方法

ログバケットに対して Log Analytics を有効化するだけで Log Analytics を使い始めることができます。
以下、有効化手順と基本的な操作を紹介します。

Log Analyticsの有効化

既存のログバケットに対して Log Analytics を有効化する場合は、対象のログバケットに対して「UPGRADE」をクリックすることで有効化できます。

enable1

新規に作成するログバケットの場合は作成時に「Upgrade to use Log Analytics」を選択することで有効化できます。

enable2

クエリの実行と可視化

まず、ロギングのメニューから「ログ分析」を選択します。
初期状態で、サンプルクエリが表示されるので「クエリ実行」により、クエリを実行します。

sample1

結果画面では、一致したログの一覧と、一致したログのエントリ数のグラフを閲覧できます。

sample2
sample3

この結果に対して、Web UI からの操作で可視化結果を調整することができます。

例えば、「期間」を調整することで、ログのエントリ数を集計する期間を調整できます。
下図は期間を10分に調整した場合の結果です。

sample4

ログのエントリ数の内訳を表示することもできます。
下図はログのエントリ数に対し Severity ごとの内訳を算出、グラフに面グラフを指定したものです。
(内訳に指定するには、元のクエリで内訳に指定する属性を SELECT しておく必要があります)

sample5

今回はサンプルクエリを実行しましたが、実際にクエリを実行する際は SQL で利用するスキーマ名が必要です。
これは Log Analytics のクエリ入力画面の「ログビュー」から確認することができます。

log_view

ダッシュボードの作成(プレビュー)

グラフを表示した状態で「グラフを保存」を実行することで、表示したグラフをカスタムダッシュボード化することができます。
もちろん既存のメトリクス等と同じダッシュボードに表示することが可能です。

dashboard

ユースケース: LB ログによるアクセス解析

Web サービスへのアクセス特性を可視化したい場合があると思います。
ロードバランサでログを有効化しておけば、Log Analytics を利用して任意のログの属性で可視化を行うことができます。

今回は下記の3つを確認するシナリオを実践してみます。

  • 単純なアクセス数の時系列を確認
  • アクセス元 User-Agent の内訳を確認
  • パスごとのレイテンシの推移を確認

クエリの作成

まず、これを行うために必要な要素を SELECT するサンプルクエリは下記のようになります。
(FROM や WHERE の部分はプロジェクトやログバケットに応じて変わります)

SELECT
  timestamp,
  http_request.request_url,
  http_request.latency.nanos/1000000000 as latency,
  http_request.status,
  http_request.user_agent
FROM
  `<プロジェクトID>.global._Default._Default`
WHERE
  log_name='projects/<プロジェクトID>/logs/requests'

単純なアクセス数の時系列を確認

上記のクエリを実行し、単純なアクセス数の時系列の面グラフで確認してみます。

usecase1_result1

アクセス元 User-Agent の内訳を確認

次に、アクセス元 User-Agent の内訳を確認してみます。
先ほどの検索結果に対して下記の操作を実施すると欲しい結果が得られます。

  • 内訳に user_agent を指定

usecase1_result2

パスごとのレイテンシの推移を確認

最後に、パスごとのレイテンシの95パーセンタイル値の推移を折れ線グラフで確認してみます。
先ほどの検索結果に対して下記の操作を実施すると欲しい結果が得られます。

  • グラフの種類に Line Chart を利用
  • y-axis にpercentile-95 of latency を選択
  • 内訳に request_url を指定

usecase1_result3

補足

こちらの公式ドキュメントには複数スキーマの JOIN など、やや複雑なユースケースも含まれたサンプルクエリが記載されています。
それぞれのユースケースに合う操作ができそうか、確認してみると良いかと思います。

また、こちらの公式ドキュメントには監査ログに対する異常検出例も挙げられています。
こちらも是非ご確認ください。

おわりに

本記事では Log Analytics を紹介しました。
まだダッシュボード機能が未 GA であったりと、発展途上なところもありますが、今後の機能増強に期待したいと思います。

Discussion