前边有两篇ELK的文章分别介绍了MySQL慢日志收集和Nginx访问日志收集,那么各类不一样类型应用程序的日志该如何方便的进行收集呢?且看本文咱们是如何高效处理这个问题的java
规范的日志存放路径和输出格式将为咱们后续的收集和分析带来极大的方便,无需考虑各类不一样路径、格式的兼容问题,只须要针对固定几类日志作适配就能够了,具体的规范以下:web
日志存放路径规范spring
/data/logs/
目录下application.log
exception.log
和business.log
日志输出格式规范docker
日志信息级别规范数据库
日志级别 | 说明 | 数值 |
---|---|---|
debug | 调试日志,日志信息量最多 | 7 |
info | 通常信息日志,最经常使用的级别 | 6 |
notice | 最具备重要性的普通条件信息 | 5 |
warning | 警告级别 | 4 |
error | 错误级别,某个功能不能正常工做 | 3 |
critical | 严重级别,整个系统不能正常工做 | 2 |
alert | 须要马上修改的日志 | 1 |
emerg | 内核崩溃等严重信息 | 0 |
从上到下级别依次从低到高,日志量从多到少,正确选择日志级别帮助后期快速排查问题json
咱们通用日志采集方案以下图: bootstrap
Client端Filebeat配置bash
filebeat.prospectors:
- input_type: log
paths:
- /home/logs/app/business.log
- /home/logs/app/exception.log
json.message_key: log
json.keys_under_root: true
output.kafka:
hosts: ["10.82.9.202:9092","10.82.9.203:9092","10.82.9.204:9092"]
topic: filebeat_docker_java
复制代码
Kafka接收到的数据格式app
{"@timestamp":"2018-09-05T13:17:46.051Z","appname":"app01","beat":{"hostname":"52fc9bef4575","name":"52fc9bef4575","version":"5.4.0"},"classname":"com.domain.pay.service.ApiService","date":"2018-09-05 21:17:45.953+0800","filename":"ApiService.java","hostname":"172.17.0.2","level":"INFO","linenumber":285,"message":"param[{\"email\":\"TEST@163.COM\",\"claimeeIP\":\"123.191.2.75\",\"AccountName\":\"\"}]","source":"/home/logs/business.log","thread":"Thread-11","timestamp":1536153465953,"type":"log"}
复制代码
Server端Logstash配置运维
input {
kafka {
bootstrap_servers => "10.82.9.202:9092,10.82.9.203:9092,10.82.9.204:9092"
topics => ["filebeat_docker_java"]
}
}
filter {
json {
source => "message"
}
date {
match => ["timestamp","UNIX_MS"]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => ["10.82.9.205", "10.82.9.206", "10.82.9.207"]
index => "filebeat-docker-java-%{+YYYY.MM.dd}"
}
}
复制代码
都是基础配置很简单,不作过多解释,经过以上简单的配置就能实现任何应用程序的日志收集
收集日志到elasticsearch以后,就能够经过kibana配置展现应用程序的日志了,方便开发及时发现问题,在线定位问题
若是你以为文章对你有帮助,请转发分享给更多的人。若是你以为读的不尽兴,推荐阅读如下文章: