起因: 项目需要日志可视化,最终选型ELK。
考虑多种原因,起初使用框架是ES+Kibana+Filebeat+Logback。
问题:
一、Filebeat成功监控到日志后,不创建index,在Kibana无法可视化搜索。
原因:配置文件不正确,在网上查找资料,东西很多,但是均找不到问题根源,后来自己找了一段时间,发现原因。以下是目前阶段正确显示配置,因为无法切割日志(下文详写),后加入LogStash。
filebeat.inputs:
- type: log
enabled: true
# 配置filebeat日志扫描路径
paths:
- /Users/xxx/Desktop/log/*.log
# 跨行读取
multiline.pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]'
multiline.negate: true
multiline.match: after
setup.template.name: "my-log"
setup.template.pattern: "my-log-*"
setup.ilm.enabled: false
#output.elasticsearch:
# enabled: true
# hosts: ["localhost:9200"]
# index: "log-%{+yyyy.MM.dd}"
# logstash output
# 将日志输出到logstash
output.logstash:
hosts: ["127.0.0.1:5044"]
二、 在没有使用logstash时,日志无法切割,导致无法达到可视化要求。
解决:加入Logstash, 使用filter mutate分割日志。
#要分割的日志 举例: 192.168.1.11 /aa/bb POST Mozilla/5.0
Logstash config配置(如果没有,自己创建):
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
# 输入流为filebeat,port为beat端口号
beats {
port => 5044
type => "log"
}
}
filter {
# 日志分割,filebeat输入到logstash的信息在message里面
mutate {
split => ["message", " "]
# 在ES中添加字段,名字为RequestIp, 值是Message分割数组后的第一个
add_field => {
"requestIp" => "%{[message][0]}"
}
add_field => {
"url" => "%{[message][1]}"
}
add_field => {
"method" => "%{[message][2]}"
}
add_field => {
"device" => "%{[message][3]}"
}
}
}
output {
elasticsearch {
# 输出到ES
hosts => ["http://127.0.0.1:9200"]
# 生成的索引名
index => "logstash-%{+YYYY.MM.dd}"
}
}
这样配置后,ES中正常写入索引字段。
三、一些启动的时候遇到的小问题
由于本人用的mac 在使用命令filebeat -e -c filebeat.yml启动filebeat的时候,无法读取到配置文件,后面在配置文件加上路径即可,启动logstash -c xxx.conf同样的操作。
最终效果:
如有不正,感谢指出!



