如何解决电报多行日志消息和inputs.tail.multiline input plugin
我需要使用 Telegraf 解析 MySQL 慢日志消息,然后将其传递给 Prometheus。
此类消息的示例是:
# Time: 2021-04-01T13:26:56.734727Z
# User@Host: root[root] @ localhost [] Id: 3
# Query_time: 3.001243 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1617283616;
select sleep(3);
设计一个应该处理这个多行的 grok 模式 日志条目我遵循了 Telegraf 文档中的建议 并通过在线 grok 表达式设计器创建模式:
https://grokdebug.herokuapp.com/
# Time: %{TIMESTAMP_ISO8601}\n# User@Host: %{NOTSPACE} @ %{HOSTNAME} %{SPACE}\[\]%{SPACE}Id:%{SPACE}%{INT}\n# Query_time:%{SPACE}%{BASE16FLOAT}%{SPACE}Lock_time: %{BASE16FLOAT}%{SPACE}Rows_sent:%{SPACE}%{BASE10NUM}%{SPACE}Rows_examined: %{BASE10NUM}%{SPACE}\nSET timestamp=%{BASE10NUM:timestamp};\n%{GREEDYDATA:query}
然而事实证明 Telegraf 无法解析 grok 上面的正则表达式作为一行,他们设计了一个这样命名的
inputs.tail.multiline
处理此类情况的功能,另请参阅以下参考:
https://github.com/influxdata/telegraf/pull/7309
我应该如何描述下面的表达式 在inputs.tail.multiline插件的上下文中?
###############################################################################
# SERVICE INPUT PLUGINS #
###############################################################################
# # Parse the new lines appended to a file
[[inputs.tail]]
files = ["/var/log/mysql/mysql-slow.log"]
from_beginning = true
watch_method = "inotify"
max_undelivered_lines = 1000
character_encoding = "utf-8"
name_override = "mysql_slow_log"
data_format = "grok"
grok_patterns = ["^# Time: %{TIMESTAMP_ISO8601:time}$"]
[inputs.tail.multiline]
pattern = "^%{GREEDYDATA:logmessage}"
match_which_line = "previous"
这部分配置只能解析第一行 由 5 行组成并产生输出的日志条目:
mysql_slow_log,host=c1-master1,path=/var/log/mysql/mysql-slow.log time="2021-04-01T13:26:56.734727Z" 1617345403983043021
我应该如何修改上面的配置来解析所有 5 行 MySQL 慢日志入口?
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。