基于 Go 語言開發(fā)的監(jiān)控系統(tǒng)
?1.介紹
小米開源的監(jiān)控系統(tǒng) open-falcon 和滴滴開源的日志采集工具 falcon-log-agent 作為一組黃金搭檔,被互聯(lián)網(wǎng)公司廣泛使用。
本文介紹怎么使用這組黃金搭檔監(jiān)控業(yè)務(wù)系統(tǒng)的日志。
2.open-falcon
open-falcon 使用 Golang 和 Python 開發(fā),其中 Python 主要開發(fā)的是 Dashboard。
限于篇幅,本文不準備介紹 open-falcon 的原理,僅介紹如何安裝。
安裝 open-falcon 之前,必須確保已成功安裝 Redis 和 MySQL,因為 open-falcon 需要使用這兩個存儲組件。
同時,我們還需要確保已成功安裝 Golang 和 Python。
需要注意的是,我們還需要確保已設(shè)置 $GOPATH 和 $GOROOT 環(huán)境變量(也可以使用默認值)。
安裝 open-falcon :
下載源碼和初始化數(shù)據(jù)庫
mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git
cd $GOPATH/src/github.com/open-falcon/falcon-plus/scripts/mysql/db_schema/
# 初始化數(shù)據(jù)庫
mysql -h 127.0.0.1 -u root -p < 1_uic-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 2_portal-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 3_dashboard-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 4_graph-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 5_alarms-db-schema.sql
編譯
cd $GOPATH/src/github.com/open-falcon/falcon-plus/
# make all modules
make all
# make specified module
make agent
# pack all modules
make pack
在執(zhí)行 make pack? 之后,我們得到一個壓縮包 open-falcon-vx.x.x.tar.gzmake pack 之后,我們得到一個壓縮包 open-falcon-vx.x.x.tar.gz
如果我們想要修改每個模塊的配置文件,在執(zhí)行 make pack? 之前,我們可以修改模塊的 config/xxx.jsonmake pack 之前,我們可以修改模塊的 config/xxx.json
需要注意的是,模塊的配置文件中,MySQL 的賬號和密碼,默認分別是 root 和空,如果我們的 MySQL 賬號和密碼與之不同,我們需要編輯模塊的配置文件進行修改。root 和空,如果我們的 MySQL 賬號和密碼與之不同,我們需要編輯模塊的配置文件進行修改。
部署
我們可以將得到的壓縮包解壓縮到指定目錄進行部署,例如:
make ~/open-falcon
tar -zxvf open-falcon-vx.x.x.tar.gz -C ~/open-falcon
啟動所有模塊
cd ~/open-falcon
./open-falcon start
# 檢查模塊狀態(tài)
./open-falcon check
安裝儀表盤
在安裝 Dashboard 之前,我們需要先安裝依賴項:
# Centos
yum install -y python-virtualenv
yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools"
# Ubuntu
apt-get install -y python-virtualenv
apt-get install -y slapd ldap-utils
apt-get install -y libmysqld-dev
apt-get install -y build-essential
apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev
安裝 Dashboard:
cd ~/open-falcon
git clone https://github.com/open-falcon/dashboard.git
cd dashboard
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt
需要注意的是,這里有一個 Bug,會導致無法在儀表盤注冊賬號(點擊按鈕無反應(yīng)),需要將 falcon api 的端口號 18080? 改為 8080。18080 改為 8080。
cd ~/open-falcon/dashboard
vim rrd/config.py
# 端口 18080 改為 8080
API_ADDR = os.environ.get("API_ADDR","http://81.70.201.193:8080/api/v1")
在啟動 Dashboard 之前,我們再檢查一下 open-falcon 的 api 模塊是否已啟動:
cd ~/open-falcon
./open-falcon check
啟動 Dashboard:
$ cd ~/open-falcon/dashboard
$ ./control start
在瀏覽器中,打開 http://127.0.0.1:8081。http://127.0.0.1:8081。
3.falcon-log-agent
falcon-log-agent 不同于 ELK,它不是日志查看系統(tǒng),而是日志計算系統(tǒng)。
它通過外掛式的日志采集方式,實時讀取日志文件中的內(nèi)容,實時計算,并將計算結(jié)果直接推送到 open-falcon。
它有幾個限定條件,分別是要求日志必須包含時間,不支持文件軟鏈接,日志時間必須有序。
安裝 falcon-log-agent:
構(gòu)建
make -p $GOPATH/src/github.com/didi && cd $_
git clone https://github.com/didi/falcon-log-agent.git
make build
修改配置文件
cd $GOPATH/src/github.com/didi/falcon-log-agent
cp cfg/dev.cfg cfg/cfg.json # 基礎(chǔ)配置
cp cfg/strategy.dev.json cfg/strategy.json # 策略配置
部署
cd $GOPATH/src/github.com/didi/falcon-log-agent
make pack
mkdir ~/open-falcon/falcon-log-agent
tar -zxvf falcon-log-agent.tar.gz -C ~/open-falcon/falcon-log-agent
啟動
cd ~/open-falcon/falcon-log-agent
./control start
檢查
- http://ip:8003/health 健康檢查
- http://ip:8003/strategt 查看生效策略
策略配置示例:
本文以 open-falcon 的 agent 模塊的日志為例,介紹怎么配置一個新策略。
[
{
"id":10, # 多個策略,id 必須唯一
"name":"agent send data count", # 對應(yīng) open-falcon 中的 metric(監(jiān)控項)
"file_path":"/root/open-falcon/agent/logs/agent.log", # 日志路徑(支持動態(tài)路徑)
"time_format":"yyyy/mm/dd HH:MM:SS", # 時間格式
"pattern":"Total=(\\d+)", # 匹配正則表達式
"exclude":"", # 排除正則表達式
"step":60, # 日志采集周期,單位秒
"tags":{}, 對應(yīng) open-falcon 中的 tag
"func":"cnt", # 日志采集方式,cnt、avg、sum、max、min
"degree":6, # 精度
"comment":"", # 備注
"parse_succ":true
}
]
重啟 falcon-log-agent,我們在 Dashboard 中的 Couters 列表中可以看到 agent send data count。agent send data count。
4.監(jiān)控配置
我們介紹完 open-falcon 和 falcon-log-agent 的安裝和啟動。
已實現(xiàn)自動采集日志并將計算數(shù)據(jù)上報到 open-falcon,接下來,我們介紹針對日志數(shù)據(jù)怎么配置監(jiān)控。
監(jiān)控配置操作步驟:
- 創(chuàng)建用戶組。
- 創(chuàng)建模板。
- 添加策略,其中 metric 對應(yīng) falcon-log-agent 策略配置文件中配置項的 name,max 是最大報警次數(shù),P 是報警級別(<3:既發(fā)短信也發(fā)郵件,>=3:只發(fā)郵件),run 是策略生效時間(不填寫代表全天生效),if 代表條件。告警條件支持函數(shù)如下:
告警條件支持函數(shù)如下:
all(#3) 最新 3 個點都滿足閾值條件則報警。
max(#3) 最新 3 個點,最大值滿足閾值條件則報警。
min(#3) 最新 3 個點,最小值滿足閾值條件則報警。
sum(#3) 最新 3 個點,其和滿足閾值條件則報警。
avg(#3) 最新 3 個點,其平均值滿足閾值條件則報警。
diff(#3) 將最新 push 過來的點(被減數(shù)),與歷史最新 3 個點(減數(shù))相減,得到 3 個差,有一個差滿足閾值條件則報警。
pdiff(#3) 將最新 push 過來的點(被減數(shù)),與歷史最新 3 個點(減數(shù))相減,得到 3 個差,再將 3 個差值分別除以減數(shù),得到 3 個商值,有一個商值滿足閾值條件則報警。
lookup(#2,3) 最新的 3 個點中有 2 個滿足閾值條件則報警。
- 配置報警接收用戶組。
5.總結(jié)
本文我們介紹了基于 Go 語言開發(fā)的開源監(jiān)控系統(tǒng)和日志采集工具的安裝和使用方式。
建議讀者朋友們動手操作一遍,需要注意的是,盡量嚴格按照本文的目錄結(jié)構(gòu)操作。
參考資料:
https://github.com/open-falcon/falcon-plus
https://github.com/open-falcon/dashboard
https://github.com/didi/falcon-log-agent