2種類のシステムから出力されるログA,Bがあり、Aのログに含まれる時間の値を使って、Bのログを検索したいと考えています。
Log:Aを検索し、Aに含まれるUseStartおよびUseEndの値をLog:Bの検索時にそれぞれstarttime,endtimeに代入して使用することは可能でしょうか?可能な場合具体的な指定方法をアドバイスいただけると助かります。
Log:A(sourcetype=aaa)
2013/03/06 15:52:25 ServerIP=192.168.1.1 ServerUser=Admin01 UseStart=2013/03/06 8:00:00 UseEnd=2013/03/08 17:00:00
Log:B(sourcetype=bbb)
2013/03/06 15:55:39 ServerUser=Admin01 Message="Accepted password" ServerIP=192.168.1.1
2013/03/06 15:55:39 ServerUser=Admin01 Message="session closed" ServerIP=192.168.1.1
2013/03/06 15:55:39 ServerUser=Admin01 Message="session opened" ServerIP=192.168.1.1
いくつかの方法がありますが、基本的なサブサーチを利用した場合は
以下のようなサーチ例にて実現出来るかと思います。お試し下さい。
[search sourcetype="aaa"
| rex field=_raw "UseStart=(?
| eval earliest = strptime(start, "%Y/%m/%d %H:%M:%S")
| rex field=_raw "UseEnd=(?
| eval latest = strptime(end, "%Y/%m/%d %H:%M:%S")
| fields earliest,latest
| format "(" "(" " " ")" "OR" ")" ]
sourcetype="bbb"
[ ...] 内が1番目のサーチです。括弧の後、最後のsourcetype=....が2番目のサーチです。
勿論、ここでLog:Bの条件を更にフィルタすることも可能です。
意図した通りのサーチができました。ありがとうございます!
いくつかの方法がありますが、基本的なサブサーチを利用した場合は
以下のようなサーチ例にて実現出来るかと思います。お試し下さい。
[search sourcetype="aaa"
| rex field=_raw "UseStart=(?
| eval earliest = strptime(start, "%Y/%m/%d %H:%M:%S")
| rex field=_raw "UseEnd=(?
| eval latest = strptime(end, "%Y/%m/%d %H:%M:%S")
| fields earliest,latest
| format "(" "(" " " ")" "OR" ")" ]
sourcetype="bbb"
[ ...] 内が1番目のサーチです。括弧の後、最後のsourcetype=....が2番目のサーチです。
勿論、ここでLog:Bの条件を更にフィルタすることも可能です。
バックスラッシュが投稿時に消えてしまっているので、いかのようにdの前にバックスラッシュをいれれば大丈夫かと思います。
... | rex field=_raw "UseStart=(?
そして、サーチの最後に、以下を付け加えれば、表になりますが、こちらは結果に合わせて調整いただければと思います。
... | stats first(Message) last(Message) list(Message) by ServerUser ServerIP