前邊有兩篇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配置展現應用程序的日誌了,方便開發及時發現問題,在線定位問題
若是你以爲文章對你有幫助,請轉發分享給更多的人。若是你以爲讀的不盡興,推薦閱讀如下文章: