ログ内の日付と時刻が続けて表示されていない場合、どのように抽出すれば良いでしょうか。
例えば、以下のように日時情報が030216の部分で、つまり、03時02分16秒となっていまして、日付情報が120814の部分で、つまり、12日8月2014年となっている場合、Splunkをどのように設定すれば、インデックス後のイベントの_timeが2014/08/12 03:02:16になりますでしょうか。
$GPRMC,030216,B,2307.103231,S,1212.321123,W,0,0,120814,,*2b
以下の設定で、日付と時刻が続けて表示されない場合でも、日時情報を抽出して、_timeとして利用できます。ご確認ください。
[your_sourcetype]
INDEXED_EXTRACTIONS=csv
KV_MODE=none
SHOULD_LINEMERGE=false
disabled=false
pulldown_type=true
FIELD_NAMES=f01,f02,f03,f04,f05,f06,f07,f08,f09,f10,f11,f12
TIME_FORMAT=%d%m%y %H%M%S
TIMESTAMP_FIELDS=f10,f02
ポイントは、CSV形式で取り込むことです。
TIMESTAMP_FIELDSが利用できるようになり、離れて存在しているフィールドをタイムスタンプとして組み合わせて利用できます。
Splunk 6.2.0で期待動作となる事を確認しました。ちなみに、Splunk 6.2.0では、この設定をデータを取り込む際に、GUI上で確認しながら設定できます。
参考になれば幸いです。
Sudaさんから回答を頂きましたやり方以外にも、datetime.xmlを使うことでできた方法がありましたので、共有させて頂きます。
まず、以下のprops.confを作成します。
[custom_time_extraction]
SHOULD_LINEMERGE = false
DATETIME_CONFIG = /etc/custom_time_extraction_datetime.xml
MAX_TIMESTAMP_LOOKAHEAD = 100
そして、「SPLUNK_HOME/etc」の配下に以下のcustom_time_extraction_datetime.xmlファイルを作成することで正しく日時情報を抽出することができました。
<datetime>
<define name="custom_datetime" extract="hour, minute, second, day, month, year">
<text><![CDATA[^\$\w+,(\d\d)(\d\d)(\d\d),(?:\S*,){7}(\d\d)(\d\d)(\d\d)]]></text>
</define>
<timePatterns>
<use name="custom_datetime"/>
</timePatterns>
<datePatterns>
<use name="custom_datetime"/>
</datePatterns>
</datetime>
以下の設定で、日付と時刻が続けて表示されない場合でも、日時情報を抽出して、_timeとして利用できます。ご確認ください。
[your_sourcetype]
INDEXED_EXTRACTIONS=csv
KV_MODE=none
SHOULD_LINEMERGE=false
disabled=false
pulldown_type=true
FIELD_NAMES=f01,f02,f03,f04,f05,f06,f07,f08,f09,f10,f11,f12
TIME_FORMAT=%d%m%y %H%M%S
TIMESTAMP_FIELDS=f10,f02
ポイントは、CSV形式で取り込むことです。
TIMESTAMP_FIELDSが利用できるようになり、離れて存在しているフィールドをタイムスタンプとして組み合わせて利用できます。
Splunk 6.2.0で期待動作となる事を確認しました。ちなみに、Splunk 6.2.0では、この設定をデータを取り込む際に、GUI上で確認しながら設定できます。
参考になれば幸いです。
TIME_FORMATが間違っていたので、Accepted Answerいただいた後に変更しました。現在の設定でご確認ください。
情報どうもありがとうございます。大変参考になりました!