我有以下 Logstash 设置。
日志通过以下方式从 Logspout 传输到 Logstash:logspout-logstash适配器,它在日志消息中添加了几个字段,即docker.image
字段。
我可以提取日志,但解析它们时遇到了麻烦。我想根据 Docker 镜像字段制作一些过滤器,下面我尝试解析和匹配nginx
完整 Docker 镜像中的部分内容,这类似于dockerhubuser/nginx:tag
。
但是我的配置有问题,因为标签看起来不像是被创建的,消息字段看起来也不像被解析的。
以下是我目前的配置内容:
input {
# Logspout UDP input
udp {
port => 5000
type => logspout
codec => json
}
}
filter {
# Nginx access logs
if [docker.image] =~ /nginx/ {
grok {
match => [ "message", "%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:agent}" ]
add_tag => [ "nginx" ]
}
}
}
正则表达式不匹配吗?有没有办法检查日志是否符合我的过滤器?
答案1
我找到了解决方案。要访问 logstash 配置中的嵌套字段,我必须使用[docker][image]
。因此,固定配置如下所示:
if [docker][image] =~ /nginx/ {
grok {
match => [ "message", "%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:agent}" ]
add_tag => [ "nginx" ]
}
}