独自フォーマットのログをAzure Log Analyticsに収集する

Azureもくもく会@新宿 No.17 で成果発表させてもらった内容です。

Windowsイベントログ、LinuxのsyslogといったOS関連ログ以外にも、独自フォーマットのログを収集したいケースがあります。
アプリケーションやミドルウェアが出力するログとかですね。

このような独自フォーマットのログを収集してみました。

構成図

  • オンプレの監視Manager(Windows Server 2012 R2)からLog Analyticsへ独自フォーマットログを収集する想定です

image.png

事前準備

サンプルログ作成

  • 今回以下のようなサンプルのログを用意しました
    image.png

  • サンプルログ解説

    • 各種サーバのCPU使用率を記録するログ
    • csv形式
    • 1行目には必ずヘッダー行が書き込まれる
    • 最終行は改行されていない
    • ファイル名は「sample_YYYYMMDD-HH.log」という名前で、1時間置きに出力される

Log Analyltics作成

  • まずはログ収集先となるLog Analyticsを作成します
    image.png

  • 作成されました
    image.png

Monitoring Service Agentセットアップ

収集元がAzureではなくオンプレなので本手順が必要です。
収集元がAzureVMの場合は、仮想マシンを接続するだけでよいです。(ポータルのLog Analytics画面から[仮想マシン]を選択し接続する)

  • Log Analytics画面より、[詳細設定]を選択します
    image.png

  • [Windowsエージェントのダウンロード(64ビット)]を選択します
    image.png

  • MMASetup-AMD64.exeがダウンロードされたことを確認します

  • [ワークスペースID]、[主キー]をメモしておきます
    image.png


  • ダウンロードしたMMASetup-AMD64.exeを監視Managerに配置し、実行します
  • [次へ]を選択します
    image.png

  • [同意します]を選択します
    image.png

  • インストール先を必要に応じて変更し、[次へ]を選択します
    image.png

  • 今回はLog Analyticsにデータを送るので、[Azureログ分析(OMS)にエージェントを接続する]にチェックを付けて、[次へ]を選択します
    image.png

  • 先程メモしたワークスペースIDと主キーを入力して、[次へ]を選択します
    image.png

  • 必要に応じてUpdateのチェックを付けて、[次へ]を選択します
    image.png

  • 内容を確認して問題なければ、[インストール]を選択します
    image.png

  • Azure Log Analytics画面に戻り、[詳細設定]を選択します
    image.png

  • コンピュータの接続数が増えていればOKです(10~15分くらい掛かりました)
    image.png

カスタムログ設定

Public Preview機能の有効化

  • カスタムログは2018年3月時点でPublic Previewです。利用するためには機能を有効化する必要があります。
  • Log Analytics画面より、[OMSポータル]を選択します
    image.png

  • OMSポータル画面が開きます
    image.png

  • 右上にある歯車アイコンを選択します
    image.png

  • [Preview Features]を選択します
    image.png

  • [有効]を選択します
    image.png

  • [有効]を選択します
    image.png

カスタムログ収集設定

  • Log Analyticsにカスタムログ収集設定をします
  • Azureポータルに戻り、Log Analytics画面より[詳細設定]を選択します
    image.png

  • [Data] → [カスタムログ] → [追加+] の順に選択します
    image.png

  • [ファイルを選択]をクリックして、事前に準備していたサンプルログを選択します
    image.png

  • 区切り文字を設定します。今回は1行1レコードなので[改行]のまま[次へ]を選択します

  • 1レコードが2行以上のログの場合は、タイムスタンプを区切り文字にすることができます
    image.png

  • 対象ログのフルパスを入力します。今回は「sample_YYYYMMDD-HH.log」がログ名ルールなので、[C:\log\sample*.log]と入力し[+]を選択します
    image.png

  • ログが追加されたことを確認し、[次へ]を選択します
    image.png

  • ログ名称を入力し、[完了]を選択します。ここで設定した名前がLog Analyticsに収集されたときのログ名になります。
    image.png

  • ログが追加されればOKです
    image.png

ログ転送確認

  • 設定したフォルダにログを配置してみます
    image.png

  • Log Analytics画面より、[ログ検索]を選択します
    image.png

  • クエリ文を入力して、[実行]を選択する

    search * | where ( Type == "[YOUR LOG NAME]_CL" )

    image.png

  • 結果が表示されればOK
    image.png

    • 初回は少し時間が掛かります(15分くらい掛かりました)
    • いつまで待っても表示されない場合は、ポータルで別のサービスを選択し、再度Log Analyticsを開いてクエリ実行してみてください


  • 表示結果を見てみると3点程気になる点がありました
    1. RawDataフィールドに1行全て取り込まれています。本来ならIPアドレスとかホスト名とかそれぞれ別フィールドとしたいですよね
      image.png
      これは後述するカスタムフィールドを設定することで対応可能です
    2. ログのヘッダー行も1レコードとして取り込まれています。これはソース側でヘッダーを消す処理をする必要がありそうです
      image.png
    3. Log Analyticsの1レコードに、カスタムログの2レコード分が取り込まれているデータがありました
      image.png
      これはサンプルログの最終行に改行コードが入っていないことが原因です
      image.png
      カスタムログの設定時に区切り文字を改行とした為ですね。このようなログの場合は、やはりソース側で改行を入れてあげる必要がありそうです

カスタムフィールド設定

  • Log Analytics検索結果に戻り、RawDataの左側の[・・・]を選択します
    image.png

  • [[YOUR LOG NAME]からフィールドを抽出する]を選択します
    image.png

  • カスタムフィールドページが開きます
    image.png

  • フィールドにしたいデータを選択すると、タイトル入力ボックスが表示されます。この例だと[192.168.0.1]を選択しています
    image.png

  • フィールドタイトルとデータ種別を入力し、[抽出]を選択します
    image.png

  • カスタムフィールド対象が表示されるので、確認して[抽出の保存]を選択します
    image.png

  • これをフィールド数分繰り返します

ログ収集

  • 今度は以下のログを配置してみます
    image.png

  • 先程作成したIP_CFカスタムフィールドが新たに追加されて収集されています
    image.png

まとめ

独自フォーマットのログも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でログデータを可視化する

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.