基于 Go 語言開發的監控系統
01?介紹
小米開源的監控系統 open-falcon 和滴滴開源的日志采集工具 falcon-log-agent 作為一組黃金搭檔,被互聯網公司廣泛使用。
本文介紹怎么使用這組黃金搭檔監控業務系統的日志。
02? open-falcon
open-falcon 使用 Golang 和 Python 開發,其中 Python 主要開發的是 Dashboard。
限于篇幅,本文不準備介紹 open-falcon 的原理,僅介紹如何安裝。
安裝 open-falcon 之前,必須確保已成功安裝 Redis 和 MySQL,因為 open-falcon 需要使用這兩個存儲組件。
同時,我們還需要確保已成功安裝 Golang 和 Python。
需要注意的是,我們還需要確保已設置?$GOPATH
?和?$GOROOT
?環境變量(也可以使用默認值)。
安裝 open-falcon :
下載源碼和初始化數據庫
編譯
在執行?make pack
?之后,我們得到一個壓縮包?open-falcon-vx.x.x.tar.gz
如果我們想要修改每個模塊的配置文件,在執行?make pack
?之前,我們可以修改模塊的?config/xxx.json
需要注意的是,模塊的配置文件中,MySQL 的賬號和密碼,默認分別是?root
?和空,如果我們的 MySQL 賬號和密碼與之不同,我們需要編輯模塊的配置文件進行修改。
部署
我們可以將得到的壓縮包解壓縮到指定目錄進行部署,例如:
啟動所有模塊
安裝儀表盤
在安裝 Dashboard 之前,我們需要先安裝依賴項:
安裝 Dashboard:
需要注意的是,這里有一個 Bug,會導致無法在儀表盤注冊賬號(點擊按鈕無反應),需要將?falcon api 的端口號?18080
?改為?8080
。
在啟動 Dashboard 之前,我們再檢查一下 open-falcon 的 api 模塊是否已啟動:
啟動 Dashboard:
在瀏覽器中,打開?http://127.0.0.1:8081
。
03?falcon-log-agent
falcon-log-agent 不同于 ELK,它不是日志查看系統,而是日志計算系統。
它通過外掛式的日志采集方式,實時讀取日志文件中的內容,實時計算,并將計算結果直接推送到 open-falcon。
它有幾個限定條件,分別是要求日志必須包含時間,不支持文件軟鏈接,日志時間必須有序。
安裝 falcon-log-agent:
構建
修改配置文件
部署
啟動
檢查
-
http://ip:8003/health
?健康檢查 -
http://ip:8003/strategt
?查看生效策略
策略配置示例:
本文以 open-falcon 的 agent 模塊的日志為例,介紹怎么配置一個新策略。
重啟 falcon-log-agent,我們在 Dashboard 中的 Couters 列表中可以看到?agent send data count
。
04?
監控配置
我們介紹完 open-falcon 和 falcon-log-agent 的安裝和啟動。
已實現自動采集日志并將計算數據上報到 open-falcon,接下來,我們介紹針對日志數據怎么配置監控。
監控配置操作步驟:
-
創建用戶組。 -
創建模板。 -
添加策略,其中 metric 對應 falcon-log-agent 策略配置文件中配置項的 name,max 是最大報警次數,P 是報警級別(<3:既發短信也發郵件,>=3:只發郵件),run 是策略生效時間(不填寫代表全天生效),if 代表條件。 告警條件支持函數如下:
-
all(#3) 最新 3 個點都滿足閾值條件則報警。 -
max(#3) 最新 3 個點,最大值滿足閾值條件則報警。 -
min(#3) 最新 3 個點,最小值滿足閾值條件則報警。 -
sum(#3) 最新 3 個點,其和滿足閾值條件則報警。 -
avg(#3) 最新 3 個點,其平均值滿足閾值條件則報警。 -
diff(#3) 將最新 push 過來的點(被減數),與歷史最新 3 個點(減數)相減,得到 3 個差,有一個差滿足閾值條件則報警。 -
pdiff(#3) 將最新 push 過來的點(被減數),與歷史最新 3 個點(減數)相減,得到 3 個差,再將 3 個差值分別除以減數,得到 3 個商值,有一個商值滿足閾值條件則報警。 -
lookup(#2,3) 最新的 3 個點中有 2 個滿足閾值條件則報警。
-
-
配置報警接收用戶組。
05?總結
本文我們介紹了基于 Go 語言開發的開源監控系統和日志采集工具的安裝和使用方式。
建議讀者朋友們動手操作一遍,需要注意的是,盡量嚴格按照本文的目錄結構操作。
原文鏈接:https://mp.weixin.qq.com/s/10DUiyIHSon3OZoYQy7VHg