
【2024年 秋】郵便料金値上げによるコストの増加を回避するには?
前回に引き続き、ログ収集ツールのfluentdを使って、Windows環境のログ収集を行う方法についてご紹介していきたいと思います。
本記事は以下の記事を読んでいることを前提としています。
fluentdを使ってWindows環境のログを収集
今回は、以下の図の通り、将来的な拡張を考慮しつつ、複数のプラグインを使ってログのパースからElasticsearchへの送信までを設定していきます。なお、点線で囲ってあるプラグインは、今回は設定しませんのでご注意ください.
Windows 2003 Server (Windows XP)以前の環境からログ収集を実行する場合や、コマンドプロンプトから出力されるログファイルは基本的に”Shift JIS”で出力されますが、ログ集約をするfluentdがインストールされているLinuxサーバーは基本的に”UTF-8”で運用されています。このため、単純にWindowsからログを収集してLinuxサーバーに転送すると文字化けが発生します(特に全角文字)。これを解消させるために、文字コードの変換処理をnxlogの設定ファイル(C:Program Files (x86)nxlogconfnxlog.conf)に書き加えます(赤字の部分)。
define ROOT C:Program Files (x86)nxlog
Moduledir %ROOT%modules CacheDir %ROOT%data Pidfile %ROOT%datanxlog.pid SpoolDir %ROOT%data LogFile %ROOT%datanxlog.log <Extension syslog> Module xm_syslog </Extension> <Extension charconv> Module xm_charconv AutodetectCharsets shift_jis, utf-8 </Extension> <Input FileIn> Module im_file File "C:\Applog\sample_*.log" # 収集するログファイル(ワイルドカードも設定可能) SavePos TRUE InputType LineBased Exec convert_fields("shift_jis", "utf-8"); </Input> <Processor Transform> Module pm_transformer OutputFormat syslog_bsd Exec $Message=(": "+$raw_event); </Processor> <Output SyslogOut> Module om_udp Host 54.200.236.1 # Linuxの準備で設定したサーバのIPアドレス Port 5140 </Output> <Route r> Path FileIn => Transform => SyslogOut </Route> |
なお、nxlogにはCSVファイルのパース機能や型指定、フィルタリング機能があります。ただし、ログのフォーマット修正が入った場合、同じ設定ファイルを導入しているすべてのnxlogの設定ファイルを修正する必要があるので、上記設定ファイルでは、ログに加工を施さず、そのままfluentdサーバーに送信するように記載してあります。
上記修正が完了したら、Start > 管理ツール > サービスから、サービス名”nxlog”を再起動して、設定ファイルを読み込ませます。以上でnxlog側の設定は完了です。
ここから本題に入っていきます。まずは、nxlogで収集したログのフォーマットを確認します。
Windows側でログを生成して、fluentdのログファイル(/var/log/td-agent/td-agent.log)にWindows側で生成されたログが表示されれば正常です。
[root@apacotta ~]# service td-agent restart
Shutting down td-agent: [ OK ] Starting td-agent: [ OK ] [root@apacotta ~]# tail -n1 /var/log/td-agent/td-agent.log WindowsLog.user.notice: {"host":"WIN-F4LLDGSEU5S","ident":"","message":"2014/10/02 20:58:03.30,C:Applogsample.bat,33,ログイン処 理,Administrator,177.131.237.237"} |
受信したログを正規表現でパース(構文解析)していきます。パース用のプラグイン”tagomoris/fluent-plugin-parser”をインストールして、パースの設定を行います。
正規表現の簡単なルールやテストはRubularで行うことができます。正規表現が完成したら、fluentdの設定ファイル(/etc/td-agent/td-agent.conf)の設定ファイルを以下の通りに修正します(赤字の部分)。
<source>
type syslog port 5140 tag RAW.WindowsLog </source> <match RAW.WindowsLog.**> type parser remove_prefix RAW add_prefix PARSED format /^(?<time>d{4}/d{2}/d{2}sd{2}:d{2}:d{2}.d{2}),(?<dir>[^,]*),(?<ptime>d*),(?<event>[^,]*),(?<user>[^,]*),(?<ip>[^,]*)$/ reserve_data yes key_name message </match> <match PARSED.WindowsLog.**> type stdout </match> |
修正が完了したら、”fluent-plugin-parser”をインストールしてからtd-agentを再起動します。Windows側で生成されたログが”fluentd - 受信したログの確認”と異なり分割されます。
[root@apacotta ~]# /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-parser
Successfully installed fluent-plugin-parser-0.3.4 1 gem installed Installing ri documentation for fluent-plugin-parser-0.3.4... Installing RDoc documentation for fluent-plugin-parser-0.3.4... [root@apacotta ~]# service td-agent restart Shutting down td-agent: [ OK ] Starting td-agent: [ OK ] [root@apacotta ~]# tail -n1 /var/log/td-agent/td-agent.log 2014-10-02 21:23:56 +0900 PARSED.WindowsLog.user.notice: {"host":"WIN-F4LLDGSEU5S","ident":"","message":"2014/10/02 21:23:56.08,C:Applogsample.bat,67,ログアウト処理,Administrator,255.19.170.200","dir":"C:Applogsample.bat","ptime":"67","event":"ログアウト処理","user":"Administrator","ip":"255.19.170.200"} |
パースしたログは、すべて文字型として処理されます。このままElasticSearchに投入すると、数値の平均値や最大値を表示することができなくなるため、”tarom/fluent-plugin-typecast”を使って、文字型の値を数値型に変換します。
fluentdの設定ファイル(/etc/td-agent/td-agent.conf)の設定ファイルを以下の通りに修正します(赤字の部分)。
<source>
type syslog port 5140 tag RAW.WindowsLog </source> <match RAW.WindowsLog.**> type parser remove_prefix RAW add_prefix PARSED format /^(?<time>d{4}/d{2}/d{2}sd{2}:d{2}:d{2}.d{2}),(?<dir>[^,]*),(?<ptime>d*),(?<event>[^,]*),(?<user>[^,]*),(?<ip>[^,]*)$/ reserve_data yes key_name message </match> <match PARSED.WindowsLog.**> type typecast item_types host:string,ident:string,message:string,dir:string,ptime:integer,event:string,user:string,ip:string tag WindowsLog </match> <match WindowsLog.**> type stdout </match> |
修正が完了したら、”fluent-plugin-typecast”をインストールしてからtd-agentを再起動します。”ptime”は数値型を指定したので、出力されたValueがダブルクオートで囲まれていません。
<source>
type syslog port 5140 tag RAW.WindowsLog </source> <match RAW.WindowsLog.**> type parser remove_prefix RAW add_prefix PARSED format /^(?<time>d{4}/d{2}/d{2}sd{2}:d{2}:d{2}.d{2}),(?<dir>[^,]*),(?<ptime>d*),(?<event>[^,]*),(?<user>[^,]*),(?<ip>[^,]*)$/ reserve_data yes key_name message </match> <match PARSED.WindowsLog.**> type typecast item_types host:string,ident:string,message:string,dir:string,ptime:integer,event:string,user:string,ip:string tag WindowsLog </match> <match WindowsLog.**> type stdout </match> |
最後にElasticSearchへのデータ投入を行います。ElasticSearchは、米ElasticSearch社の提供するオープンソースの全文検索エンジンです。
長い間頑張ってくれた、stdoutを削除してelasticsearchプラグインの設定を行います。
fluentdの設定ファイル(/etc/td-agent/td-agent.conf)の設定ファイルを以下の通りに修正します(赤字の部分)。
<source>
type syslog port 5140 tag RAW.WindowsLog </source> <match RAW.WindowsLog.**> type parser remove_prefix RAW add_prefix PARSED format /^(?<time>d{4}/d{2}/d{2}sd{2}:d{2}:d{2}.d{2}),(?<dir>[^,]*),(?<ptime>d*),(?<event>[^,]*),(?<user>[^,]*),(?<ip>[^,]*)$/ reserve_data yes key_name message </match> <match PARSED.WindowsLog.**> type typecast item_types host:string,ident:string,message:string,dir:string,ptime:integer,event:string,user:string,ip:string tag WindowsLog </match> <match WindowsLog.**> type elasticsearch host 54.200.236.2 # ElasticSearchをセットアップしたサーバのIPアドレス port 9200 type_name WindowsLog logstash_format true logstash_prefix nginx_access logstash_dateformat %Y%m # Buffering buffer_type memory buffer_chunk_limit 200m buffer_queue_limit 1024 flush_interval 1s retry_limit 16 retry_wait 1s </match> |
修正が完了したら、”fluent-plugin-elasticsearch”をインストールしてからtd-agentを再起動します。
<source>
type syslog port 5140 tag RAW.WindowsLog </source> <match RAW.WindowsLog.**> type parser remove_prefix RAW add_prefix PARSED format /^(?<time>d{4}/d{2}/d{2}sd{2}:d{2}:d{2}.d{2}),(?<dir>[^,]*),(?<ptime>d*),(?<event>[^,]*),(?<user>[^,]*),(?<ip>[^,]*)$/ reserve_data yes key_name message </match> <match PARSED.WindowsLog.**> type typecast item_types host:string,ident:string,message:string,dir:string,ptime:integer,event:string,user:string,ip:string tag WindowsLog </match> <match WindowsLog.**> type elasticsearch host 54.200.236.2 # ElasticSearchをセットアップしたサーバのIPアドレス port 9200 type_name WindowsLog logstash_format true logstash_prefix nginx_access logstash_dateformat %Y%m # Buffering buffer_type memory buffer_chunk_limit 200m buffer_queue_limit 1024 flush_interval 1s retry_limit 16 retry_wait 1s </match> |
ログが正しくelasticsearchに転送されていることを、同じくElasticsearch社が提供するダッシュボードツールのkibanaから確認します。ElasticSearchとKibanaのセットアップ方法については、ウェブ上に日本語英語問わず色々記事があるので、そちらを参照してください。
kibanaにアクセスして、トップ画面の下部にある”Sample Dashboard”をクリックします。
遷移した先の画面で、WindowsLogが表示されていれば設定は成功しています。
20年以上の実績に裏打ちされた信頼のデータ連携ツール「Waha! Transformer」で、自社に眠るデータを有効活用。まずは無料のハンズオンセミナーや体験版で効果を実感していただけます。
Rankingランキング
New arrival新着
Keywordキーワード