Azureもくもく会@新宿 No.17 で成果発表させてもらった内容です。
Windowsイベントログ、LinuxのsyslogといったOS関連ログ以外にも、独自フォーマットのログを収集したいケースがあります。
アプリケーションやミドルウェアが出力するログとかですね。
このような独自フォーマットのログを収集してみました。
構成図
- オンプレの監視Manager(Windows Server 2012 R2)からLog Analyticsへ独自フォーマットログを収集する想定です
事前準備
サンプルログ作成
-
サンプルログ解説
- 各種サーバのCPU使用率を記録するログ
- csv形式
- 1行目には必ずヘッダー行が書き込まれる
- 最終行は改行されていない
- ファイル名は「sample_YYYYMMDD-HH.log」という名前で、1時間置きに出力される
Log Analyltics作成
Monitoring Service Agentセットアップ
収集元がAzureではなくオンプレなので本手順が必要です。
収集元がAzureVMの場合は、仮想マシンを接続するだけでよいです。(ポータルのLog Analytics画面から[仮想マシン]を選択し接続する)
MMASetup-AMD64.exeがダウンロードされたことを確認します
- ダウンロードしたMMASetup-AMD64.exeを監視Managerに配置し、実行します
今回はLog Analyticsにデータを送るので、[Azureログ分析(OMS)にエージェントを接続する]にチェックを付けて、[次へ]を選択します
カスタムログ設定
Public Preview機能の有効化
- カスタムログは2018年3月時点でPublic Previewです。利用するためには機能を有効化する必要があります。
カスタムログ収集設定
- Log Analyticsにカスタムログ収集設定をします
区切り文字を設定します。今回は1行1レコードなので[改行]のまま[次へ]を選択します
対象ログのフルパスを入力します。今回は「sample_YYYYMMDD-HH.log」がログ名ルールなので、[C:\log\sample*.log]と入力し[+]を選択します
ログ名称を入力し、[完了]を選択します。ここで設定した名前がLog Analyticsに収集されたときのログ名になります。
ログ転送確認
クエリ文を入力して、[実行]を選択する
search * | where ( Type == "[YOUR LOG NAME]_CL" )
-
- 初回は少し時間が掛かります(15分くらい掛かりました)
- いつまで待っても表示されない場合は、ポータルで別のサービスを選択し、再度Log Analyticsを開いてクエリ実行してみてください
- 表示結果を見てみると3点程気になる点がありました
- RawDataフィールドに1行全て取り込まれています。本来ならIPアドレスとかホスト名とかそれぞれ別フィールドとしたいですよね
これは後述するカスタムフィールドを設定することで対応可能です - ログのヘッダー行も1レコードとして取り込まれています。これはソース側でヘッダーを消す処理をする必要がありそうです
- Log Analyticsの1レコードに、カスタムログの2レコード分が取り込まれているデータがありました
これはサンプルログの最終行に改行コードが入っていないことが原因です
カスタムログの設定時に区切り文字を改行とした為ですね。このようなログの場合は、やはりソース側で改行を入れてあげる必要がありそうです
- RawDataフィールドに1行全て取り込まれています。本来ならIPアドレスとかホスト名とかそれぞれ別フィールドとしたいですよね
カスタムフィールド設定
ログ収集
まとめ
独自フォーマットのログもLog Analyticsに収集することができました。
ただ、Log Analyticsに集めるだけではダメで、これをいかに上手く分析するかが重要です。
このあたりは追々書きたいと思います。
2018/04/10 追記 カスタムフィールドの注意点
色々試してみてますが、単純にCSVで区切ってほしい場合に使いづらい点がありました。
以下のようなログのケースです。
"192.168.0.1","host01","UNIX","HDD","/",268435456,"2018/04/10","01:52:32",67264512
"192.168.0.2","host02","Windows","CPU","CPU","2993","2018/04/10","18:45:20",39.2
このログはそれぞれディスク使用量とCPU使用量を表しています。
最後のカラムは同じフィールドにしたいところですが、桁が離れすぎているのでカスタムフィールドを設定すると違うフィールドだと認識されてしまいます。
カスタムフィールド設定時に、これも対象だと個別に認識させることは可能ですが、予期せぬメッセージが他にある可能性もあるため確実とはいえません。
このように単純にCSVで区切りたい場合には、カスタムフィールドだと予期せぬ結果になる可能性があるため注意が必要です。
ちなみにこれはAzure Feedbackにも挙がっていました。今後対応してもらえると嬉しいです!
Azure Feedback Custom fileds with delimiters
最終的にAzure Data Lakeを活用して可視化しました。
Azure Data LakeとPower BIでログデータを可視化する