【问题标题】:Log analysis to query logs based on a log message日志分析,根据日志消息查询日志
【发布时间】:2015-06-03 07:15:12
【问题描述】:

我有一个以格式输出日志的 Java 应用程序

时间戳UUID1一些信息
时间戳 UUID1 更多信息
时间戳 UUID1 x = 1

时间戳 UUID2 一些信息
时间戳 UUID2 更多信息
时间戳 UUID2 x = 2

时间戳 UUID3 一些信息
时间戳 UUID3 更多信息
时间戳 UUID3 x = 1

我想使用 Elsatic Search、LogStash 和 Kibana 实现一个日志分析框架。是否可以只根据X值获取日志?

例如:-

如果我查询 X = 1,我应该只得到以下日志。

时间戳UUID1一些信息
时间戳 UUID1 更多信息
时间戳 UUID1 x = 1
时间戳 UUID3 一些信息
时间戳 UUID3 更多信息
时间戳 UUID3 x = 1

如果我查询 X = 2,我应该只得到以下日志。

时间戳UUID2一些信息
时间戳 UUID2 更多信息
时间戳 UUID2 x = 2

我可以控制日志消息的格式。如果无法直接执行此查询,我也可以更改消息格式。

更新 1:

我会更具体一点。

以下是我的日志语句。

    MDC.put("uuid", UUID.randomUUID().toString());
    logger.info("Assigning value to the variable : {}", name);
    this.setVal(value.getVal());
    logger.info("{} = {}", name, value.getVal());
    logger.info("Assigned value {} to the variable : {}", value.getVal(),
            name);
    MDC.clear();

我使用 UDP 在 Logstash 中收到了日志语句。我收到了类似的消息。

{
     "@timestamp" => "2015-04-01T10:23:37.846+05:30",
       "@version" => 1,
        "message" => "Assigning value to the variable : X",
    "logger_name" => "com.example.logstash.Variable",
    "thread_name" => "pool-1-thread-1",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "pnibinkj-W7-1",
           "uuid" => "ab17b842-8348-4474-98e4-8bc2b8dd6781",
           "host" => "127.0.0.1"
}
{
     "@timestamp" => "2015-04-01T10:23:37.846+05:30",
       "@version" => 1,
        "message" => "Assigning value to the variable : Y",
    "logger_name" => "com.example.logstash.Variable",
    "thread_name" => "pool-1-thread-2",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "pnibinkj-W7-1",
           "uuid" => "d5513e4c-de3b-4144-87e4-87b077ac8056",
           "host" => "127.0.0.1"
}
{
     "@timestamp" => "2015-04-01T10:23:37.862+05:30",
       "@version" => 1,
        "message" => "Y = 1",
    "logger_name" => "com.example.logstash.Variable",
    "thread_name" => "pool-1-thread-2",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "pnibinkj-W7-1",
           "uuid" => "d5513e4c-de3b-4144-87e4-87b077ac8056",
           "host" => "127.0.0.1"
}
{
     "@timestamp" => "2015-04-01T10:23:37.863+05:30",
       "@version" => 1,
        "message" => "X = 1",
    "logger_name" => "com.example.logstash.Variable",
    "thread_name" => "pool-1-thread-1",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "pnibinkj-W7-1",
           "uuid" => "ab17b842-8348-4474-98e4-8bc2b8dd6781",
           "host" => "127.0.0.1"
}
{
     "@timestamp" => "2015-04-01T10:23:37.863+05:30",
       "@version" => 1,
        "message" => "Assigned value 1 to the variable : X",
    "logger_name" => "com.example.logstash.Variable",
    "thread_name" => "pool-1-thread-1",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "pnibinkj-W7-1",
           "uuid" => "ab17b842-8348-4474-98e4-8bc2b8dd6781",
           "host" => "127.0.0.1"
}
{
     "@timestamp" => "2015-04-01T10:23:37.863+05:30",
       "@version" => 1,
        "message" => "Assigned value 1 to the variable : Y",
    "logger_name" => "com.example.logstash.Variable",
    "thread_name" => "pool-1-thread-2",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "pnibinkj-W7-1",
           "uuid" => "d5513e4c-de3b-4144-87e4-87b077ac8056",
           "host" => "127.0.0.1"
}

有 2 个 UUID

“d5513e4c-de3b-4144-87e4-87b077ac8056”对于“Y = 1”
“X = 1”的“ab17b842-8348-4474-98e4-8bc2b8dd6781”

每个 UUID 还有另外两条消息。我想将它们组合成一个事件。

我不确定,如何为这种情况编写多行过滤器。

filter {
  multiline {
    pattern => "."
    what => "previous"
    stream_identity => "%{uuid}"
  }
}

“模式”和“什么”似乎是必填字段。我应该为这些字段提供什么。如何使用流身份?

请指点我正确的方向。

谢谢, 保罗

【问题讨论】:

    标签: java elasticsearch logstash kibana


    【解决方案1】:

    您需要合并您的消息(请参阅支持 stream_identity 的多行过滤器),然后常规查询将返回适当的消息。

    【讨论】:

    • 如何使用stream_identity?你能举一个例子吗?
    【解决方案2】:

    如果 X 是某个唯一值,这应该可以使用 kibana 过滤器来实现,但是对于显示格式的日志,您需要使用多行过滤器将条目连接在一起。

    有了这些,您可能可以使用类似

    的查询
    message: "X=1"
    

    【讨论】:

    • 如何使用多行过滤器来实现这一点?你能举一个例子吗?
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多