LoginSignup
10
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-16

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でログデータを可視化する

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9