ELK 日志收集配置实战
2020-05-09 本文已影响0人
国服最坑开发
0x00 关于ELK认识
- Logstash : 日志文件收集过滤,转格式, 并推送数据到 es
- ElasticSearch: 日志文件存储体,支持分词查询和检索, 是ELK的计算和存储核心
- Kibana: 前端数据展示
0x01 Logstash配置
根据前一篇的配置, 我们发现主要工作,都集中在Logstash.
而 Logstash 的配置,又是由各种插件组合配置完成.
先来看个配置文件:
input {
file {
path => ["/app/my-app/logs/info*.log"]
}
}
filter {
grok {
match => {
"message" => [
"%{DATA:timestamp}\s+\[INFO\s\]\s%{GREEDYDATA:log_json}"
]
}
}
mutate {
remove_field => ['_id', '_score', '_type', 'message']
}
json {
source => "log_json"
target => "json_content"
remove_field=> ["log_json"]
}
if "_grokparsefailure" in [tags] or "_jsonparsefailure" in [tags] {
drop { }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "push_report"
template_overwrite => true
}
}
- input : 指定输入的内容: 日志文件目录下
info*.log
- filter: 过滤器
- grok : 强大的正则过滤功能
- mutate: 可以对输出的字段进行调整
- json: 可以把日志里的字符串, 转换成 json对象
- output: 指定Logstash推送目的地: ES
关于正则表达的调试器(需梯子):
https://grokdebug.herokuapp.com/
0x02 已知问题
-
这种方案因为有JSON格式转换,实测CPU占用极高.
解决方案: 把检索KEY信息单独打印到日志里, 进行匹配后, 再推送到ES即可. -
关于ES日志删除
可以删除旧的日志文件, 防止 ES磁盘爆炸.
curl -X DELETE http://xx.xx.com:9200/logstash-*-`date +%Y-%m-%d -d "-$n days"`