open-falcon
open-falcon 是小米公司開源的一款監控服務。
一.安裝open-falcon 後臺
1.redis安裝與配置
yum -y install redis
2.mysql安裝及配置
初始化mysql
cd /tmp/ && git clone https://github.com/open-falcon/falcon-plus.git
cd /tmp/falcon-plus/scripts/mysql/db_schema/
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
rm -rf /tmp/falcon-plus/
3.下載open-falcon後端的二進制包 並配置
wget https://github.com/open-falcon/falcon-plus/releases/download/v0.2.1/open-falcon-v0.2.1.tar.gz
vim /etc/profile
export FALCON_HOME=/home/work
export WORKSPACE=$FALCON_HOME/open-falcon
mkdir -p $WORKSPACE
tar -xzvf open-falcon-v0.2.1.tar.gz -C $WORKSPACE
修改密碼,將下列的real_user 和 real_passwd 換成真正的mysql用戶和密碼。
cd $WORKSPACE
grep -Ilr 3306 ./ | xargs -n1 -- sed -i 's/root:/real_user:real_password/g'
後端服務啓動:
./open-falcon start
[falcon-graph] 88169
[falcon-hbs] 88183
[falcon-judge] 88195
[falcon-transfer] 88204
[falcon-nodata] 88213
[falcon-aggregator] 88223
[falcon-agent] 88234
[falcon-gateway] 88243
[falcon-api] 88251
[falcon-alarm] 88265
注:如果啓動不起來,請檢查連接數據庫的是否正常,一般來講,mysql8之類的高版本對登陸十分苛刻,需要新建用戶連接。
4.安裝配置open-falcon前端服務
cd $WORKSPACE
git clone https://github.com/open-falcon/dashboard.git
cd $WORKSPACE/dashboard/
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
啓動
以開發者模式啓動
./env/bin/python wsgi.py
在生產環境啓動
bash control start
在瀏覽器上輸入localhost:8081 即可訪問。
至此,一個open-falcon 的監控後臺已經搭建完成,如果需要監控其他的機器那麼就需要安裝falcon-agent。
二.open-falcon 各組件
2.1 agent
agent用於採集機器負載監控指標,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push給Transfer。agent與Transfer建立了長連接,數據發送速度比較快,agent提供了一個http接口/v1/push用於接收用戶手工push的一些數據,然後通過長連接迅速轉發給Transfer。
agent 組件就是 open-falcon 的agent 目錄。其配置文件如下:
{
"debug": true, # 控制一些debug信息的輸出,生產環境通常設置爲false
"hostname": "", # agent採集了數據發給transfer,endpoint就設置爲了hostname,默認通過`hostname`獲取,如果配置中配置了hostname,就用配置中的
"ip": "", # agent與hbs心跳的時候會把自己的ip地址發給hbs,agent會自動探測本機ip,如果不想讓agent自動探測,可以手工修改該配置
"plugin": {
"enabled": false, # 默認不開啓插件機制
"dir": "./plugin", # 把放置插件腳本的git repo clone到這個目錄
"git": "https://github.com/open-falcon/plugin.git", # 放置插件腳本的git repo地址
"logs": "./logs" # 插件執行的log,如果插件執行有問題,可以去這個目錄看log
},
"heartbeat": {
"enabled": true, # 此處enabled要設置爲true
"addr": "127.0.0.1:6030", # hbs的地址,端口是hbs的rpc端口
"interval": 60, # 心跳週期,單位是秒
"timeout": 1000 # 連接hbs的超時時間,單位是毫秒
},
"transfer": {
"enabled": true,
"addrs": [
"127.0.0.1:18433"
], # transfer的地址,端口是transfer的rpc端口, 可以支持寫多個transfer的地址,agent會保證HA
"interval": 60, # 採集週期,單位是秒,即agent一分鐘採集一次數據發給transfer
"timeout": 1000 # 連接transfer的超時時間,單位是毫秒
},
"http": {
"enabled": true, # 是否要監聽http端口
"listen": ":1988",
"backdoor": false
},
"collector": {
"ifacePrefix": ["eth", "em"], # 默認配置只會採集網卡名稱前綴是eth、em的網卡流量,配置爲空就會採集所有的,lo的也會採集。可以從/proc/net/dev看到各個網卡的流量信息
"mountPoint": []
},
"default_tags": {
},
"ignore": { # 默認採集了200多個metric,可以通過ignore設置爲不採集
"cpu.busy": true,
"df.bytes.free": true,
"df.bytes.total": true,
"df.bytes.used": true,
"df.bytes.used.percent": true,
"df.inodes.total": true,
"df.inodes.free": true,
"df.inodes.used": true,
"df.inodes.used.percent": true,
"mem.memtotal": true,
"mem.memused": true,
"mem.memused.percent": true,
"mem.memfree": true,
"mem.swaptotal": true,
"mem.swapused": true,
"mem.swapfree": true
}
}
數據採集來源:
1.機器的指標,如cpu,網卡,磁盤,內存。
2.業務監控指標,比如某個接口調用的latency
3.開源軟件的監控如MySQL,Nginx,Redis。
2.2 Transfer
transfer是數據轉發服務。它接收agent上報的數據,然後按照哈希規則進行數據分片、並將分片後的數據分別push給graph&judge等組件。
2.3 Graph
graph是存儲繪圖數據的組件。graph組件 接收transfer組件推送上來的監控數據,同時處理api組件的查詢請求、返回繪圖數據。
2.4 API
api組件,提供統一的restAPI操作接口。比如:api組件接收查詢請求,根據一致性哈希算法去相應的graph實例查詢不同metric的數據,然後彙總拿到的數據,最後統一返回給用戶。
2.5 Judge
Judge用於告警判斷,agent將數據push給Transfer,Transfer不但會轉發給Graph組件來繪圖,還會轉發給Judge用於判斷是否觸發告警。
2.6 Alarm
alarm模塊是處理報警event的,judge產生的報警event寫入redis,alarm從redis讀取處理,並進行不同渠道的發送。
2.7 Nodata
nodata用於檢測監控數據的上報異常。nodata和實時報警judge模塊協同工作,過程爲: 配置了nodata的採集項超時未上報數據,nodata生成一條默認的模擬數據;用戶配置相應的報警策略,收到mock數據就產生報警。採集項上報異常檢測,作爲judge模塊的一個必要補充,能夠使judge的實時報警功能更加可靠、完善。
2.8 Aggregator
集羣聚合模塊。聚合某集羣下的所有機器的某個指標的值,提供一種集羣視角的監控體驗。
三.自定義push監控數據
python 實現
#!-*- coding:utf8 -*-
import requests
import time
import json
ts = int(time.time())
payload = [
{
"endpoint": "test-endpoint",
"metric": "test-metric",
"timestamp": ts,
"step": 60,
"value": 1,
"counterType": "GAUGE",
"tags": "idc=lg,loc=beijing",
},
{
"endpoint": "test-endpoint",
"metric": "test-metric2",
"timestamp": ts,
"step": 60,
"value": 2,
"counterType": "GAUGE",
"tags": "idc=lg,loc=beijing",
},
]
r = requests.post("http://127.0.0.1:1988/v1/push", data=json.dumps(payload))
print r.text
四.監控Mysql數據庫
MySQl 的監控數據採集可以通過mymon來做。
mymon 是一個cron,每一分鐘跑一次,配置文件中配置了數據庫的連接地址,mymon連到該數據庫,採集一些監控指標。比如global status,global variables,slave status 等等。
配置安裝:
go get -u github.com/open-falcon/mymon
cd $GOPATH/src/github.com/open-falcon/mymon
make
vim etc/myMon.cfg
endpoint=local_mysql
[mysql]
# 數據庫用戶名
user=root
# 您的數據庫密碼
password=
# 數據庫連接地址
host=127.0.0.1
# 數據庫端口
啓動方式,使用cron定時任務管理。
echo '* * * * * cd $GOPATH/src/github.com/open-falcon/mymon && ./mymon -c etc/myMon.cfg ' > /etc/cron.d/mymon