在 td-agent.log 文件中,有人可以判断其是否能正常提出此错误吗?
2015-07-31 13:15:19 +0000 [warn]: pattern not match: "- - - [31/Jul/2015:13:15:19 +0000] GET http://172.31.108.218/ HTTP/1.1 200 0 \"-\" \"ELB-HealthChecker/1.0\""
虽然这是一个结构良好的apache2日志:
- - - [31/Jul/2015:13:15:19 +0000] GET http://172.31.108.218/ HTTP/1.1 200 0 \"-\" \"ELB-HealthChecker/1.0\"
这是源配置:
<source>
type tail
format apache2
path /var/log/varnish/varnishncsa.log
pos_file /var/log/td-agent/tmp/access.log.pos
tag "apache2.varnish-access"
</source>
我无法弄清楚上面的错误。
答案 0 :(得分:0)
问题是这些 ELB-HealthChecker 行日志有一个空的referer ip字段。然后日志与流畅的apache2日志格式不匹配。
因此解决这个问题的方法是使用 ELB-HealthChecker 用户代理过滤日志。
答案 1 :(得分:0)
您可以为自己的format
设置自己的<source>
type tail
format /^(?<host>[^ ]*(?:\s+[^ ]+)*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
time_format %d/%b/%Y:%H:%M:%S %z
path /var/log/apache2/access.log
pos_file /var/log/td-agent/apache2.pos
tag apache2.log
</source>
,而不是找到从ELB-HealthChecker过滤掉日志的方法,而是在前几个字段方面稍微灵活一点。从collectd获取/ server-status检查时遇到了同样的错误(使用它监视SignalFx)。
像这样设置源:
172.18.0.2:80 127.0.0.1 - - [08/Aug/2017:19:58:38 +0000] "GET /server-status?auto HTTP/1.1" 200 508 "-" "collectd/5.7.2.sfx0"
允许两个日志行:
192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0"
以及:
format
您可以使用Fluentular测试dependencies {
wearApp project(path: ':wear', configuration: 'productionRelease')
...
}
正则表达式匹配。