Azure LogAnalyticsワークスペースに様々なログを取り込んでみます。他にも色々とやってますので下記エントリも確認お願いします!
Azure LogAnalyticsワークスペースに様々なログを取り込む(まとめエントリ) | Microsoft Cloud Administrators 今回は、以前、「カスタムログ」の機能を使って取り込んだApacheのログを解析しやすい形にしたいと思います。カスタムログで取り込む部分に関しては下記のエントリを参照して下さい。
Azure LogAnalyticsワークスペースへのApacheログの取り込み | Microsoft Cloud Administrators さて、取り込んだログを見てみると「RawData」という列にカスタムログの1行がすべて入っている状況です。これをより扱いやすい状態にしたいと思います。
やり方は大きく2種類あって「収集時にデータを解析して新しいプロパティを「カスタムフィールド」を使って定義する」か、「クエリを実行するときにそのクエリ内でデータを複数のフィールドに分けてあげる」かです。今回は後者の方法を試してみます。
LogAnalyticsワークスペースのログの検索、解析にはKustoという言語が使えます。
今回は正規表現でRawDataの中身から値を抽出することにします。すべてのレコードはスペースで区切られており、時間の部分は[]で囲まれていて、リクエストとリファラーとエージェントがダブルクオーテーション("")で囲まれている状況です。これを正規表現で表現します。
@ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . * ) " " " あとは、extendで列を追加し、RawDataの中身をもとに順番に抽出してあげればよいですね。下記のようなクエリにしてみました。
h t t p d _ a c c e s s _ l o g _ C L | e x t e n d h o s t = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 1 , R a w D a t a ) , i d e n t = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 2 , R a w D a t a ) , u s e r = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 3 , R a w D a t a ) , t i m e I n L o g = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 4 , R a w D a t a ) , r e q u e s t = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 5 , R a w D a t a ) , s t a t u s = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 6 , R a w D a t a ) , b y t e s = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 7 , R a w D a t a ) , r e f e r e r = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . ) " " " , 8 , R a w D a t a ) , a g e n t = e x t r a c t ( @ " ^ ( . ) [ ( . ) ] " " ( . ) " " " " ( . ) " " " " ( . * ) " " " , 9 , R a w D a t a ) 実行すると、きちんと狙ったところが狙ったプロパティとして抽出されていることがわかります。
...