logstash 没有从节拍中读取日志类型字段
logstash not reading logtype field from beats
我在一个节点上有 logstash filebeat 和 elasticsearch 运行。
我试图让 logstash 识别标记为 "syslog" 的日志并将它们转储到名为 "syslog" 的索引中,但它似乎看不到标签,因为它们都进入了"uncategorized"索引(我的catch all默认索引)
这是我的节拍配置
/etc/filebeat/filebeat.yml
filebeat:
prospectors:
-
paths:
- /var/log/messages
fields:
type: syslog
output:
logstash:
hosts: ["localhost:9901"]
这是我的 logstash 配置文件
/etc/logstash/conf.d/logstash_server_syslog.conf
input {
beats {
port => "9901"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
if [type] == "syslog" {
elasticsearch {
hosts => ["10.0.0.167:9200", "10.0.0.168:9200"]
index => "syslog"
}
} else {
elasticsearch {
hosts => ["10.0.0.167:9200", "10.0.0.168:9200"]
index => "uncategorized"
}
}
}
查看输出(带有 stdout{} 节)可以确认这一点,但我猜您错过了 the doc 的这一部分:
By default, the fields that you specify [in the 'fields' config'] will be grouped under a
fields sub-dictionary in the output document. To store the custom
fields as top-level fields, set the fields_under_root option to true.
使用 document_type
配置选项在 Filebeat 中设置自定义 type
字段。
filebeat:
prospectors:
- paths:
- /var/log/messages
document_type: syslog
这将设置 @metadata.type
字段以用于 Logstash,而自定义字段则不会。
我在一个节点上有 logstash filebeat 和 elasticsearch 运行。
我试图让 logstash 识别标记为 "syslog" 的日志并将它们转储到名为 "syslog" 的索引中,但它似乎看不到标签,因为它们都进入了"uncategorized"索引(我的catch all默认索引)
这是我的节拍配置
/etc/filebeat/filebeat.yml
filebeat:
prospectors:
-
paths:
- /var/log/messages
fields:
type: syslog
output:
logstash:
hosts: ["localhost:9901"]
这是我的 logstash 配置文件
/etc/logstash/conf.d/logstash_server_syslog.conf
input {
beats {
port => "9901"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
if [type] == "syslog" {
elasticsearch {
hosts => ["10.0.0.167:9200", "10.0.0.168:9200"]
index => "syslog"
}
} else {
elasticsearch {
hosts => ["10.0.0.167:9200", "10.0.0.168:9200"]
index => "uncategorized"
}
}
}
查看输出(带有 stdout{} 节)可以确认这一点,但我猜您错过了 the doc 的这一部分:
By default, the fields that you specify [in the 'fields' config'] will be grouped under a fields sub-dictionary in the output document. To store the custom fields as top-level fields, set the fields_under_root option to true.
使用 document_type
配置选项在 Filebeat 中设置自定义 type
字段。
filebeat:
prospectors:
- paths:
- /var/log/messages
document_type: syslog
这将设置 @metadata.type
字段以用于 Logstash,而自定义字段则不会。