[elk]基於elk的業務日誌格式設計

df007df發表於2019-02-16

背景

php專案,業務監控為0,需要搭建一套日誌檢視,閥值告警等功能的監控系統。撒都不用說,直接上ELK。

我們跳過搭建過程(網上太多了)。
通過docker搭建好了elk那一套(明顯單機版),我要監控測試和線上,所以是個多采集的環境,使用了官方推薦的最新的filebeat就行log聚合,格式化還是在master用logstash。


需求

業務需求並不是很多,因為是在初期,等團隊使用熟練後,業務日誌會接入更多(專案決定)。

現在能想到的需求:

  • php執行錯誤和異常

  • api和頁面執行效能

  • mysql慢查

本人已盡對專案程式碼進行改造,執行時發生的所有異常和error都會通過json格式寫入在本地日誌目錄中,關鍵就看怎麼定義格式了滿足上面的一些需求了


思路

直接講結果吧:

  • php執行錯誤和異常

    • 異常資訊,時間,具體內容

    • 錯誤資訊,時間,具體內容

  • api和頁面執行效能

    • 訪問的api地址,執行時間等

    • 訪問的page地址,執行時間等

  • mysql慢查

    • 當前執行慢的sql, 引數(去除敏感資訊)

從上面大致需要的監控需求來說,會發現很多共同點或者說是共有資訊欄位,比如:訪問的模組,訪問的路由,訪問的使用者,訪問的哪種型別,子型別等

考慮下上面的這些問題,大體上我們就能設計出滿足這些需求的通用日誌格式了:

格式說明:

欄位 型別 es not_analyzed 備註
sid string ture uuid
time data ture log生成時間
level string ture log等級
msg string ture 資訊簡要
app string ture 專案名稱
group string ture 日誌一級分類
object string ture 日誌二級分類
host string ture host
client string ture client
status number ture 狀態碼
elapsed number ture 執行毫秒
error string ture 錯誤的完整資訊
url string ture
route string ture

例子:

php錯誤

group: php_error
msg: 錯誤標題
error:錯誤完整的內容,大家可自行定義

php異常

group: exception
msg: 異常標題
error:異常完整的內容,大家可自行定義

api,page 訪問效能

group: api
elapsed : 100.123 (毫秒)
url: 具體url
route: 路由(聚合分類用)

mysql慢查詢

group: data
object: slow_query
url: 具體url
error: 慢差的完整資訊,包括sql,params等

格式意見定義好了,滿足了之前的設計需求。
具體如何通過定義好的格式去在kibana上進行視覺化,熟悉的朋友應該能有個思路了,具體就不在這展開了。


最後

日記接入成功後,接下來只要封裝好呼叫的方法即可。
後面專案上還需要接入

  • 佇列日誌

  • 非同步事務日誌

具體實現思路敬請期待後面的文章。

相關文章