Logstash でハマったこと(Windows 寄り)

Logstash というデータ収集ツールを触る機会がありました。
コードを書くことには慣れている私ですが、ツールの導入とかの領域になるとまだまだ経験が足りません。
Logstash を使ってみてハマったことを雑多に記載しておきます。

設定ファイルがUTF-8 (BOM無し) しか受け付けない

Logstash を Windows 環境に導入して検証しようとしていました。
Server Core 環境でテキストエディタが無いので、PowerShell の変数にヒアドキュメントで設定ファイルの内容を流し込んで、それをファイルにリダイレクトするという方法で設定ファイルを作りました。

ネット上に落ちていたサンプルからほとんど変えていないものなので、「まあ動くだろう」と logstash コマンドを実行してみましたが、エラーで動かず。。

え・・・なんで・・・意味わからん、と数時間調べていたら、ファイルの文字コード等に問題があることが分かり、UTF-8 (BOM無し) のファイルを使うことで無事解消しました。

Linux 環境なら無縁な話だったかもしれないですね。

IIS ログのフィルタ定義が参考サイトと合わない

IIS ログを読み込む定義ファイルを作ったのですが、filtergrok に書かれているログのパース定義が横長すぎてチェックするのが面倒だったので、まずは動作検証をと思いネットから拾ったままとりあえず実行してみました。
何となくうまくいったかな?と思いつつ、面倒なんて言っていてはいけないので1項目ずつチェックしてみたところ、どうもキーと値が合いません。定義が間違っていました。

IIS ログ自体にどういうデータが出力されるかが書かれているので、こちらを参考に grok の値を修正しました。

#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken

IISログ用の grok の元ネタがネットで見つけたものであればフィーリングで直せると思いますが、正式には下記の資料を見て修正すべきですね。

https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

メモリ使用量が大きくて焦る

Logstash の稼働確認のため、PowerShellで Get-Process を実行してプロセスの存在を確認したところ、メモリ使用量がなかなかの値であることに気付き焦りました。
デフォルト設定の場合は、Javaヒープを1GB確保するようになっています。

<Logstashインストール先>\config\jvm.options に設定 (XmsXmx) があるので、こちらを調整すればメモリ使用量を抑制することが可能です。
Logstashのドキュメントの指示に従い、Xms および Xmx の値は同じ値にしましょう。
また、あまり小さな値に設定するとフル GC が頻発するようになってしまうので、GC ログの解析等を実施して慎重に設定しましょう。
jvm.options ファイルに GC ログを出すための設定がコメントアウト状態になっているので、こちらを解放して GC ログを出力し、GCViewer 等で比較検討し調整しました。

%d人のブロガーが「いいね」をつけました。