独自フォーマットのログをAzure Data LakeとPower BIで可視化しました。
色々ハマったので手順を残しておきます。
元々ログの可視化はLog Analyticsのカスタムログを使って実現しようとしていました。
が、Log Analyticsカスタムログではうまくいかない箇所があったので、Data Lakeに切り替えました。
詳細は以下の記事に纏めていますのでご参考まで。
独自フォーマットのログをAzure Log Analyticsに収集する
Data Lake概要
- 以下の記事に纏めてます
Azure Data Lakeに触れてみた
以降、Azure Data Lake Storeは、ADLS。
Azure Data Lake Analyticsは、ADLAと略します。
ADLA/ADLS作成
Market Placeより「Data Lake Analytics」を選択します。(ADLAからADLSを作成できるため、ここではADLAを選択)
ADLA/ADLSの名称を入力します。グローバルで一意にしないといけません。
ADLSへのログアップロード
Azure Portalでアップロードする方法
- 今回は以下のサンプルログをアップロードします。
- CPU使用率を時系列で記録したファイルです。実際は数十行準備しました。
- 1番右のカラムがCPU使用率を表します。ファイルの先頭はヘッダー付きです。
"IP ADDRESS","HOST NAME","HOST TYPE","RESOURCE TYPE","TYPE","CAPA","DATE","TIME","USECAPA"
"192.168.0.1","host01","Windows","CPU","CPU","2597","2018/04/10","00:00:00",1.0
"192.168.0.1","host01","Windows","CPU","CPU","2597","2018/04/10","00:10:00",1.5
"192.168.0.1","host01","Windows","CPU","CPU","2597","2018/04/10","00:20:00",3.0
Azure CLIでアップロードする方法
- 以下コマンドで実現可能です。
az dls fs upload --account [ADLS Name] --source-path C:\sample.txt --destination-path log
ADLAでクレンジング
-
クエリを準備します。
- EXTRACTでカラム名とデータ型を定義します。
- 今回のサンプルでは日付と時刻が異なるカラムになっているので、DateTime.Parseでマージしています。
- 最後にoutputフォルダにCSV形式で出力します。
@log =
EXTRACT
ip string,
host_name string,
host_type string,
resource_type string,
typea string,
capa long,
date string,
time string,
usecapa double
FROM "log/sample.txt"
USING Extractors.Csv(skipFirstNRows:1);
@merge =
SELECT
DateTime.Parse((date + ' ' + time)) AS daytime,
ip,
host_name,
host_type,
typea,
capa,
usecapa
FROM @log;
OUTPUT @merge
TO "/output/sample-out.txt"
USING Outputters.Csv(outputHeader:true);
クエリ失敗したらエラーメッセージが出力されるので、内容を見てクエリ修正して再実行してと繰り返します。
Power BIで分析
- Power BI Desktopを開いて、サインインします。
- もし認証付きProxy配下の場合、以下のアドレスへのアクセスに対しては認証しないようにする設定をProxyサーバに入れないと繋がりません。
login.windows.net
outlook.office365.com
login.microsoftonline.com
api.powerbi.com
azuredatalakestore.net
日本語の文字列を可視化してみる
数値データだけでなく、日本語文字列のデータも可視化に加えてみます。
- 以下のサンプルデータを準備しました。アラートメッセージのイメージです。このとき文字コードはUTF-8で保存してください。
"host01","3","エラーが発生しました。","2018/04/10","02:10:00",0000
- ADLSのlogフォルダにアップロードします。
- クエリ実行します。U-SQLは以下。
- ポイントは最後のアウトプットです。Unicodeにエンコーディングして出力します。デフォルトはUTF-8ですが、そのままだとPower BI Desktopで読み込んだときに文字化けしてしまう為です。
@log =
EXTRACT
host_name string,
id int,
msg string,
date string,
time string,
code string
FROM "log/sample_alert.txt"
USING Extractors.Csv();
@merge =
SELECT
DateTime.Parse((date + ' ' + time)) AS daytime,
host_name,
msg
FROM @log;
OUTPUT @merge
TO "/output/sample_alert_output.txt"
USING Outputters.Csv(outputHeader:true,encoding:Encoding.Unicode);
まとめ
ADLSに溜めたデータをADLAで加工し、Power BIで可視化することができました。
Log AnalyticsでサポートしているログデータはLog Analyticsに集めて分析したほうがよいですが、今回のようにLog Analyticsカスタムログの仕様に当てはまらない場合は、Data Lakeも選択肢として使えそうですね。