テキスト形式のログファイルの監視定義ファイル(fluentd_@@trapname@@_tail.conf.template)
形式
<worker 0> ## [Metric Settings] <source> @type exec command "echo {}" <parse> @type json </parse> run_interval 60s tag jpc_ima_metrics.tail.ログ監視名 </source> <filter jpc_ima_metrics.tail.ログ監視名> @type record_transformer enable_ruby true auto_typecast false <record> __name__ fluentd_logtrap_running instance ホスト名 jp1_pc_nodelabel IM管理ノードのラベル名 jp1_pc_category カテゴリID jp1_pc_logtrap_defname ログ監視名_tail jp1_pc_trendname fluentd job jpc_fluentd jp1_pc_nodelabel_fluentd Log trapper(Fluentd) jp1_pc_addon_program JPC Fluentd </record> </filter> </worker> <worker workerのid> ## [Input Settings] <source> @type tail tag tail.ログ監視名 path 監視対象のパス follow_inodes true refresh_interval 60 skip_refresh_on_startup false read_from_head Fluentd初回起動時に監視するログを先頭から読み込む # encoding "Fluentdの文字コード" # from_encoding "監視するログの文字コード" read_lines_limit 1000 read_bytes_limit_per_second -1 pos_file ../data/fluentd/tail/ログ監視名.pos path_key tailed_path rotate_wait 5s enable_watch_timer 追加のウォッチタイマーを有効にする 複数行ログ読み込み時のフラッシュ間隔 enable_stat_watcher true open_on_every_update false emit_unmatched_lines false ignore_repeated_permission_error false <parse> @type ログのフォーマット ログのフォーマットに応じた設定 </parse> </source> ## [Attributes Settings] <filter tail.ログ監視名> @type record_transformer enable_ruby true auto_typecast false renew_record true <record> ID イベントID MESSAGE ${record["message"]} JP1_SOURCEHOST ホスト名 JPC_LOG_TIME ${time.utc.to_i} PRODUCT_NAME /HITACHI/JP1/JPCCS2/LOGTRAP/IM管理ノードのラベル名 PPNAME /HITACHI/JP1/JPCCS2 SEVERITY 重大度 PLATFORM ${ if RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/; 'NT'; else 'UNIX'; end } OBJECT_TYPE LOGFILE OBJECT_NAME ${record['tailed_path']} ROOT_OBJECT_TYPE LOGFILE ROOT_OBJECT_NAME ${record['tailed_path']} JP1_TRAP_NAME ${tag_parts[1]} JPC_NODELABEL IM管理ノードのラベル名 任意の属性名 任意の値 </record> </filter> ## [Inclusion Settings] #<filter tail.ログ監視名> # @type grep # <regexp> # key JP1イベントの属性名 # pattern /監視するログの正規表現/ # </regexp> #</filter> ## [Exclusion Settings] #<filter tail.ログ監視名> # @type grep # <exclude> # key JP1イベントの属性名 # pattern /監視しないログの正規表現/ # </exclude> #</filter> ## [Forward Settings] <match tail.ログ監視名> @type rewrite_tag_filter <rule> key JP1イベントの属性名 pattern /JP1イベントを発行するログの正規表現/ tag ${tag}.jp1event </rule> <rule> key SEVERITY pattern /.*/ tag ${tag}.outputlog </rule> </match> <filter /tail\.ログ監視名\.(jp1event|outputlog)/> @type record_transformer enable_ruby true auto_typecast true renew_record true <record> eventId ${record['ID']} xsystem true message ${record['MESSAGE']} attrs ${record} </record> remove_keys $.attrs.ID remove_keys $.attrs.MESSAGE </filter> </worker>
ファイル
fluentd_@@trapname@@_tail.conf.template
fluentd_@@trapname@@_tail.conf.template.model(モデルファイル)
格納先ディレクトリ
- ■統合エージェントホスト
-
Windowsの場合
-
物理ホストのとき
Agentパス\conf\
-
論理ホストのとき
共有フォルダ\jp1ima\conf\
Linuxの場合
-
物理ホストのとき
/opt/jp1ima/conf/
-
論理ホストのとき
共有ディレクトリ/jp1ima/conf/
-
説明
テキスト形式のログファイルを監視するための定義ファイルです。
テンプレート(fluentd_@@trapname@@_tail.conf.template)をコピーし,コピー先のファイル名を「fluentd_ログ監視名_tail.conf」に変更して使用します。「fluentd_ログ監視名_tail.conf」の配置先については,マニュアル「JP1/Integrated Management 3 - Manager 導入・設計ガイド」の「付録A.4(3)統合エージェントホスト(Windows)」および「付録A.4(4)統合エージェントホスト(Linux)」を参照してください。ファイル名は,統合エージェントホスト内で重複しない名前としてください。ログ監視名は,1〜30文字の文字列で指定します。使用できる文字は,半角英数字,「-」(ハイフン),および「_」(アンダースコア)です。
監視対象の,ラップアラウンドするログファイル群ごと(ラップアラウンドしないログファイルの場合はログファイルごと)に監視定義ファイルを作成します。JP1/IM - Agentは,監視定義ファイルのIM管理ノードのラベル名に設定されている値に応じて,ログ監視対象のSIDのIM管理ノードを作成します。別の監視定義ファイルであっても,IM管理ノードのラベル名が同一であれば,作成するIM管理ノードは1つです。
テキスト形式のログファイルの監視機能は,この定義ファイルを読み込み,アプリケーションがテキスト形式のログファイルに出力したログの情報を解析します。解析した情報に対して条件を指定し,条件を満たす場合,情報をJP1イベントに変換したり,Fluentdのログファイルに出力したりするように設定できます。発行するJP1イベントについては,「3.2.3(2) テキスト形式のログファイルを監視して発行するJP1イベント」を参照してください。
「#」で始まる行はコメント扱いとなり,プログラムの動作には影響しません。
[Forward Settings]セクションの初期設定は,SEVERITYの値がWarning以上の場合にJP1 イベントに変換しJP1/IM - Managerに転送するよう設定されています。
ログデータをJP1イベントに変換しJP1/IM - Managerに転送する場合,重大度がWarning以上の値となるようSEVERITYを設定してください。
文字コード
UTF-8(BOM無し)
改行コード
Windowsの場合:CR+LF
Linuxの場合:LF
定義の反映時期
Fluentdのサービスを再起動したときに,Fluentdの動作に反映します。
定義ファイルの追加もしくは削除,または[Metric Settings]セクションの値を変更した場合,統合オペレーション・ビューアーのツリー表示に,変更内容を反映します。
反映方法については,マニュアル「JP1/Integrated Management 3 - Manager 構築ガイド」の「1.21.2(18)IM管理ノードのツリー情報の作成と反映(Windows)(必須)」を参照してください。
記述内容
- <worker>ディレクティブ
-
「ログ監視共通定義ファイル(jpc_fluentd_common.conf)」の<worker>ディレクティブの説明を参照してください。
- workerのid(オプション)
-
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
Fluentdが起動するworkerの数を指定します。<worker N>ディレクティブの引数として機能します。指定できる値は,1から128の整数です。
変更可
既存のテキスト形式のログファイルの監視定義ファイル,またはWindowsイベントログの監視定義ファイルで指定したworkerのidと重複しないように指定する必要があります。
1
- [Metric Settings]セクション
-
JP1/IM - Managerのトレンドデータ管理DBに送信するサンプルの,ラベルの値を設定します。
- ログ監視名(必須)
-
コピー先のファイル名に指定したログ監視名を,1〜30文字の文字列で指定します。使用できる文字は,半角英数字,「-」(ハイフン),および「_」(アンダースコア)です。初期値は「@@trapname@@」です。
定義ファイル内の複数個所に設定する必要があるため,OSコマンドやエディターの機能を使用して,「@@trapname@@」の個所を,指定するログ監視名に置き換えてください。
指定を省略した場合,Fluentdの起動時にエラーとなります。
なお,ログ監視名は,次のように設定する必要があります。
-
同一ファイル内のログ監視名は,すべて同一する
-
「テキスト形式のログファイルの監視定義ファイル」と「Windowsイベントログの監視定義ファイル」の各定義ファイルで,ログ監視名は一意にする
-
- ホスト名(オプション)
-
監視対象のホスト名を,1〜255文字の制御文字以外の文字で指定します。初期値は統合エージェントのインストーラにより設定されます。
指定を省略した場合,IM管理ノードは作成されません。
また,次のように設定することで,システムの標準のホスト名を動的に設定できます。
instance ${Socket.gethostname}
- IM管理ノードのラベル名(オプション)
-
統合オペレーション・ビューアーでIM管理ノードのラベルに表示する文字列を,制御文字以外の文字で指定します。URLをエンコードしたときの文字列が,1〜234バイト(すべてマルチバイト文字の場合の上限は26文字)となるようにしてください。初期値は「Application」です。
指定した内容が不正,または指定を省略した場合,IM管理ノードは作成されません。
異なる監視定義ファイルで,同じIM管理ノードのラベル名を指定できます。その場合,IM管理ノードは1つだけ作成され,どちらの監視定義ファイルで発行されたJP1イベントも,1つのIM管理ノードに登録されます。
- カテゴリID(オプション)
-
ログ監視対象のSIDに対応するIM管理ノードのカテゴリIDを,1〜255文字の制御文字以外の文字で指定します。指定を省略した場合,「otherApplications」が仮定されます。
- [Input Settings]セクション
-
監視するテキスト形式のログファイルのパスや,ログメッセージを解析する正規表現を設定します。
- ログ監視名(必須)
-
[Metric Settings]セクションの説明と同様です。
- 監視対象のパス(必須)
-
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
読み込むパスを指定します。コンマ区切りで複数のパスを指定できます。
監視対象のログファイルの追加・削除を動的に行うために,*やstrftimeの形式を含めることができます。監視対象ログファイルの一覧は,refresh_intervalの間隔で更新されます。
指定例については,マニュアル「JP1/Integrated Management 3 - Manager 導入・設計ガイド」の「3.15.3 JP1/IM - Agentによるログ監視機能」の「(3)テキスト形式のログファイルの監視機能(tailプラグイン)」を参照してください。
誤ったパスを指定した場合,監視対象ログファイルのログは読み込まれません。
記述規則を次に示します。
-
絶対パスで指定する
-
ネットワークドライブ上のディレクトリおよびファイルは指定できない(Windowsの場合)
-
パスの区切り文字は「\」ではなく「/」を指定する(Windowsの場合)
-
複数のパスが指定できる。
-
「*」(ワイルドカード)を指定できる。
-
256バイト以内で指定する。
-
次のようなパス名は指定できない。
・先頭が「-」(ハイフン)のファイル名
・環境依存文字を含むフォルダ名,ディレクトリ名,またはファイル名
・スペースをディレクトリ名(Linuxの場合)
設置必須
監視対象ログファイルのパスを指定します。
該当なし
-
- Fluentd初回起動時に監視するログを先頭から読み込む(オプション)
-
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
ログを,末尾ではなく,先頭,または,pos_fileに記録されている最後の読み込み位置から読み始めるかを指定します。
trueまたはfalseを指定できます。
変更可
起動時にすでに追加されているログを読み込む場合,trueに変更します。
false
- Fluentdの文字コード(オプション)
-
監視するログの文字コードがUTF-8,C(コメント扱い)の場合は,初期設定(コメント扱い)を指定します。監視するログの文字コードがUTF-8,C(コメント扱い)以外の場合は,UTF-8を指定します。初期設定では,「#」が行の先頭に指定されていてコメント扱いとなっているため,「#」を削除します。
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
行を読み込むときのエンコーディングを指定します。
JP1/IM - Agentでは,デフォルトでは,in_tailはASCII-8BITエンコーディングで文字列値を出力します。
次のオプションで変更できます。
-
encodingを指定すると,文字列をencodingに変更します。
-
encodingとfrom_encodingの両方が指定された場合,in_tailはfrom_encodingの文字列をencodingに変換しようとします。
変更可
JP1/IM - Agentでは,次の値を指定できます。
-
UTF-8
指定なし(コメントアウト)
# encoding "UTF-8"
-
- 監視するログの文字コード(オプション)
-
監視するログの文字コードがUTF-8,Cの場合は,初期設定(コメント扱い)を指定します。監視するログの文字コードがUTF-8,C以外の場合は,その文字コードを指定します。初期設定では,「#」が行の先頭に指定されていてコメント扱いとなっているため,「#」を削除します。
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
Fluentdの文字コード(オプション)の表の説明を参照してください。
変更可
監視対象ログファイルの文字コードを指定します。
JP1/IM - Agentでは,次の値を指定できます。
-
UTF-16LE
-
UTF-16BE
-
Shift_JIS
-
Windows-31J
-
GB18030
指定なし(コメントアウト)
# encoding "Shift_JIS"
-
- 追加のウォッチタイマーを有効にする
-
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
trueまたはfalseを指定します。
このパラメーターにfalseを指定した場合,複数行のログを読み込む際に最新のログが監視されません。そのため,parseプラグインのtypeにmultilineを指定した場合はtrueを指定します。
このパラメーターにfalseを指定すると,inotifyをサポートするシステムで多数のファイルをテーリングするときにCPUとI/Oの消費量が大幅に削減されます。
変更可
parseプラグインのtypeにmultilineを指定した場合にだけtrueを指定します。
false
- 複数行ログ読み込み時のフラッシュ間隔
-
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
multiline_flush_interval
multiline_flush_intervalパラメータを指定して,複数行のログを読み込む際のフラッシュ間隔を指定します。
このパラメーターを指定しない場合,複数行のログを読み込む際に最新のログが監視されません。
そのため,parseプラグインのtypeにmultilineを指定した場合は次のように指定します。
multiline_flush_interval 5s
変更可
parseプラグインのtypeにmultilineを指定した場合にだけ5sを指定します。
5s
- ログのフォーマット
-
読み込んだログを解析するためのフォーマットを指定します。
指定できるフォーマットを次に示します。
type
説明
none(デフォルト)
解析,構造化をせずに1行のログをそのまま読み込みます。
regexp
正規表現で指定したパターンに合致した1行のログを読み込みます。
multiline
正規表現で指定したパターンに合致した複数行のログを読み込みます。
syslog
syslogが出力したログを読み込みます。
csv
CSV形式(コンマ区切り)のログを読み込みます。
tsv
TSV形式(タブ区切り)のログを読み込みます。
ltsv
LTSV形式(ラベル付きタブ区切り)のログを読み込みます。
各フォーマットのログを解析する際の指定例については,マニュアル「JP1/Integrated Management 3 - Manager 導入・設計ガイド」の「3.15.3(3)(g)ログのパース機能(parseプラグイン)」を参照してください。
- ログのフォーマットに応じた設定
-
ログのフォーマットに応じた項目を指定します。
-
noneの場合
<parse> @type none message_key message time_key time null_empty_string false estimate_current_event true keep_time_key false </parse>
-
regexpの場合
<parse> @type regexp expression ログを解析する正規表現 time_key time null_empty_string false estimate_current_event true keep_time_key false ログの時刻を解析する項目 </parse>
ログを解析する正規表現(必須)
名前付きキャプチャの機能を使用して文字列を切り出す場合,切り出す名前の中の1つは「message」である必要があります。messageを切り出さない場合,JP1イベントのMESSAGE 属性の値には空文字が設定されます。
正規表現を指定し,ログ1行の内容を解析します。名前付きキャプチャの機能を使用し,「message」という名前で,JP1イベントのメッセージに設定する文字列を切り出します。初期値には,行全体を「message」で切り出す正規表現が指定されています。ほかの名前で切り出し,JP1イベントの任意の属性に設定することもできます。
ログの時刻を解析する項目
「time」という名前でログメッセージ中の日時を切り出した場合,その日時がJP1イベントのJPC_LOG_TIME属性の値として設定されます。ログを「time」の名前で切り出すときには,ログの時刻を解析する項目を指定する必要があります。timeを切り出さない場合,またログの時刻を解析する項目を指定しない場合,JPC_LOG_TIME属性の値には,Fluentdがそのログメッセージを監視した日時が設定されます。
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
expression
一致するログの正規表現を指定します。
正規表現は「/」(デリミタ)で挟む必要があります。デリミタを使用しない場合,エラーが出力されます。正規表現には,少なくとも1つの名前付きキャプチャ(?<名前>切り出すログの正規表現)の指定が必須です。
正規表現には,iおよびmサフィックスを指定できます。
-
i(ignorecase)
マッチングの大文字と小文字を無視します。
-
m(マルチライン)
マルチラインモードとして正規表現を作成します。"."は改行と一致します。
-
both
iとmの両方を指定します。
読み取ったログが正規表現に一致しなかった場合,Fluentdのログに,次に示すような警告メッセージが出力され,ログが監視されません。
2022-01-23 12:34:56 +0900 [warn]: #0 pattern not matched: "エラーメッセージ"
変更可
監視対象ログファイルのログのフォーマットに合わせて設定します。
expression /^(?<message>.*)$/
time_type
解析するログの時刻形式を指定します。
変更可
監視対象ログファイルの時刻形式に合わせて,次の2種類のどちらかを指定します。
-
unixtime
1970年1月1日午前0時0分0秒からの経過秒数
-
string
time_formatで指定されたフォーマットを使用します。
−
time_format
時刻のフォーマットを256バイト以内で指定します。指定されたフォーマットに従って値を処理します。time_typeがstringの場合だけ使用できます。
サポートするフォーマットを次に示します。
-
%b
月の省略名(Jan,Feb,・・・)
-
%d
日(01〜31)
-
%H
24時間制の時(00〜23)
-
%M
分(00〜59)
-
%m
月を表す数字(01〜12)
-
%S
秒(00〜60(60はうるう秒を示します))
-
%Y
西暦を表す数
-
%N
秒の小数点以下
誤った値を指定した場合,Fluentdのログに次に示すような警告メッセージが出力され,ログが監視されないことがあります。
2022-09-08 17:15:10 +0900 [warn] : #0 invalid line found file="C:/fluentd/install/log/app1/20220906_log1_utf8.txt" line="2022/12/3 12:34:56 jpcagt0 00004864 00008904 agent.cpp 572 KAVL99999-E \xE3\x82\xA8\xE3\x83\xA9\xE3\x83\xBC\xE3\x83\xA1\xE3\x83\x83\xE3\x82\xBB\xE3\x83\xBC\xE3\x82\xB8(2022/09/08 17:15:09.24) " error="invalid time format: value = 2022/12/3 12:34:56, error_class = ArgumentError, error = string doesn't match"
このパラメーターを省略した場合,JPC_LOG_TIMEに設定する時刻は,Fluentdがログメッセージを検知した時刻となります。typeにsyslogを指定して,このパラメーターを指定しない場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されます。
そのため,Fluentdの起動およびログの追加後に,JP1イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの時刻形式に合わせて,時刻のフォーマットを指定します。
−
localtime
ローカルタイムを使用するためtrueを指定します。
変更不可
true
true
utc
ローカルタイムを使用するためfalseを指定します。
変更不可
false
false
timezone
指定されたタイムゾーンで時刻の値を解析します。
変更可
監視対象ログファイルの時刻形式に合わせて,次の形式のどちらかでタイムゾーンを指定します。
-
[+-]HH:MM
例:"+09:00"
-
[+-]HHMM
例:"+0900"
timezoneを指定する場合は,time_formatを指定する必要があります。
−
(凡例)−:該当なし
-
multilineの場合
<parse> @type multiline format_firstline 先頭行のログを解析する正規表現 formatN ログを解析する正規表現 time_key time null_empty_string false estimate_current_event true keep_time_key false ログの時刻を解析する項目 </parse>
先頭行のログを解析する正規表現(必須)
正規表現を指定し,ログ1行の内容を解析します。指定した正規表現がログの内容と一致した場合,一致したログの行を複数行で構成されるログの先頭行として読み込みます。
ログを解析する正規表現(必須)
「regexpの場合」の説明と同様です。Nには1から20の整数を指定でき,指定した正規表現を使用して,複数行で構成されたログの内容をN行目として解析します。
ログの時刻を解析する項目
「regexpの場合」の説明と同様です。
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
format_firstline
ログの先頭行を正規表現で指定します。
multilineパースプラグインは,複数行のログを解析します。パースプラグインのtypeにmultilineを指定した場合,formatNとformat_firstlineを指定する必要があります。
正規表現に指定できるバイト数の上限は1023バイト(デリミタを除く)です。正規表現は「/」(デリミタ)で挟む必要があります。デリミタを使用しない場合,エラーが出力されます。
変更可
監視対象ログファイルの形式に合わせて,ログの先頭行を正規表現で指定します。
−
formatN
ログの各行を正規表現で指定します。
複数行のログのフォーマットを指定します。Nは1から20の整数で,正規表現のフォーマットのリストを作成します。
正規表現に指定できるバイト数の上限は1023バイト(デリミタを除く)です。正規表現は「/」(デリミタ)で挟む必要があります。デリミタを使用しない場合,エラーが出力されます。
このパラメーターを指定しない場合,Fluentdを起動するとエラーが出力されます。
変更可
監視対象ログファイルの形式に合わせて,ログの各行を正規表現で指定します。
−
time_type
解析するログの時刻形式を指定します。
変更可
監視対象ログファイルの時刻形式に合わせて,次の2種類のどちらかを指定します。
-
unixtime:1970年1月1日午前0時0分0秒からの経過秒数
-
string: time_format で指定されたフォーマットを使用します。
−
time_format
時刻のフォーマットを256バイト以内で指定します。指定されたフォーマットに従って値を処理します。time_typeがstringの場合だけ使用できます。
サポートするフォーマットを次に示します。
%b:月の省略名(Jan,Feb,・・・)
%d:日(01〜31)
%H:24時間制の時(00〜23)
%M:分(00〜59)
%m:月を表す数字(01〜12)
%S:秒(00〜60(60はうるう秒を示します))
%Y:西暦を表す数
%N:秒の小数点以下
誤った値を指定した場合,Fluentdのログに次に示すような警告メッセージが出力され,ログが監視されないことがあります。
2022-09-08 17:15:10 +0900 [warn] : #0 invalid line found file="C:/fluentd/install/log/app1/20220906_log1_utf8.txt" line="2022/12/3 12:34:56 jpcagt0 00004864 00008904 agent.cpp 572
KAVL99999-E \xE3\x82\xA8\xE3\x83\xA9\xE3\x83\xBC\xE3\x83\xA1\xE3\x83\x83\xE3\x82\xBB\xE3\x83\xBC\xE3\x82\xB8(2022/09/08 17:15:09.24) "
error="invalid time format: value = 2022/12/3 12:34:56,error_class = ArgumentError, error = string doesn't match"
このパラメーターを省略した場合,JPC_LOG_TIMEに設定する時刻は,Fluentdがログメッセージを検知した時刻となります。typeにsyslogを指定して,このパラメーターを指定しない場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されます。
そのため,Fluentdの起動およびログの追加後に,JP1 イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの時刻形式に合わせて,時刻のフォーマットを指定します。
−
localtime
ローカルタイムを使用するためtrueを指定します。
変更不可
true
true
utc
ローカルタイムを使用するためfalseを指定します。
変更不可
false
false
timezone
指定されたタイムゾーンで時刻の値を解析します。
変更可
監視対象ログファイルの時刻形式に合わせて,次の形式のどちらかでタイムゾーンを指定します。
1. [+-]HH:MM (例: "+09:00")
2. [+-]HHMM (例: "+0900")
timezoneを指定する場合は,time_formatを指定する必要があります。
−
(凡例)−:該当なし
-
syslogの場合
<parse> @type syslog time_type string time_format 日時の形式 rfc5424_time_format RFC-5424フォーマットのsyslogの日時の形式 message_format syslogの種類 with_priority 優先度(priority)プレフィクスの有無 parser_type string support_colonless_ident identフィールドの有無 time_key time null_empty_string false estimate_current_event true keep_time_key false localtime true utc false </parse>
日時の形式(必須)
「regexpの場合」の説明と同様です。正規表現を指定し,ログメッセージ中の日時を解析します。syslogの種類にautoを指定した場合,RFC-3164フォーマットのsyslogの日時の形式を指定します。
RFC-3164フォーマットのsyslogの日時の形式(オプション)
正規表現を指定し,RFC-5424フォーマットのsyslogの日時を解析します。このパラメーターは,syslogの種類をautoに指定した場合だけ使用します。
syslogの種類(必須)
解析するsyslogの種類を,rfc3164(RFC-3164フォーマット),rfc5424(RFC-5424フォーマット),またはauto(両方)の中から選択して指定します
優先度(priority)プレフィクスの有無(必須)
RFC-3164フォーマットのsyslogに優先度(priority)プレフィクスが含まれているかどうかをtrueまたはfalseで指定します。syslogの種類にrfc3164を指定した場合だけfalseを指定でき,それ以外の場合はtrueに指定する必要があります。
identフィールドの有無(必須)
RFC-3164フォーマットのsyslogに,identフィールドが含まれているかどうかをtrueまたはfalseで指定します。syslogの種類にrfc3164を指定した場合だけ falseを指定でき,それ以外の場合はtrueに指定する必要があります。
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
time_format
「regexpの場合」の説明と同様です。
typeにsyslogを指定して,message_formatにautoを指定した場合は,RFC-3164プロトコルの時刻フォーマットを指定します。この場合,RFC-5424プロトコルの時刻フォーマットはrfc5424_time_formatで指定します。RFC-3164プロトコルの時刻フォーマットは,"%b %d %H:%M:%S"です。秒以下のタイムスタンプで出力される場合,"%b %d %H:%M:%S.%N"に変更します。
変更可
監視対象ログファイルの時刻形式に合わせて,時刻のフォーマットを正規表現で指定します。
−
rfc5424_time_format
RFC-5424プロトコルの時刻フォーマットを256バイト以内で指定します。
サポートするフォーマットを次に示します。
%b:月の省略名(Jan,Feb,・・・)
%d:日(01〜31)
%H:24時間制の時(00〜23)
%M:分(00〜59)
%m:月を表す数字(01〜12)
%S:秒(00〜60(60はうるう秒を示します))
%Y:西暦を表す数
%N:秒の小数点以下
誤った値を指定した場合,Fluentdのログに次に示すような警告メッセージが出力され,ログが監視されないことがあります。
2023-03-24 13:18:27 +0900 [warn]: #0 invalid line found file="/home/ec2-user/fluentd_test/input_log/20230315_log1.txt" line="<16>1 2023-03-24T13:18:27.31+0900 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"] Hi, from Fluentd!" error="invalid time format: value = 2023-03-24T13:18:27.31+0900, error_class = ArgumentError, error = string doesn't match"
このパラメーターは,message_formatをautoに指定した場合だけ使用します。指定しない場合,マニュアル「JP1/Integrated Management 3 - Manager 導入・設計ガイド」の「3.15.3(3)(g)ログのパース機能(parseプラグイン)」に記載する正規表現の時刻フォーマットに従って時刻が解析・切り出されます。
変更可
監視対象ログファイルの形式に合わせて,時刻のフォーマットを指定します。
−
message_format
syslogのプロトコルの形式を指定します。rfc3164,rfc5424,またはautoのどれかを指定できます。デフォルトはrfc3164です。
監視対象のsyslogがrfc5424で出力される場合は,rfc5424を指定します。また,監視対象のsyslogがrfc3164とrfc5424の両方のプロトコルでログ出力する場合,autoを指定します。
autoを指定した場合,syslogパースプラグインは,メッセージのプレフィクスを使用してフォーマットを検出します。
このパラメーターを指定しない場合,または,誤った値を指定した場合,Fluentdを起動するとエラーが出力されます。
変更可
監視対象ログファイルの形式に合わせて,ログの形式を指定します。
−
with_priority
RFC-3164フォーマットのsyslogに優先度(priority)プレフィクスが含まれているかどうかをtrueまたはfalseで指定します。
監視対象のログが,<9>のような優先度(priority)プレフィクスを持つ場合はtrueを指定します。
このパラメーターを指定しない場合,Fluentdのログに次に示すような警告メッセージが出力され,ログが監視されないことがあります。
2023-03-24 14:15:01 +0900 [warn]: #0 pattern not matched: "Mar 24 14:15:01 192.168.0.1 fluentd[11111]: [error] Syslog test"
trueまたはfalse以外の値を指定した場合,Fluentdを起動するとエラーが出力されます。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
support_colonless_ident
RFC-3164フォーマットのsyslogにidentフィールドが含まれているかどうかをtrueまたはfalseで指定します。RFC3164フォーマットのログを監視する場合に使用します。監視対象のログがメッセージ内にidentフィールドを含まない場合,falseを指定します。
このパラメーターを指定しない場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されることがあります。そのため,Fluentdの起動およびログの追加後にJP1イベントが正常なフォーマットで発行されているか確認する必要があります。
trueまたはfalse以外の値を指定した場合,Fluentdを起動するとエラーが出力されます。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
(凡例)−:該当なし
-
csvの場合
<parse> @type csv keys レコードの項目名の配列 delimiter , parser_type 内部パーサーの種類 time_key time null_empty_string false estimate_current_event true keep_time_key false ログの時刻を解析する項目 </parse>
レコードの項目名の配列(必須)
レコードの項目名を配列の形式で指定します。項目名の配列にはJP1イベントのメッセージに設定する文字列として「message」を含む必要があります。
messageを含まない場合,JP1イベントのMESSAGE 属性の値には空文字が設定されます。
内部パーサーの種類(必須)
csv形式のログをパースする内部パーサーの種類を指定します。
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
keys
レコードの項目名の配列を256バイト以内で指定します。
このパラメーターを指定しない場合,または,誤った値を指定した場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されます。そのため,Fluentdの起動およびログの追加後に,JP1イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
parser_type
ログの行をパースする際の内部パーサーの種類をnormalまたはfastのどちらかで指定します。
normalを指定した場合,RubyのCSV.parse_lineメソッドを使用します。
fastを指定した場合,Fluentd独自の軽量な実装を使用します。使用するパーサーは通常の数倍高速ですが,典型的なパターンだけをサポートします。サポートするフォーマットを次に示します。
# non-quoted
value1,value2,value3,value4,value5
# quoted
"value1","val,ue2","va,lu,e3","val ue4",""
# escaped
"message","mes""sage","""message""",,""""""
# mixed
message,"mes,sage","me,ssa,ge",mess age,""
このパラメータを指定しない場合,または,誤った値を指定した場合,Fluentdを起動するとエラーが出力されます。
変更可
監視対象ログファイルの形式が次のフォーマットである場合,fastを指定します。
# non-quoted
value1,value2,value3,value4,value5
# quoted
"value1","val,ue2","va,lu,e3","val ue4",""
# escaped
"message","mes""sage","""message""",,""""""
# mixed
message,"mes,sage","me,ssa,ge",mess age,""
監視対象ログファイルの形式が上記のフォーマットに合致しない場合,normalを指定します。
−
(凡例)−:該当なし
ログの時刻を解析する項目
「regexpの場合」の説明と同様です。レコードの項目名の配列に「time」が含まれる場合に設定します。
-
tsvの場合
<parse> @type tsv keys レコードの項目名の配列 delimiter "\t" time_key time null_empty_string false estimate_current_event true keep_time_key false ログの時刻を解析する項目 </parse>
レコードの項目名の配列(必須)
レコードの項目名を配列の形式で指定します。
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
keys
レコードの項目名の配列を256バイト以内で指定します。
このパラメーターを指定しない場合,または,誤った値を指定した場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されます。そのため,Fluentdの起動およびログの追加後に,JP1イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
(凡例)−:該当なし
ログの時刻を解析する項目
「regexpの場合」の説明と同様です。レコードの項目名の配列に「time」が含まれる場合に設定します。
-
ltsvの場合
<parse> @type ltsv 項目間の区切り文字 項目間の区切り文字のパターン label_delimiter ラベルと値の間の区切り文字 time_key time null_empty_string false estimate_current_event true keep_time_key false ログの時刻を解析する項目 </parse>
項目間の区切り文字 項目間の区切り文字のパターン(必須)
項目間の区切り文字を指定します。次のどちらかを指定します。
・項目間の区切りがタブの場合
delimiter "\t"
・項目間の区切りが1つ以上の空白の場合
delimiter_pattern /\s+/
ラベルと値の間の区切り文字(必須)
ラベルと値の間の区切り文字を指定します。
項目名
説明
変更可否
JP1/IM - Agentでユーザーが設定する内容
JP1/IM - Agentの初期値
delimiter
項目間の区切り文字を指定します。指定できる区切り文字は「"\t"」だけです。
このパラメーターとdelimiter_patternのどちらかを指定しない場合,または,誤った値を指定した場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されます。そのため,Fluentdの起動およびログの追加後に,JP1イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
delimiter_pattern
LTSV形式のファイルで,項目間の区切りが1つ以上の空白である場合に指定します。指定できる区切り文字は「/\s+/」だけです。
このパラメーターとdelimiterのどちらかを指定しない場合,または,誤った値を指定した場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されまする。そのため,Fluentdの起動およびログの追加後に,JP1イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
label_delimiter
ラベルと値の間の区切り文字を256バイト以内で指定します。
このパラメーターを指定しない場合,または,誤った値を指定した場合,エラーメッセージや警告メッセージは出力されず,監視対象ログは誤ったフォーマットで解析されます。そのため,Fluentdの起動およびログの追加後に,JP1イベントが正常なフォーマットで発行されているか確認する必要があります。
変更可
監視対象ログファイルの形式に合わせて指定します。
−
(凡例)−:該当なし
ログの時刻を解析する項目
「regexpの場合」の説明と同様です。レコードの項目名の配列に「time」が含まれる場合に設定します。
-
- [Attributes Settings]セクション
-
発行するJP1イベントの属性と属性値の設定を行います。
- ログ監視名(必須)
-
[Metric Settings]セクションの説明と同様です。
- イベントID(オプション)
-
JP1イベントのB.ID属性に設定する値を指定します。指定できる値については,マニュアル「JP1/Base 運用ガイド」を参照してください。初期値は「00007601」(テキスト形式のログファイルの監視定義ファイルで使用するイベントID)です。
指定を省略した場合,JP1イベントは発行されません。
「 ID イベントID」の指定の代わりに,次のように指定することで,message属性の値に応じたイベントIDを設定できます。
ID "${ if record['message'].match(/正規表現1/) 'イベントID1' elsif record['message'].match(/正規表現2/) 'イベントID2' elsif record['message'].match(/正規表現3/) 'イベントID3' ・・・ else 'イベントID4' end}"
Rubyの条件分岐でmessage属性の値を判定し,イベントIDを設定します。上記の場合,正規表現1に一致した場合,イベントID1に指定した値をイベントIDに設定します。一致しなかった場合,正規表現2と比較して一致した場合,イベントID2を設定します。elsifで指定した数だけ比較してどれにも一致しなかった場合,else構文内のイベントID4に指定した値をイベントIDに設定します。指定できるif文とelsif文の合計数の上限は100個です。
- ホスト名(オプション)
-
[Metric Settings]セクションの説明と同様です。
指定を省略した場合,JP1_SOURCEHOSTの属性値が設定されず,JP1イベントが正しいIM管理ノードに登録されません。
また,次のように設定することで,システムの標準のホスト名を動的に設定できます。
JP1_SOURCEHOST ${Socket.gethostname}
- 重大度(オプション)
-
JP1イベントのE.SEVERITY属性に設定する値を指定します。指定できる値については,マニュアル「JP1/Base 運用ガイド」を参照してください。初期値は「Notice」です。
指定を省略した場合,JP1イベントは発行されません。
「 SEVERITY 重大度」の指定の代わりに,次のように指定することで,message属性の値に応じた重大度を設定できます。
SEVERITY "${ if record['message'].match(/正規表現1/) 'Critical' elsif record['message'].match(/正規表現2/) 'Error' elsif record['message'].match(/正規表現3/) 'Warning' ・・・ else 'Notice' end}"
Rubyの条件分岐でmessage属性の値を判定し,重大度を設定します。上記の場合,正規表現1に一致した場合,重大度に「Critical」を設定します。マッチしなかった場合,正規表現2と比較して一致した場合,「Error」を設定します。elsifで指定した数だけ比較してどれにも一致しなかった場合,else構文内の「Notice」を重大度に設定します。指定できるif文とelsif文の合計数の上限は100個です。
- IM管理ノードのラベル名(オプション)
-
[Metric Settings]セクションの説明と同様です。
指定を省略した場合,JP1イベントは発行されません。
- 任意の属性名 任意の値(オプション)
-
JP1イベントに任意の属性を追加したい場合に指定します。指定できる属性名については,マニュアル「JP1/Base 運用ガイド」を参照してください。
値には,[Input Settings]セクションの,ログを解析する正規表現で,キャプチャした名前を指定できます。
例えば,「NUMBER」という名前でキャプチャし,EXIT_CODEという属性に設定する場合,次のように指定します。
EXIT_CODE ${record['NUMBER']}
複数の拡張属性を追加できますが,JP1イベントの拡張属性に設定する値のサイズの合計が上限を超える場合,JP1イベントは発行されません。
拡張属性の上限については,「4.4.4(5)__transformEventメソッド」を参照してください。
- [Inclusion Settings]セクション
-
監視するログの条件を正規表現で指定します。指定しない場合,すべてのログが監視対象となります。監視しないログが出力された場合,そのログはJP1イベントに変換されず,Fluentdのログにも出力されません。
初期設定では,「#」が行の先頭に指定されていてコメント扱いとなっているため,指定する場合は「#」を削除します。
- ログ監視名(必須)
-
[Metric Settings]セクションの説明と同様です。
- JP1イベントの属性名(オプション)
-
「MESSAGE」など,JP1イベントの属性名を指定します。指定を省略した場合,Fluentdの起動時にエラーとなります。
- 監視するログの正規表現(オプション)
-
JP1イベントの属性名で指定した属性の値に対して,正規表現を指定します。一致する値を含む場合,監視を行います。
指定を省略した場合,Fluentdの起動時にエラーとなります。
複数の正規表現パターンの論理積または論理和の条件を指定することもできます。指定の方法については,マニュアル「JP1/Integrated Management 3 - Manager 導入・設計ガイド」の「3.15.3(7)ログデータの抽出機能(grepプラグイン)」を参照してください。
- [Exclusion Settings]セクション
-
監視しないログの条件を正規表現で指定します。指定しない場合,すべてのログが監視対象となります。初期設定では,「#」が行の先頭に指定されていてコメント扱いとなっているため,指定する場合は「#」を削除します。
- ログ監視名(必須)
-
[Metric Settings]セクションの説明と同様です。
- JP1イベントの属性名(オプション)
-
「MESSAGE」など,JP1イベントの属性名を指定します。
指定を省略した場合,Fluentdの起動時にエラーとなります。
- 監視するログの正規表現(オプション)
-
JP1イベントの属性名で指定した属性の値に対して,正規表現を指定します。一致する値を含む場合,監視を行いません。
指定を省略した場合,Fluentdの起動時にエラーとなります。
複数の正規表現パターンの論理積または論理和の条件を指定することもできます。指定の方法については,マニュアル「JP1/Integrated Management 3 - Manager 導入・設計ガイド」の「3.15.3(7)ログデータの抽出機能(grepプラグイン)」を参照してください。
- [Forward Settings]セクション
-
JP1イベントに変換するログデータの正規表現を設定します。
- ログ監視名(必須)
-
[Metric Settings]セクションの説明と同様です。
- JP1イベントの属性名(オプション)
-
JP1イベントの属性名を指定します。初期値は「SEVERITY」です。
指定を省略した場合,Fluentdの起動時にエラーとなります。
- JP1イベントを発行するログの正規表現(オプション)
-
JP1イベントの属性名で指定した属性の値に対して,JP1イベントを発行する正規表現の条件を指定します。
初期値は,「Warning|Error|Critical|Alert|Emergency」で,SEVERITYの値がWarning以上の場合にマッチします。
属性の値が,条件に一致する値を含む場合,監視したログの内容がJP1イベントに変換され,統合マネージャーホストのJP1/Baseに登録されます。また,監視したログの内容がFluentdのログにも出力されます。条件に一致しない場合,JP1イベントは発行されず,Fluentdのログだけに出力されます。
指定を省略した場合,Fluentdの起動時にエラーとなります。
なお,[Attributes Settings]セクション内では,SEVERITYの初期値として「Notice」が指定されています。そのため,ログ監視結果はJP1イベントとして出力されず,Fluentdのログにだけ出力されます。
SEVERITYの値が「Notice」であるログをJP1イベントとして発行する場合は,次の下線部分のように定義を変更します。
pattern /Notice|Warning|Error|Critical|Alert|Emergency/
定義例
テキスト形式のログファイルを監視する条件と定義の例を,次に示します。
■条件
-
監視対象のログファイルのパス
C:¥Program Files (x86)¥Hitachi¥HNTRLib2¥spool¥*
-
ログメッセージ
6027 2022/08/25 17:45:50.219 jbssessionmgr 000018EC 00000FCC KAVA1497-I jp1adminユーザーがログインしました
-
監視するログメッセージ
メッセージIDがKAVAで始まるログメッセージを監視します。
-
MESSAGEに設定する値
ログメッセージの,メッセージID以降の文字列を設定します。
-
SEVERITYに設定する値
メッセージIDの重大度に応じた値を設定します。
-
任意の属性名に設定する値
ログメッセージに含まれるプロセス名(jbssessionmgr)を,属性名PROCESS_NAMEに設定します。
■定義
<worker 0> ## [Metric Settings] <source> @type exec command "echo {}" <parse> @type json </parse> run_interval 60s tag jpc_ima_metrics.tail.user_app_log </source> <filter jpc_ima_metrics.tail.user_app_log> @type record_transformer enable_ruby true <record> __name__ fluentd_logtrap_running instance hostA jp1_pc_nodelabel ユーザーアプリケーション jp1_pc_category applicationServer jp1_pc_logtrap_defname user_app_log_tail jp1_pc_trendname fluentd job jpc_fluentd jp1_pc_nodelabel_fluentd Log trapper(Fluentd) jp1_pc_addon_program JPC Fluentd </record> </filter> </worker> <worker 1> ## [Input Settings] <source> @type tail tag tail.user_app_log path C:/Program Files (x86)/Hitachi/HNTRLib2/spool/* follow_inodes true refresh_interval 60 skip_refresh_on_startup false read_from_head false encoding "UTF-8" from_encoding "Shift_JIS" read_lines_limit 1000 read_bytes_limit_per_second -1 pos_file ../data/fluentd/tail/user_app_log.pos path_key tailed_path rotate_wait 5s enable_watch_timer false enable_stat_watcher true open_on_every_update false emit_unmatched_lines false ignore_repeated_permission_error false <parse> @type regexp expression /^([^ ]* +(?<time>[^ ]* [^ ]*) +(?<PROCESS>[^ ]*) +[^ ]* +[^ ]* +(?<message>.*))$/ time_key time null_empty_string false estimate_current_event true keep_time_key false localtime true utc false </parse> </source> ## [Attributes Settings] <filter tail.user_app_log> @type record_transformer enable_ruby true auto_typecast true renew_record true <record> ID 00007601 MESSAGE ${record["message"]} JP1_SOURCEHOST hostA JPC_LOG_TIME ${time.utc.to_i} PRODUCT_NAME /HITACHI/JP1/JPCCS2/LOGTRAP/ユーザーアプリケーション PPNAME /HITACHI/JP1/JPCCS2/LOGTRAP SEVERITY "${ if record['message'].match(/^KAVA[1-9]*-E/) 'Error' elsif record['message'].match(/^KAVA[1-9]*-W/) 'Warning' elsif record['message'].match(/^KAVA[1-9]*-I/) 'Information' else 'Notice' end}" PLATFORM ${ if RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/; 'NT'; else 'UNIX'; end } OBJECT_TYPE LOGFILE OBJECT_NAME ${record['tailed_path']} ROOT_OBJECT_TYPE LOGFILE ROOT_OBJECT_NAME ${record['tailed_path']} JP1_TRAP_NAME ${tag_parts[1]} JPC_NODELABEL ユーザーアプリケーション PROCESS_NAME ${record['PROCESS']} </record> </filter> ## [Inclusion Settings] <filter tail.user_app_log> @type grep <regexp> key MESSAGE pattern /^KAVA[1-9]*-(I|W|E)/ </regexp> </filter> ## [Exclusion Settings] #<filter tail.user_app_log> # @type grep # <exclude> # key # pattern // # </exclude> #</filter> ## [Forward Settings] <match tail.user_app_log> @type rewrite_tag_filter <rule> key SEVERITY pattern /Warning|Error|Critical|Alert|Emergency/ tag ${tag}.jp1event </rule> <rule> key SEVERITY pattern /.*/ tag ${tag}.outputlog </rule> </match> <filter /tail\.user_app_log\.(jp1event|outputlog)/> @type record_transformer enable_ruby true auto_typecast true renew_record true <record> eventId ${record['ID']} xsystem true message ${record['MESSAGE']} attrs ${record} </record> remove_keys $.attrs.ID remove_keys $.attrs.MESSAGE </filter> </worker>