官方文档:
logstash+elasticsearch+kibana 有docker-compose的组合安装套件,安装十分简单 ELK套件。git拉下代码后直接docker-compose up 自动下载镜像并启动。
参考配置:filebeat所有配置项
filebeat.yml
# 输入配置,可以有多个输入源
filebeat.inputs:
- type: log
# 监听文件路径,**代表匹配多层路径,好像最多8层。
paths:
- '/data/**/console.log'
# 多行配置,可以将多行合并,处理一些不在一行输出的日志。比如java的堆栈信息。
multiline.type: pattern
# 匹配正则表达式。含义:以 'go:32' 结尾或者以 '[' 开头的作为一个事件。
multiline.pattern: '(^.*go:[0-9]*$)|(^\[)'
# 是否取反
multiline.negate: false
# 多行规则,after后面附上, before前面的附上
multiline.match: after
# 最大行数,默认500
multiline.max_lines: 5
# 事件时间限制,超时不再等待,默认5s.
#multiline.timeout: 5s
# Do not add new line character when concatenating lines.
#multiline.skip_newline: true
- type: log
paths:
- '/data/**/*.log'
# 排除文件列表,正则表达。含义:排除以stat.log和以console.log结尾的文件
exclude_files: ['stat.log$','console.log$']
# 排除以DBG开头的行
#exclude_lines: ['^DBG']
# 只收集以ERR或WARN开头的行
#include_lines: ['^ERR', '^WARN']
# 添加字段,默认这个写字段加载field字段下
#fields:
# level: debug
# review: 1
# 将字段加载root下
#fields_under_root: false
# 输出配置
output.logstash:
hosts: ["127.0.0.1:5044"]
logstash/pipeline/logstash.conf
input {
# 默认配置
beats {
port => 5044
}
tcp {
port => 5000
}
}
## Add your filters / logstash plugins configuration here
filter {
# 删除log.file.path中包含stat.log的数据。log.file.path中存储着filebeat的源文件路径
if ("stat.log" in [log][file][path]) {
drop {}
}
# 修改字段
mutate {
# 添加一个字段:input-type,值为 agent.type和input.type值的组合。形如filebeat-log
add_field => { "input-type" => "%{[agent][type]}-%{[input][type]}" }
# 移除一些不用的字段
remove_field => ["agent","ecs","tags","input","host"]
}
# 配置json解析
json{
# 存有json的数据源
source => "message"
# 跳过json不能解析的数据
skip_on_invalid_json => true
# 输出的json根字段。
target => "json"
}
# 根据路径筛选,在es中存于不同的index。
# @metadata字段添加的字段不会存入es,相当于临时变量。
# {+YYYY.MM} 根据需要也可以是 {+YYYY.MM.dd}
if "gateway" in [log][file][path]{
mutate { add_field => { "[@metadata][target_index]" => "gateway-service-%{+YYYY.MM}" } }
}
else if "swagger" in [log][file][path]{
mutate { add_field => { "[@metadata][target_index]" => "swagger-service-%{+YYYY.MM}" } }
}
else if "auth-service" in [log][file][path] {
mutate { add_field => { "[@metadata][target_index]" => "auth-service-%{+YYYY.MM}" } }
# 还有其他的仿照添加即可
}else {
mutate { add_field => { "[@metadata][target_index]" => "other-service-%{+YYYY.MM}" } }
}
}
output {
elasticsearch{
index => "%{[@metadata][target_index]}"
hosts => ["elasticsearch:9200"]
}
}