regex - GROK LOG 过滤器/grep 特定值
问题描述
我是 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:
- 时间戳
- STMTS/s 的值
- TX/s 的值
在正则表达式中,它看起来像这样:
(^\d.+) \[ .+ \].+ SRC_TMSTMP (\d.+) - STMTS\/s (\d.+) - TX\/s (\d.+)
谁能帮我解开这个谜团?提前谢谢!
解决方案
请注意询问时间戳的原始问题,并且示例正则表达式似乎正在捕获(可能)收据时间戳和“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
指定 no,它不会将捕获的值分配给字段 - 基本上与使用不带括号的正则表达式模式或非捕获组相同。
此模式的使用取决于您打算在哪里使用它 - Elasticsearch 或 Logstash(基于问题标签)。如果是 Elasticsearch,请参阅第一个链接 - 如果使用 Logstash,请参阅以下内容:https ://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
推荐阅读
- javascript - 如何在 JavaScript 中显示 SweetAlert
- python-3.x - Keras卷积层:model.add(Convolution2D(32, 3, 3 input_shape = (img_width, img_height, 3)))
- python - Python 处理任何异常都会给出错误 KeyboardInterrupt
- c++ - Qt外部库重复符号链接错误
- javascript - 无法通过JS访问相关实体的状态码或状态码
- c++ - 谷物多态序列化找不到序列化函数
- http - 我的优雅停止 http.ListenAndServe 失败
- python - 无服务器 WSGI 本地服务器运行缓慢
- angular-material - 使用 Angular2 及更高版本清理 Angular-Material html 标记
- python - 在 Python 3 中编写二进制文件,为什么我没有得到 9,10 和 13 的十六进制表示?