Kibana连接两个独立的事件

use*_*860 4 elasticsearch logstash kibana

我已将ELK配置为脱机收集数据,日志文件如下所示:

Info 2015-08-15 09:33:37,522 User 3 connected
Info 2015-08-15 10:03:57,592 User 99 connected

Info 2015-08-15 11:42:37,522 User 99 disconnected 
Info 2015-08-15 11:49:12,108 User 3 disconnected
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是时间线上的平均连接时间.

我无法向消息添加更多信息,特别是我无法在断开连接消息中添加连接时间.

Val*_*Val 6

如果您使用Logstash加载ES,则可以使用aggregate过滤器来组合相关的离散日志行.这个想法是注意一个持久的事件何时开始(即用户连接),然后当disconnected同一个用户的事件飞过时结束它:(注意你的grok模式可能不同,但原理是相同的)

filter {
    grok {
        match => [ "message", "%{LOGLEVEL:loglevel} %{TIMESTAMP_ISO8601:timestamp} %{WORD:entity} %{INT:userid} %{WORD:status}" ]
    }

    if [status] == "connected" {
        aggregate {
            task_id => "%{userid}"
            code => "map['started'] = event['timestamp']"
            map_action => "create"
        }
    }

    if [status] == "disconnected" {
        aggregate {
            task_id => "%{userid}"
            code => "event['duration'] = event['timestamp'] - map['started']"
            map_action => "update"
            end_of_task => true
            timeout => 86400000
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您将最终得到一个名为duration(以毫秒为单位)的附加字段,然后您可以使用该字段在Kibana上绘制以显示平均连接时间.

另请注意,我正在给出一天的任意超时,这可能适合您的情况,也可能不适合您的情况.随意玩.