ELK stack技术篇之filebeat如何对应多个redis key键

ELK stack技术篇之filebeat如何对应多个redis key键

背锅侠的我又来了,今天继续ELK技术篇我们来谈谈标题的这个问题,相信很多人都遇到过并且现在ELK stack已经是6.0 版本了他跟5.0版本的支持方式还是有差别的呦

我们之前使用filebeat过程中可能一台机器上只有一个日志需要收集,此时我们的filebeat只需要收集这一个日志,那么redis中存储的就一个key值.如果我们有多个日志呢?redis如何使用多个key呢?下面我们就来看看吧

注释: 我们主要是根据log的字段以及类型来实现多个键值,filebeat还提供了when.contains,条件判断这里我们先不谈有疑问的同学可以在下方留言,如果你需要更多的条件判断

接下来我们就来谈谈filebeat中的redis.output中的keys字段,这里我们先讲新版本的filebeat6.X是如何实现的

判断依据:主要是根据log类型在6.X版本中我们使用fields字段来指定不同的log类型下面先上一个截图

ELK stack技术篇之filebeat如何对应多个redis key键

新增一个fields字段,service : tomcat_gateway都是自己定义的,定义完成后使用Logstash的if 判断,条件为if [fields][service] == "tomcat_gateway"即可,那么如何指定到多个redis key呢?

废话不多说,直接上代码

filebeat截图配置:

output.redis:
hosts: ["localhost"]
key: "default_list"
keys:
- key: "info_list" # send to info_list if `message` field contains INFO
when.contains:
message: "INFO"
- key: "debug_list" # send to debug_list if `message` field contains DEBUG
when.contains:
message: "DEBUG"
- key: "%{[fields.service]}"
mappings:
tomcat_gateway: "你的redis自定义key"

logstash 截图配置

ELK stack技术篇之filebeat如何对应多个redis key键

看到了么只需要一个mappings就可以实现喽!

那么在5.X版本中呢,你们应该知道了我们使用的是document_type字段那么这个字段怎么对应多个redis key键呢?

还是那句话直接上代码:

logstash配置:

output {
stdout { codec => rubydebug }
if ( [type] == "message-sms" ) {
elasticsearch {
index => "message-sms-%{+YYYY-MM-dd}"
hosts => ["172.31.225.217:9200"]
user => elastic
password => "xxxxxxxx"
}
}
if ( [type] == "message-center" ) {
elasticsearch {
index => "message-center-%{+YYYY-MM-dd}"
hosts => ["172.31.225.217:9200"]
user => elastic
password => "xxxxxxxxxx"
}
}
}

filebeat配置

output.redis:
hosts: ["localhost"]
key: "default_list"
keys:
- key: "info_list" # send to info_list if `message` field contains INFO
when.contains:
message: "INFO"
- key: "debug_list" # send to debug_list if `message` field contains DEBUG
when.contains:
message: "DEBUG"
- key: "%{[type]}"

mapping:
"tomcat_gateway": "你的redis key名称"


分享到:


相關文章: