診断ログは怖くない!欲しいログを探すコツ #Azure リレー
2020-08-12
azblob://2022/11/11/eyecatch/2020-08-12-tips-for-finding-the-diagnostic-log-you-want-000.jpg

名古屋事業所の松枝です。
先週のなゆむさんの「とりあえず動くと思うからデプロイしてみようぜ Azure WebAppsに.net coreアプリケーションをデプロイする #Azureリレー」に引き続き、毎週水曜日Azure リレー第23回を担当します。

Azureのリソースを作成したとき、特に運用環境なら診断ログを有効にされていると思います。
ただ、「診断ログは有効にするよう言われたから有効にしたけど、どう使えばよいかわからない」ということはないでしょうか?
そんなあなたに、診断ログを使うコツをお伝えします。

前提:LogAnalyticsにデータを送る

一口に診断ログを有効にする、といっても、いろいろと設定があります。
共通して存在する設定に、診断ログの宛先設定があり、下記の3つから選ぶようになっています。

  • Log Analytics への送信
  • ストレージ アカウントへのアーカイブ
  • イベント ハブへのストリーム

この中で、「Log Analytics への送信」を有効にするようにしてください。
Log Analyticsを使用することで、診断ログの検索が容易になります。

ログを簡単に検索する

診断ログをLog Analyticsへの送信する設定をしたリソースをAzureポータルから開くと、左側の「ログ」と書かれたところを押すことで診断ログの検索ができるようになります。

ログの画面を開くと、「クエリの例」と書かれた小窓が出ると思います。
いくつかのクエリの概要が書かれているので、そこから自分の見たい情報に近いものを実行してみてください。
何かそれっぽいデータが表示されましたか?

これだけでもかなり使えるんではないかと思います。

検索クエリを理解する

クエリの例だけでは物足りなくなった場合は、クエリを自分で作ることになります。
このクエリ言語はKustoというもので、私のイメージは「SQL文とシェルコマンドの良いとこ取りをしたもの」です。
主に知っておくべき要素を、Application Gatewayで診断ログを設定した前提で記載します。

基本形 - テーブル名のみを書けばテーブルのデータが全部出る

例えば AzureDiagnostics と書けば、AzureDiagnosticsテーブルのデータがすべて表示されます。
乱暴に言ってしまうと、診断ログの検索をしたいときはこのAzureDiagnosticsテーブルしか検索しないんじゃないかと思います。

条件追加 - パイプ(|)を使ってデータを加工

シェルコマンドを実行する場合のように、パイプを通すことで左辺の実行結果を加工できます。
例えば、where を使ってApplication Gatewayのログについてエラーを返却した(≒400系、500系のレスポンスコードを返した)URIの一覧を表示するには下記のように記載します。

AzureDiagnostics
| where ResourceType == "APPLICATIONGATEWAYS" and OperationName == "ApplicationGatewayAccess" and httpStatus_d > 399

where 以外にも、 下記のようなキーワードを覚えておくと良いでしょう。

  • summarize (集計する)
  • sort by (並べ替える)
  • project (項目を抽出する)
  • render (表示方法を折れ線グラフなどに変える)

クエリの例が実際何をしているのかを調べると、理解が深まると思います。

というか、これだけです。
上記のキーワードを覚えて、テーブルの各カラムの意味が分かれば、よっぽどの情報は検索できると思います。
たまに複数のテーブルをjoinしないと検索が難しかったりしますが、その時までにはクエリをマスターできていると期待して・・・

まとめ

診断ログは、SQL文とシェルに慣れている人なら簡単なことが分かったと思います。
慣れていない人でも、ある程度直感的に理解しやすいんではないかと思いました。

診断ログの検索方法をサクッと理解して、障害対応を迅速にできるようにしていきましょう。