【问题标题】:Fluentd Openstack Log Regex formatFluentd Openstack 日志正则表达式格式
【发布时间】:2018-09-05 19:43:55
【问题描述】:

我正在尝试解析来自所有 OpenStack 服务的日志并将其以 JSON 格式发送到 S3。

我能够解析这种多行格式的日志。

<source>
  @type tail
  path /var/log/nova/nova-api.log
  tag nova
  format multiline
  format_firstline /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d{3,6})? [^ ]* [^ ]* [^ ]*/
  format1 /(?<DateTime>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})(\.\d{3,6})? (?<pid>[^ ]*) (?<loglevel>[^ ]*) (?<class>[^ ]*) (\[(?<context>[^\]]*)\])? (?<message>.*)/
  time_format %F %T.%L
</source>

解析这种类型的日志

2018-09-05 12:34:01.451 3212169 INFO nova.osapi_compute.wsgi.server [req-0f15c395-5962-4a14-ba7a-730f86d6eb7e f1ab53782de846798920050941f3bcff f5d0c8e495cd4793814f8b979693ac17 - default default] 192.168.1.1 "GET /v2.1/os-services HTTP/1.1" status: 200 len: 1435 time: 0.0372221

还有这种类型

2018-09-05 12:34:33.631 2813186 INFO nova.api.openstack.placement.requestlog [req-d4573763-4521-419f-a4ba-c489a7e17ea9 fba548d81cd6480b90940a89e00f4133 6ba1bbedb40c411e9482128150886ba6 - default default] 192.168.1.1 "DELETE /allocations/196db945-0089-40ae-8108-a950fb453296" status: 204 len: 0 microversion: 1.0
AH01626: authorization result of Require all granted: granted
AH01626: authorization result of <RequireAny>: granted
AH01626: authorization result of Require all granted: granted
AH01626: authorization result of <RequireAny>: granted
2018-09-05 12:34:37.737 2813187 INFO nova.api.openstack.placement.requestlog [req-08b8b3e4-6981-4cd4-b90b-c922b7002b28 fba548d81cd6480b90940a89e00f4133 6ba1bbedb40c411e9482128150886ba6 - default default] 192.168.1.1 "GET /allocation_candidates?limit=1000&resources=CUSTOM_Z270_A%3A1" status: 200 len: 473 microversion: 1.17

进入这个

Fluentular Demo

我正在尝试使用此获取 ip、request_type 路径和状态

(?<DateTime>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})(\.\d{3,6})? (?<pid>[^ ]*) (?<loglevel>[^ ]*) (?<class>[^ ]*) (\[(?<context>[^\]]*)\]) (?<ip>[[\d+\.]*) \"(?<http_request_type>[^ \"]+) (?<http_request_path>[^\"]+)\" status\: (?<http_status_code>[^ ]+) (?<message>.*)

在此处查看演示。

Regex101 Demo

在 regex101 中完美运行,但 td-agent 因此错误而失败

[error]: config error file="/etc/td-agent/td-agent.conf" error_class=Fluent::ConfigError error="Invalid regexp in format1: premature end of char-class: /(?<DateTime>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})(\\.\\d{3,6})? (?<pid>[^ ]*) (?<loglevel>[^ ]*) (?<class>[^ ]*) (\\[(?<context>[^\\]]*)\\]) (?<ip>[[\\d+\\.]*) \\\"(?<http_request_type>[^ \\\"]+) (?<http_request_path>[^\\\"]+)\\\" status\\: (?<http_status_code>[^ ]+) (?<message>.*)/m

【问题讨论】:

  • 看起来像是逃逸的问题,你能显示实际的代码吗?
  • 这是失败的模式 @type tail path /var/log/nova/nova-api.log tag nova format multiline format_firstline /\d{4}-\d{2 }-\d{2} \d{2}:\d{2}:\d{2}(\.\d{3,6})? [^ ]* [^ ]* [^ ]*/ format1 /(?\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\ d{2})(\.\d{3,6})? (?[^ ]*) (?[^ ]*) (?[^ ]*) ([(?[^]]*)]) (? [[\d+\.]*) \"(?[^ \"]+) (?[^\"]+)\" status\: (?[^ ]+) (?.*)/time_format %F %T.%L

标签: ruby regex openstack fluentd


【解决方案1】:

尝试在线转义您的 xml,如下所示:https://www.freeformatter.com/xml-escape.html 或将 @ 替换为 &amp;amp;

【讨论】:

  • 我没有要解析的 XML 数据,它只是日志数据,像这样 2018-09-05 12:34:01.451 3212169 INFO nova.osapi_compute.wsgi.server [req-0f15c395 -5962-4A14-BA7A-730F86D6EB7E F1AB53782DE846798920050945CD4793814F8CD4793814F8CD4793814C17 - 默认默认值为192.168.1.1“GET / LV2.1/OSSERVERS HTTP / 1.1”状态:200 LEN:1435时间:0.0372221 SPAN>
【解决方案2】:

问题是匹配组 ip 中有一个额外的方括号。正确的模式是。

(?<DateTime>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})(\.\d{3,6})? (?<pid>[^ ]*) (?<loglevel>[^ ]*) (?<class>[^ ]*) (\[(?<context>[^\]]*)\])? (?<ip>[\d+\.]*) \"(?<http_request_type>[^ \"]+) (?<http_request_path>[^\"]+)\" status\: (?<http_status_code>[^ ]+) (?<message>.*)

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多