【问题标题】:GROK LOG Filter / grep specific valuesGROK LOG 过滤器/grep 特定值
【发布时间】:2021-03-17 14:28:25
【问题描述】:

我是 GROK 的菜鸟,我需要从日志文件中 grep 特定的东西

这是一个日志示例:

2021-03-16 12:23:30,717 [ STATUS ] {replicate_changes             }  Replication status: SRC_SCN 1235720653409 - SRC_TMSTMP 2021-03-16 12:23:27 - STMTS/s 189.18 - TX/s 101.05

从那行我需要 grep :

  1. 时间戳
  2. STMTS/s 的值
  3. TX/s 的值

在正则表达式中它看起来像这样:

(^\d.+) \[ .+ \].+ SRC_TMSTMP (\d.+) - STMTS\/s (\d.+) - TX\/s (\d.+)

谁能帮我解开这个谜团?提前谢谢!

【问题讨论】:

    标签: regex elasticsearch logging database-replication logstash-grok


    【解决方案1】:

    请注意最初询问时间戳的问题,示例正则表达式似乎同时捕获(可能)收据时间戳和“SRC_TMSTMP”。下面的简单 grok 模式将捕获两者并适当地分配:

    %{TIMESTAMP_ISO8601:timestamp} %{GREEDYDATA} SRC_TMSTMP %{TIMESTAMP_ISO8601:source_timestamp} %{GREEDYDATA} STMTS/s %{BASE10NUM:stmts_per_sec:float} %{GREEDYDATA} TX/s %{BASE10NUM:tx_per_sec:float}
    

    这可以根据额外的样本数据进一步优化。

    这里解释了一般的 grok 语法和用法:https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html

    可以在这里找到预定义的 grok 模式: https://github.com/elastic/elasticsearch/blob/7.11/libs/grok/src/main/resources/patterns/grok-patterns

    简而言之,grok模式匹配遵循以下格式:

    %{DEFINED_GROK_PATTERN:field_name:optional_cast_type}
    

    请注意,如果未指定 field_name,它不会将捕获的值分配给字段 - 本质上与使用不带括号的正则表达式模式或非捕获组相同。

    此模式的使用取决于您打算在哪里使用它 - Elasticsearch 或 Logstash(基于问题标签)。如果是 Elasticsearch,请参阅第一个链接 - 如果使用 Logstash,请参阅以下内容:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

    请注意,Kibana 中一个有用的工具是 Grok 调试器,它可以在 Dev Tools 下找到:

    【讨论】:

    • 嗨,谢谢你的详细解释和解决方案! :)
    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多