我有以下情况:
FileBeat ---->卡夫卡-----> Logstash ----->弹性----> Kibana
在Filebeat中,我在YML文件中有2个探矿者,。我添加了一些字段来识别日志数据。 但问题是:Logstash中的我无法验证此字段。
配置文件是:
1。 filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /opt/jboss/server.log*
tags: ["log_server"]
fields:
environment: integracion
log_type: log_server
document_type: log_server
fields_under_root: true
- input_type: log
paths:
- /var/todo1_apps/ebanTX.log*
tags: ["log_eban"]
fields:
environment: integracion
log_type: log_ebanking
document_type: log_ebanking
fields_under_root: true
output.kafka:
enabled: true
hosts: ["192.168.105.68:9092"]
topic: "sve_logs"
timeout: 30s
2。 logstash.conf
input {
kafka {
bootstrap_servers => "192.xxx.xxx.xxx:9092"
group_id => "sve_banistmo"
topics => ["sve_logs"]
decorate_events => true
codec => "plain"
}
}
filter {
if [type] == "log_ebanking" {
grok {
patterns_dir => ["patterns/patterns"]
match => { "message" => "%{TIMESTAMP_ISO8601:logdate}%{SPACE}%{LOGLEVEL:level}%{SPACE}\[%{DATA:thread}]%{SPACE}-%{SPACE}%{GREEDYDATA:message_log}" }
}
}
}
output {
if [type] == "log_ebanking" {
elasticsearch {
hosts => ["192.168.105.67:9200"]
index => "sve-banistmo-ebanking-%{+YYYY.MM.dd}"
}
stdout { codec => json}
}
}
问题出在条件过滤器和输出部分。我试过
@[metadata][type]
@metadata][type]
@metadata.type
metadata.type
[type]
同时包含type和log_type变量。什么都行不通!! :S 如果我不放置条件,数据流没有问题。我的意思是,这不是一个连接问题。
请帮帮我。我已经审核了所有相关的信息,但就我而言,条件无效。
提前致谢
Dario R
答案 0 :(得分:1)
使用codec => "json"
从logstash.conf
kafka输入conf中提取消息中的所有字段。
答案 1 :(得分:0)
问题是来自kafka的消息未被解码。 Logstash将把filebeat报告的整个json消息作为消息。 您可以添加json过滤器来解码json格式的消息。
filter {
json {
source => "message"
}
}
字段将被解码。消息字段将替换为真实消息,而不是整个json字符串。
然后你可以在条件块中使用[type]。 使用kafka作为输出时,filebeat不会报告@metadata。所以你看不到@metadata。
答案 2 :(得分:0)
之前和Kafka一起经历过这个! 以下是我为使其发挥作用所采取的步骤:
codec => "json"
现在您的输出我看到您正在添加" log_type"对于filebeat中的事件,我建议您在LS输出插件中if "log_ebanking" == [log_type]
。
字段[type]
默认为"日志"对于filebeat和" metricsets"用于所有事件的metricbeat。
不确定您的Filebeat版本是什么,但请注意这一点,因为https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html#filebeat-document-type
中不推荐使用document_type
答案 3 :(得分:0)
您可以通过以下方式访问自定义字段:
if [kafka][fields][log_type] == "nginx_access" {
grok {
patterns_dir => "/etc/logstash/patterns"
match => { "message" => "%{nginx_access}" }
}
}