WinlogbeatでWindowsイベントログを可視化 前編

Elastic Stackでシステムの情報を可視化してきたが、これまでWindowsに全く触れてこなかった。「がとらぼ」の中の人がWindowsを排斥してるので身近に常時動いているWindowsが無いというのもあるんだけど。
先日、別の用事でWindowsをインストールした端末があるのだが、ハードディスクをまだ消去していなかったので以前から気になっていたWinlogbeatをインストールして試してみた。

Winlogbeatのインストール

WinlogbeatでWindowsイベントログを可視化 1
ブラウザで https://www.elastic.co/downloads/beats/winlogbeat を開く。

Winlogbeatをダウンロードする。32/64bit用を適切に選択。(2018年9月10日現在の最新版は6.4.0)

  • winlogbeat-6.4.0-windows-x86_64.zip (64bit用)
  • winlogbeat-6.4.0-windows-x86.zip (32bit用)

ダウンロードしたZIPファイルを解凍する。
winlogbeat-6.4.0-windows-x86_64 のようなフォルダ名を winlogbeat-6.4.0 のように変更する。バージョンは都度適切に。またはバージョン無しの winlogbeat にするとか。
そのフォルダを C:\Program Files 下に移動する。

WinlogbeatでWindowsイベントログを可視化 2
設定ファイルの C:\Program Files\winlogbeat-6.4.0\winlogbeat.yml を編集する。改行コードを弄れるテキストエディタで開くこと。最初からあるwinlogbeat.ymlを編集するならWindowsのメモ帳は不可。

最低でも変更するのは以下。
1
2
3
4
5
output.elasticsearch:
  hosts: ["192.168.1.240:9200"]    #elasticsearchが稼働しているホスト
 または
output.logstash:
  hosts: ["192.168.1.240:5044"]    #LogStashが稼働しているホスト

elasticsearchに送るかLogstashに送るかとちらかを有効にする。
もちろん、どちらもSSL/TLSでの接続であればその設定も要る。それぞれの設定行付近にSSL用の設定サンプルがあるのでわかる筈。

elasticsearchに直接出力するのが良いか、LogStashに出力して加工してからelasticsearchに送る方が良いかは考え方によると思う。手軽さでは前者だが、今回はWindowsのイベントログということなのでelasticsearchに送るデータ量が多すぎるとか無駄なイベントログが多いということであれば後者にする方が良いかもしれない。今回はとりあえずの導入なので前者で。

PowerShellを管理者権限で起動する。
  • スタートボタンを左クリック→Windows PowerShell→Windows PowerShellを右クリック→管理者として実行する
  • スタートボタンを右クリック→Windows PowerSHell (管理者)
Windows 10の新しい版は後者が可。
WinlogbeatでWindowsイベントログを可視化 3
cd "C:\Program Files\winlogbeat-6.4.0"    winlogbeatのディレクトリに移動する。
Set-ExecutionPolicy Unrestricted          実行ポリシーを変更 質問にはy[Enter]
.\install-service-winlogbeat.ps1          サービスとして登録するスクリプトの実行
Set-ExecutionPolicy Restricted            実行ポリシーを戻す 質問にはy[Enter]
Start-Service -Name winlogbeat -PassThru  winlogbeat サービスを開始
exit                                      PowerShell終了

WinlogbeatでWindowsイベントログを可視化 4
「サービス」でwinlogbeatが「実行中」で、スタートアップの種類が「自動」になっていることを確認する。(PowerShellのサービス関連コマンドレットを知らないとか信用していないという場合)

winlogbeatがelasticsearchにイベントログデータを送るまで暫く待つ。またはWindowsを再起動したりログアウト・ログインをするなどしてイベントログを出力させる。

Kibanaでインデックスパターンを登録

WinlogbeatでWindowsイベントログを可視化 5
Kibanaを開く。
ManagementからIndex Patternsを選択。

WinlogbeatでWindowsイベントログを可視化 6
今回はこれまでに無かった winlogbeat-* というインデックスが作られる筈なので新規のインデックスパターンを登録する。(次)
[Create Index Pattern]をクリック。

WinlogbeatでWindowsイベントログを可視化 7
中段のIndex patternのテキストボックスに winlogbeat-* を入力する。その下にSuccess! Your Index pattern matches 数字 Index.と表示される。さらに winlogbeat-6.4.0-2018.09.10など、その日(今日)のwinlogbeatのインデックスを含む1つ以上がリスト表示されること。存在しない場合はwinlogbeatからデータが送られてきていないし、次のボタンが押せない。
[ > Next step]をクリック。

WinlogbeatでWindowsイベントログを可視化 8
winlogbeatから送信されてくるデータの中でタイムスタンプであるフィールド名を指定する。ここは、これまで同様に @timestamp をプルダウンメニューで選択する。
[Create Index pattern]をクリック。これでインデックスパターンの登録完了。

Kibanaでイベントログを可視化

WinlogbeatでWindowsイベントログを可視化 9
Kibana左列の Discover を選択。右列のインデックスパターンの選択で winlogbeat-* を選択。これでwinlogbeatから送られてきたデータを見ることができる。右上の「表示する時間の範囲」を適切に選択しないと表示されないこともあるので必要に応じて変更。上の画像では直近15分になっているのでデータ(イベントログ)が1つしか表示されていない

WinlogbeatでWindowsイベントログを可視化 10
表示する時間の範囲を1時間に拡げてみた。およそ170個ほどのイベントログがあった。
リモートでWIndowsの「イベントログ」を見ているような感じ。

WinlogbeatでWindowsイベントログを可視化 11
Visualizeで何か可視化したいなと思ったので適当に指定してみた。今回は新規作成で「Data Table」を使用。
使用するインデックスパターンは winlogbeat-* を選択。
MetricにCountを指定。
Buckets(バケット・バケツ)は先ず「Split Rows」を選択。
Aggregationに「Terms」を選択。Fieldに「event_id」を選択。
下部の[Add sub-buckets]をクリック。「Split Rows」を選択。
Sub Aggregationに「Terms」を選択。Fieldsに「source_name」を選択。
下部の[Add sub-buckets]をクリック。「Split Rows」を選択。
今度はイベントの種類毎にテーブルを分けたいので「Split Table」を選択。
Sub Aggregationに「Terms」を選択。Fieldsに「log_name」を選択。
指定が終わったら、上部にある (Apply Changes)を押す。右列にデータの入ったテーブルが表示される筈。指定が間違っていなくてNo result found になるなら右上の「表示する時間の範囲」を変更してデータ(イベント)の発生している時間を含む時間帯にする。

とりあえず、何かKibanaのVisualizeで表示せんことには話にならんだろということで、対象時間にイベントの種類別にどんなイベントが発生したか件数表示するようにしてみた。しかし、じゃあこれで何がわかるかというと正直なところ何もわからない、というか全くもって役に立つ情報ではない。これではWinlogbeatを入れた意味がない。
次回はイベントログで役に立つ情報を取得して視覚化したい(予定)。

関連記事: