Logstash 基于条件文本计算日志存储中的日期差
我有一个条件: 我有一系列日志,从startTransaction开始,到endtransaction结束。现在,在这两个事件之间还有其他日志 我的要求是捕获上述事件的日志时间并计算差异 当我读到logstash不支持循环时,将有多个开始和结束事件块,我需要计算时间差 请帮助我们找到一些方法 条件Logstash 基于条件文本计算日志存储中的日期差,logstash,kibana,logstash-grok,Logstash,Kibana,Logstash Grok,我有一个条件: 我有一系列日志,从startTransaction开始,到endtransaction结束。现在,在这两个事件之间还有其他日志 我的要求是捕获上述事件的日志时间并计算差异 当我读到logstash不支持循环时,将有多个开始和结束事件块,我需要计算时间差 请帮助我们找到一些方法 条件 记录starttransaction事件日志的时间 记录endtransaction事件日志的时间 找到时间差并存储在变量中 添加starttransaction和endtransaction之间出现
输入{
文件{
路径=>[“D:/seetslog/SeeTest-2017-05-18-12-51-22.log”]
开始位置=>“开始”
类型=>“st_ios”
}
}
滤器{
如果[消息]中的“分析”){
格罗克{
{消息=>{消息=>{{消息=>{{{消息>{{{消息>{{{消息>>{{{消息>>{{{消息>>{{{{{消息>{{{{消息>>{{{{消息>{{{{{{消息>>{{{{{{时间戳时间戳}}}}{{{{{网页网页网页网页网页>>{{{{{{{{{{{门门市:文字:文字:文字:text1}}}}{{{单词:文字:文字:文字:文字:文本2}}}}}}}}{{{{{{{{单词:文字:文字:文字:文字:文字:文字:文字:2}}}}}}}}}}---{{{{{{{{{{{{{单词:文字:文字:文字:文字:文字:文字:文字:事件}}}}}}}}}
]}
添加标签=>[“st_ios”]
}
}
其他的
{
格罗克{
match=>{message=>[“%{TIMESTAMP\u ISO8601:TIMESTAMP}\,%{INT:bytes}%{SPACE}\[(?%{WORD:text1}-%{WORD:text2}-%{WORD:Event}-%{NOTSPACE:deviceid}])%{SPACE}\({NOTSPACE:controller}\)%{SPACE}%{SPACE}%{WORD:logger}%{SPACE}{SPACE SPACE}%{greedData:logmessage(?)
]}
添加标签=>[“st_ios”]
}
}
变异{
转换=>{“字节”=>“整数”}
convert=>{“analyzetime”=>“integer”}
}
日期{
匹配=>[“时间戳”、“dd-MMM-yyyy-HH:mm:ss”、“yyy-mm-dd-HH:mm:ss”]
目标=>“时间戳”
语言环境=>“en”
}
if(在[消息]中的“启动交易”){
mutate{add_tag=>[“eventstart”]}
}
else if[消息]中的“endTransaction”){
mutate{add_tag=>[“eventend”]}
}
过去的{
开始\标记=>“事件开始”
结束\标记=>“事件结束”
唯一\u id\u字段=>“任务\u id”
超时=>600
新的\u事件\u在\u匹配上=>false
添加标签=>[“in2”]
}
}
输出{
stdout{codec=>rubydebug}
elasticsearch{hosts=>[“localhost:9200”]索引=>“logstash-st-ios-1”}
}
我能够满足所有要求。想和大家分享一下结果
#1-#4通过日志存储实现。下面是conf文件
input {
file {
path => ["temp.log"]
start_position => "beginning"
}
}
filter {
if ("analyze" in [message]) {
grok {
match => { message => ["%{TIMESTAMP_ISO8601:timestamp}\,%{INT:bytes}%{SPACE}\[(?<eventmessage>%{WORD:text1}\-%{WORD:text2}\-%{WORD:Event}\-%{NOTSPACE:deviceid}\])%{SPACE}\(%{NOTSPACE:controller}\)%{SPACE}%{WORD:logger}%{SPACE}(?<analyzetext>%{WORD:text1}%{SPACE}%{WORD:text2}%{SPACE}%{NOTSPACE:text3})%{SPACE}%{INT:analyzetime}"]}
}
}
else
{
grok {
match => { message => ["%{TIMESTAMP_ISO8601:timestamp}\,%{INT:bytes}%{SPACE}\[(?<eventmessage>%{WORD:text1}\-%{WORD:text2}\-%{WORD:Event}\-%{NOTSPACE:deviceid}\])%{SPACE}\(%{NOTSPACE:controller}\)%{SPACE}%{WORD:logger}%{SPACE}%{NOTSPACE:ClientID}\:%{SPACE}%{WORD:controllertext}\:%{SPACE}%{WORD:Val1}%{SPACE}%{WORD:Val2}%{SPACE}\'%{NOTSPACE:usertransaction}\'\,%{SPACE}%{WORD:statustext}\:%{SPACE}%{WORD:statusvalue}"]}
}
}
mutate {
convert => { "bytes" => "integer"}
convert => { "analyzetime" => "integer"}
}
date {
match => [ "timestamp", "dd-MMM-yyyy HH:mm:ss", "YYYY-MM-dd HH:mm:ss" ]
target => "timestamp"
locale => "en"
}
if ("startTransaction" in [message]) {
mutate { add_tag => ["eventstart"] }
}
else if ("endTransaction" in [message]) {
mutate { add_tag => ["eventend"] }
}
elapsed {
start_tag => "eventstart"
end_tag => "eventend"
unique_id_field => "deviceid"
timeout => 120
new_event_on_match => false
}
if ("startTransaction" in [message]) {
aggregate {
task_id => "%{deviceid}"
code => "map['sum_analyze_time'] = 0"
map_action => "create"
}
}
if ("analyze" in [message]) {
aggregate {
task_id => "%{deviceid}"
code => "map['sum_analyze_time'] += event.get('analyzetime')"
map_action => "update"
}
}
if ("endTransaction" in [message]) {
aggregate {
task_id => "%{deviceid}"
code => "event.set('sum_analyze_time', map['sum_analyze_time'])"
map_action => "update"
end_of_task => true
timeout => 120
}
}
}
output {
stdout {codec => rubydebug}
elasticsearch { hosts => ["localhost:9200"] index => "logstash-st-ios-1"}
}
输入{
文件{
路径=>[“临时日志”]
开始位置=>“开始”
}
}
滤器{
如果[消息]中的“分析”){
格罗克{
{消息=>{消息=>{{消息=>{{{{消息>{{{消息>{{{消息>>{{{消息>>{{{消息>>{{{{{消息>{{{{{消息>>{{{{消息>{{{{{{{{时间戳}}}{{{{{时间戳}}}}}}{{{{{{{{门门门门门市:文字:文字:文字:text1}}}}{{{{{文字:文字:文字:文本2}}}}}}{{{{{{{{{单词:文字:文字:文字:文字:文本2}}}}}}}}}---{{{门门门门门门门门门门门门门门门门门门门门-{{{{{{{{{可能可能可能可能可能可能}}}}}--{{{{{{{{
}
}
其他的
{
格罗克{
{消息=>{消息=>{{{消息=>{{{{消息=>{{{{{{消息>>{{{{消息>{{{{消息>>{{{{{{消息>{{{{消息>>{{{{{{{{{{{{{时间戳}}}{{{{{{{门门门门控:字节:字节:}}}{{{{{{空间}{{{{{{{{{{门门控:文字:文字:文字:文字:文字:文字:文字:文字:文字:text1}}}}}}{{{{{{{门门门门门门门门门门门门门铁铁铁铁}}}}}}}{{{{{{{{{{{{{{{{{门门门门门门门门门门门门门门门门门控:文字:文字:文字:文字:文字:文字:文字:文字%{SPACE}\'%{NOTSPACE:usertransaction}\'\,%{SPACE}%{WORD:statustext}\:%{SPACE}%{WORD:statusvalue}]}
}
}
变异{
转换=>{“字节”=>“整数”}
convert=>{“analyzetime”=>“integer”}
}
日期{
匹配=>[“时间戳”、“dd-MMM-yyyy-HH:mm:ss”、“yyy-mm-dd-HH:mm:ss”]
目标=>“时间戳”
语言环境=>“en”
}
if(在[消息]中的“启动交易”){
mutate{add_tag=>[“eventstart”]}
}
else if[消息]中的“endTransaction”){
mutate{add_tag=>[“eventend”]}
}
过去的{
开始\标记=>“事件开始”
结束\标记=>“事件结束”
唯一\u id\u字段=>“设备id”
超时=>120
新的\u事件\u在\u匹配上=>false
}
if(在[消息]中的“启动交易”){
聚合{
任务id=>“%{deviceid}”
代码=>“映射['sum\u analyze\u time']=0”
映射_操作=>“创建”
}
}
如果[消息]中的“分析”){
聚合{
任务id=>“%{deviceid}”
代码=>“映射['sum\u analyze\u time']+=event.get('analyzetime')”
映射\操作=>“更新”
}
}
如果[message]中的“endTransaction”{
聚合{
任务id=>“%{deviceid}”
代码=>“event.set('sum_analyze_time',map['sum_analyze_time'])”
映射\操作=>“更新”
结束任务的任务=>true
超时=>120
}
input {
file {
path => ["D:/SeeTestLog/SeeTest-2017-05-18-12-51-22.log"]
start_position => "beginning"
type => "st_ios"
}
}
filter {
if ("analyze" in [message]) {
grok {
match => { message => [ "%{TIMESTAMP_ISO8601:timestamp}\,%{INT:bytes}%{SPACE}\[(?<eventmessage>%{WORD:text1}\-%{WORD:text2}\-%{WORD:Event}\-%{NOTSPACE:deviceid}\])%{SPACE}\(%{NOTSPACE:controller}\)%{SPACE}%{WORD:logger}%{SPACE}(?<analyzetext>%{WORD:text1}%{SPACE}%{WORD:text2}%{SPACE}%{NOTSPACE:text3})%{SPACE}%{INT:analyzetime} (?<task_id>.*)"
]}
add_tag => [ "st_ios" ]
}
}
else
{
grok {
match => { message => ["%{TIMESTAMP_ISO8601:timestamp}\,%{INT:bytes}%{SPACE}\[(?<eventmessage>%{WORD:text1}\-%{WORD:text2}\-%{WORD:Event}\-%{NOTSPACE:deviceid}\])%{SPACE}\(%{NOTSPACE:controller}\)%{SPACE}%{WORD:logger}%{SPACE}%{GREEDYDATA:logmessage} (?<task_id>.*)"
]}
add_tag => [ "st_ios" ]
}
}
mutate {
convert => { "bytes" => "integer"}
convert => { "analyzetime" => "integer"}
}
date {
match => [ "timestamp", "dd-MMM-yyyy HH:mm:ss", "YYYY-MM-dd HH:mm:ss" ]
target => "timestamp"
locale => "en"
}
if ("startTransaction" in [message]) {
mutate { add_tag => ["eventstart"] }
}
else if ("endTransaction" in [message]) {
mutate { add_tag => ["eventend"] }
}
elapsed {
start_tag => "eventstart"
end_tag => "eventend"
unique_id_field => "task_id"
timeout => 600
new_event_on_match => false
add_tag => ["in2"]
}
}
output {
stdout {codec => rubydebug}
elasticsearch { hosts => ["localhost:9200"] index => "logstash-st-ios-1"}
}
input {
file {
path => ["temp.log"]
start_position => "beginning"
}
}
filter {
if ("analyze" in [message]) {
grok {
match => { message => ["%{TIMESTAMP_ISO8601:timestamp}\,%{INT:bytes}%{SPACE}\[(?<eventmessage>%{WORD:text1}\-%{WORD:text2}\-%{WORD:Event}\-%{NOTSPACE:deviceid}\])%{SPACE}\(%{NOTSPACE:controller}\)%{SPACE}%{WORD:logger}%{SPACE}(?<analyzetext>%{WORD:text1}%{SPACE}%{WORD:text2}%{SPACE}%{NOTSPACE:text3})%{SPACE}%{INT:analyzetime}"]}
}
}
else
{
grok {
match => { message => ["%{TIMESTAMP_ISO8601:timestamp}\,%{INT:bytes}%{SPACE}\[(?<eventmessage>%{WORD:text1}\-%{WORD:text2}\-%{WORD:Event}\-%{NOTSPACE:deviceid}\])%{SPACE}\(%{NOTSPACE:controller}\)%{SPACE}%{WORD:logger}%{SPACE}%{NOTSPACE:ClientID}\:%{SPACE}%{WORD:controllertext}\:%{SPACE}%{WORD:Val1}%{SPACE}%{WORD:Val2}%{SPACE}\'%{NOTSPACE:usertransaction}\'\,%{SPACE}%{WORD:statustext}\:%{SPACE}%{WORD:statusvalue}"]}
}
}
mutate {
convert => { "bytes" => "integer"}
convert => { "analyzetime" => "integer"}
}
date {
match => [ "timestamp", "dd-MMM-yyyy HH:mm:ss", "YYYY-MM-dd HH:mm:ss" ]
target => "timestamp"
locale => "en"
}
if ("startTransaction" in [message]) {
mutate { add_tag => ["eventstart"] }
}
else if ("endTransaction" in [message]) {
mutate { add_tag => ["eventend"] }
}
elapsed {
start_tag => "eventstart"
end_tag => "eventend"
unique_id_field => "deviceid"
timeout => 120
new_event_on_match => false
}
if ("startTransaction" in [message]) {
aggregate {
task_id => "%{deviceid}"
code => "map['sum_analyze_time'] = 0"
map_action => "create"
}
}
if ("analyze" in [message]) {
aggregate {
task_id => "%{deviceid}"
code => "map['sum_analyze_time'] += event.get('analyzetime')"
map_action => "update"
}
}
if ("endTransaction" in [message]) {
aggregate {
task_id => "%{deviceid}"
code => "event.set('sum_analyze_time', map['sum_analyze_time'])"
map_action => "update"
end_of_task => true
timeout => 120
}
}
}
output {
stdout {codec => rubydebug}
elasticsearch { hosts => ["localhost:9200"] index => "logstash-st-ios-1"}
}