https://www.cnblogs.com/liangqihui/p/6618127.html
前言
近期爆出Zabbix有嚴重bug,加上一直對zabbix的性能、UI不滿。所以這次想鑽研一下最近很火的open-falcon,源於小米公司的開源項目,贊一個。
一、官網介紹
監控系統是整個運維環節,乃至整個產品生命週期中最重要的一環,事前及時預警發現故障,事後提供翔實的數據用於追查定位問題。監控系統作爲一個成熟的運維產品,業界有很多開源的實現可供選擇。當公司剛剛起步,業務規模較小,運維團隊也剛剛建立的初期,選擇一款開源的監控系統,是一個省時省力,效率最高的方案。之後,隨着業務規模的持續快速增長,監控的對象也越來越多,越來越複雜,監控系統的使用對象也從最初少數的幾個SRE,擴大爲更多的DEVS,SRE。這時候,監控系統的容量和用戶的“使用效率”成了最爲突出的問題。
監控系統業界有很多傑出的開源監控系統。我們在早期,一直在用zabbix,不過隨着業務的快速發展,以及互聯網公司特有的一些需求,現有的開源的監控系統在性能、擴展性、和用戶的使用效率方面,已經無法支撐了。
因此,我們在過去的一年裏,從互聯網公司的一些需求出發,從各位SRE、SA、DEVS的使用經驗和反饋出發,結合業界的一些大的互聯網公司做監控,用監控的一些思考出發,設計開發了小米的監控系統:Open-Falcon。
特點:
數據採集免配置:agent自發現、支持Plugin、主動推送模式
容量水平擴展:生產環境每秒50萬次數據收集、告警、存儲、繪圖,可持續水平擴展。
告警策略自發現:Web界面、支持策略模板、模板繼承和覆蓋、多種告警方式、支持回調動作。
告警設置人性化:支持最大告警次數、告警級別設置、告警恢復通知、告警暫停、不同時段不同閾值、支持維護週期,支持告警合併。
歷史數據高效查詢:秒級返回上百個指標一年的歷史數據。
Dashboard人性化:多維度的數據展示,用戶自定義Dashboard等功能。
架構設計高可用:整個系統無核心單點,易運維,易部署
架構圖:
圖1:官網架構圖
wKiom1gPKoXDad7DAAHAEtckzcQ561.png-wh_50
圖2:網友畫的
wKioL1gPKwGziNqDAAFfENolnUY922.png
備註:虛線所在的aggregator組件還在設計開發階段。
每臺服務器,都有安裝falcon-agent,falcon-agent是一個golang開發的daemon程序,用於自發現的採集單機的各種數據和指標,這些指標包括不限於以下幾個方面,共計200多項指標。
CPU相關
磁盤相關
IO
Load
內存相關
網絡相關
端口存活、進程存活
ntp offset(插件)
某個進程資源消耗(插件)
netstat、ss 等相關統計項採集
機器內核配置參數
只要安裝了falcon-agent的機器,就會自動開始採集各項指標,主動上報,不需要用戶在server做任何配置(這和zabbix有很大的不同),這樣做的好處,就是用戶維護方便,覆蓋率高。當然這樣做也會server端造成較大的壓力,不過open-falcon的服務端組件單機性能足夠高,同時都可以水平擴展,所以自動多采集足夠多的數據,反而是一件好事情,對於SRE和DEV來講,事後追查問題,不再是難題。
另外,falcon-agent提供了一個proxy-gateway,用戶可以方便的通過http接口,push數據到本機的gateway,gateway會幫忙高效率的轉發到server端。
falcon-agent,可以在我們的github上找到 : https://github.com/open-falcon/agent
數據流程圖:
圖1:網友畫的
wKiom1gPK3jiBribAA0xPa44Uik290.jpg
二、安裝準備
系統環境:CentOS-7.1
yum -y update
yum -y install wget telnet git net-tools deltarpm epel-release
sed -i "s/SElinux=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
#安裝一些系統常用軟件,可免去一些麻煩
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel Tcl/Tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo idconfig git system-config-Network-tui bind-utils update arpscan tmux elinks numactl iftop bwm-ng
#安裝pip
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
python get-pip.py
#使用國內豆瓣源
#mkdir /root/.pip
#vi /root/.pip/pip.conf
[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
安裝數據庫
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server
systemctl start mysql
systemctl enable mysqld
安裝redis
yum install redis
systemctl start redis
systemctl enable redis
安裝go語音環境(若使用編譯好的二進制文件,此步驟可忽略)
yum install golang
go version
go version go1.6.3 linux/amd64
工作目錄及初始化數據庫
mkdir /opt/openfalcon
cd /opt/openfalcon
git clone https://github.com/open-falcon/scripts.git
#導入表結構
mysql -h localhost -u root --password="" < db_schema/graph-db-schema.sql
mysql -h localhost -u root --password="" < db_schema/dashboard-db-schema.sql
mysql -h localhost -u root --password="" < db_schema/portal-db-schema.sql
mysql -h localhost -u root --password="" < db_schema/links-db-schema.sql
mysql -h localhost -u root --password="" < db_schema/uic-db-schema.sql
下載編譯好的組件
mkdir /opt/openfalcon/tmp
cd /opt/openfalcon/tmp
wget https://github.com/open-falcon/of-release/releases/download/v0.1.0/open-falcon-v0.1.0.tar.gz
tar -zxf open-falcon-v0.1.0.tar.gz
rm -rf open-falcon-v0.1.0.tar.gz
cd /opt/openfalcon
for x in find ./tmp/ -name "*.tar.gz"
;do \
app=echo $x|cut -d'-'-f2
; \
mkdir -p $app; \
tar -zxf $x -C $app; \done
#解壓完畢
wKiom1gPK-mzzZHWAABLaAqy8Kc085.png
三、開始安裝
第一部分:繪圖組件安裝
組件列表:
組件名稱
用途
服務端口
備註
Agent
部署在目標機器採集機器監控項
http: 1988
Transfer
數據接收端,轉發數據到後端Graph和Judge
http: 6060
rpc: 8433
socket: 4444
Graph
操作rrd文件存儲監控數據
http: 6070
rpc: 60711.可部署多實例做集羣
2.需要連接數據庫graph
Query
查詢各個Graph數據,提供統一http查詢接口
http: 9966
Dashboard
查詢監控歷史趨勢圖的web端
http: 80811.需要python虛擬環境
2.需要連接數據庫dashborad、graph
Task
負責一些定時任務,索引全量更新、垃圾索引清理、自身組件監控等
http: 80021.需要連接數據庫graph
安裝Agent
agent用於採集機器負載監控指標,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push給Transfer。agent與Transfer建立了長連接,數據發送速度比較快,agent提供了一個http接口/v1/push用於接收用戶手工push的一些數據,然後通過長連接迅速轉發給Transfer。
每臺機器上,都需要部署agent。
cd/opt/openfalcon/agent/
mv cfg.example.json cfg.json
vim cfg.json
- 修改 transfer這個配置項的enabled爲 true,表示開啓向transfer發送數據的功能
- 修改 transfer這個配置項的addr爲:["127.0.0.1:8433"] (改地址爲transfer組件的監聽地址, 爲列表形式,可配置多個transfer實例的地址,用逗號分隔)# 默認情況下(所有組件都在同一臺服務器上),保持cfg.json不變即可# cfg.json中的各配置項,可以參考 https://github.com/open-falcon/agent/blob/master/README.md# 啓動./control start# 查看日誌./control tail
安裝Transfer
transfer默認監聽在:8433端口上,agent會通過jsonrpc的方式來push數據上來。
cd /opt/openfalcon/transfer/
mv cfg.example.json cfg.json# 默認情況下(所有組件都在同一臺服務器上),保持cfg.json不變即可# cfg.json中的各配置項,可以參考 https://github.com/open-falcon/transfer/blob/master/README.md# 如有必要,請酌情修改cfg.json# 啓動transfer./control start# 校驗服務,這裏假定服務開啓了6060的http監聽端口。檢驗結果爲ok表明服務正常啓動。curl -s"http://127.0.0.1:6060/health"#查看日誌./control tail
安裝Graph
graph組件是存儲繪圖數據、歷史數據的組件。transfer會把接收到的數據,轉發給graph。
#創建存儲數據目錄
mkdir -p /opt/openfalcon/data/6070
cd /opt/openfalcon/graph/
mv cfg.example.json cfg.json# 默認情況下(所有組件都在同一臺服務器上),繪圖數據我改爲了/opt/openfalcon/data/6070,還有就是數據庫密碼需要加上
cfg.json中的各配置項,可以參考 https://github.com/open-falcon/graph/blob/master/README.md# 啓動./control start# 查看日誌./control tail# 校驗服務,這裏假定服務開啓了6071的http監聽端口。檢驗結果爲ok表明服務正常啓動。curl -s"http://127.0.0.1:6071/health"
安裝Query
query組件,繪圖數據的查詢接口,query組件收到用戶的查詢請求後,會從後端的多個graph,查詢相應的數據,聚合後,再返回給用戶。
cd/opt/openfalcon/query/
mv cfg.example.json cfg.json# 默認情況下(所有組件都在同一臺服務器上),保持cfg.json不變即可# cfg.json中的各配置項,可以參考 https://github.com/open-falcon/query/blob/master/README.md# 啓動./control start# 查看日誌./control tail
安裝Dashboard
dashboard是面向用戶的查詢界面,在這裏,用戶可以看到push到graph中的所有數據,並查看其趨勢圖。
Install dependency
yum install -y python-virtualenv mysql-community-delvel # run as root
cd /opt/openfalcon/dashboard/
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt
Configuration
config的路徑爲 $WORKSPACE/dashboard/rrd/config.py,裏面有數據庫相關的配置信息,如有必要,請修改。默認情況下(所有組件都在同一臺服務器上),保持默認配置即可# 數據庫表結構初始化,請參考前面的 環境準備 階段
啓動
./control start
--> goto http://IP:8081
wKioL1gPLCySaIDeAADAs5yukiw077.png
查看日誌
./control tail
安裝Task
task是監控系統一個必要的輔助模塊。定時任務,實現瞭如下幾個功能:
index更新。包括圖表索引的全量更新 和 垃圾索引清理。
falcon服務組件的自身狀態數據採集。定時任務了採集了transfer、graph、task這三個服務的內部狀態數據。
falcon自檢控任務。
修改配置, 配置項含義見下文mv cfg.example.json cfg.json
vim cfg.json# 啓動服務./control start# 校驗服務,這裏假定服務開啓了8002的http監聽端口。檢驗結果爲ok表明服務正常啓動。curl -s"127.0.0.1:8002/health"
第二部分:報警組件安裝
組件列表:
組件名稱
用途
服務端口
備註
Sender
報警發送模塊,控制併發度,提供發送的緩衝queue
http: 6066
UIC(fe)
用戶組管理,單點登錄
http: 80
1.需要連接數據庫:uic
Portal
配置報警策略,管理機器分組的web端
http: 5050
1.需要連接數據庫:falcon_portal
2.需要python虛擬環境
HBS
HeartBeat Server,心跳服務器
http: 6031
rpc: 6030
1.需要連接數據庫:falcon_portal
Judge
報警判斷模塊
http: 6081
rpc: 60801.可部署多實例
Links
報警合併依賴的web端,存放報警詳情
http: 50901.需要連接數據庫:falcon_links
2.需要python虛擬環境
Alarm
報警事件處理器
http: 9912
mail-provider
報警郵件http api
http: 4000
小米提供
sms-provider
報警短信http api
http: 4040
自行編寫
Nodata
檢測監控數據的上報異常
http: 6090
1.需要連接數據庫:falcon_portal
Aggregator
集羣聚合模塊——聚合某集羣下的所有機器的某個指標的值,提供一種集羣視角的監控體驗。
http: 60551.需要連接數據庫:falcon_portal
報警準備:mail-provider & sms-provider
監控系統產生報警事件之後需要發送報警郵件或者報警短信,各個公司可能有自己的郵件服務器,有自己的郵件發送方法;有自己的短信通道,有自己的短信發送方法。falcon爲了適配各個公司,在接入方案上做了一個規範,需要各公司提供http的短信和郵件發送接口。
短信發送http接口:
method: post
params:
- content: 短信內容
- tos: 使用逗號分隔的多個手機號
falcon將這樣調用該接口:
url=您公司提供的http短信接口
curl $url-d"content=xxx&tos=18611112222,18611112223"
郵件發送http接口:
method: post
params:
- content: 郵件內容
- subject: 郵件標題
- tos: 使用逗號分隔的多個郵件地址
falcon將這樣調用該接口:
url=您公司提供的http郵件接口
curl -X POST $url-d"content=xxx&[email protected],[email protected]&subject=xxx"
安裝使用mail-provider
#這裏使用小米提供的mail-provider,我是通過網友編譯好的二級制包安裝的,也可自行編譯。
#githu地址: https://github.com/open-falcon/mail-provider
tar xf mail-provider-master.tar.gz
rm -rf mail-provider-master.tar.gz
mv mail-provider-master mail-provider
cd mail-provider/
#修改配置文件cfg.conf
{
"debug": true,
"http": {
"listen": "0.0.0.0:4000",
"token": ""
},
"smtp": {
"addr": "smtp.exmail.qq.com:25",
"username": "[email protected]",
"password": "12345",
"from": "[email protected]"
}
}
#啓動
./control start
#測試郵件接口是否正常,收到郵件證明API 正常。
curl http://127.0.0.1:4000/sender/mail -d "[email protected]&subject=xxxx&content=yyyy"
建立sms-provider
#這裏我自己寫了個基於python的http server 作爲短信接口http api
vi http_sms.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#coding=utf-8
'''
Created on 2016-10-17
@author: chenguomin qq:29235373
@explain: 實現GET方法和POST方法請求
'''
from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler
import urllib
import urllib2
def send_<a class="infotextkey" href="http://www.07net01.com/tags-message-0.html" target="_blank">message</a>(tos,txt):
'''
此函數主要用於調用我公司內部的短信API(get方式),大夥可自行修改。
比如:需要加用戶名密碼,MD5,token的自行查看短信平臺提供商手冊,如何調用短信API。
下面提供一個url供大家參考。
'''
#url = "http://www.sms.com:4000/sendsms?uid=16888&pwd=123456&mobile=%s&msg=%s" % (tos, txt)
url = "http://192.168.20.88:8080/SendSms/sendsms?mobile=%s&content=%s" % (tos, txt)
req = urllib2.Request(url)
res_data = urllib2.urlopen(req)
res = res_data.read()
print res
class ServerHTTP(BaseHTTPRequestHandler):
def do_GET(self):
path = self.path
print path
#拆分url(也可根據拆分的url獲取Get提交才數據),可以將不同的path和參數加載不同的html頁面,或調用不同的方法返回不同的數據,來實現簡單的<a class="infotextkey" href="http://www.07net01.com/tags-%E7%BD%91%E7%AB%99-0.html" target="_blank">網站</a>或接口
query = urllib.splitquery(path)
print query
self.send_response(200)
self.send_header("Content-type","text/html")
self.send_header("test","This is test!")
self.end_headers()
buf = '''''<!DOCTYPE HTML>
<html>
<head><title>Get page</title></head>
<body>
<form action="post_page" method="post">
mobile: <input type="text" name="tos" /><br />
content: <input type="text" name="content" /><br />
<input type="submit" value="http://chenguomin.blog.51cto.com/8794192/POST" />
</form>
</body>
</html>'''
self.wfile.write(buf)
def do_POST(self):
path = self.path
print path
#獲取post提交的數據
datas = self.rfile.read(int(self.headers['content-length']))
datas = urllib.unquote(datas).decode("utf-8", 'ignore')
mobile = datas.split('&')[0].replace("tos=","").replace('"','')
content = datas.split('&')[1].replace("content=","").replace('"','')
mm = mobile.split(',')
for i in mm:
print i
send_message(i,content)
self.send_response(200)
self.end_headers()
buf = '''''<!DOCTYPE HTML>
<html>
<head><title>Post page</title></head>
<body>Tos:%s <br />Content:%s</body>
</html>'''% (mobile, content)
self.wfile.write(buf)
def start_server(port):
http_server = HTTPServer(('', int(port)), ServerHTTP)
http_server.serve_forever()
if name == "main":
#端口可自定義,不衝突就可以,這裏設置爲:4040
start_server(4040)
#運行python http server
nohup python http_sms.py &
#在瀏覽器訪問,提供了簡單的頁面測試,只有get,post方法。
wKioL1gPLM_AukH7AAB846n-BiU453.png
#也可以在命令行使用curl測試
curl http://192.168.20.99:4040/ -d "tos=1358888888,1868888888&content=testmsg"
#openfalcon的sender是post方式傳遞數據給http api的,所以我需要獲取sender post過來的tos和content參數,再發送到公司內部的sms api。
安裝alarm
alarm模塊是處理報警event的,judge產生的報警event寫入redis,alarm從redis讀取,這個模塊被業務搞得很糟亂,各個公司可以根據自己公司的需求重寫
cd /opt/openfalcon/alarm/
mv cfg.example.json cfg.json# vi cfg.json# 把redis配置成與judge同一個./control start
注意,alarm當前的版本,highQueues和lowQueues都不能爲空,是個bug,稍候修復。我們可以把event:p0~event:p5配置到highQueues,把event:p6配置到lowQueues
PS:微信告警版本可到我的github拉取
https://github.com/chensambb/open-falcon-alarm-by-weixin/
安裝sender
調用各個公司提供的mail-provider和sms-provider,按照某個併發度,從redis中讀取郵件、短信併發送,alarm生成的報警短信和報警郵件都是直接寫入redis即可,sender來發送。
cd /opt/openfalcon/sender/
mv cfg.example.json cfg.json# vi cfg.json# redis地址需要和後面的alarm、judge使用同一個# queue維持默認# worker是最多同時有多少個線程玩命得調用短信、郵件發送接口# api要給出sms-provider和mail-provider的接口地址
#我們現在調用上面的短信和郵件api
{ "debug": true, "http": { "enabled": true, "listen": "0.0.0.0:6066" }, "redis": { "addr": "127.0.0.1:6379", "maxIdle": 5 }, "queue": { "sms": "/sms", "mail": "/mail" }, "worker": { "sms": 10, "mail": 50 }, "api": { "sms": "http://127.0.0.1:4040/", "mail": "http://127.0.0.1:4000/sender/mail" }}./control start
微信告警版本可到我的github拉取
https://github.com/chensambb/open-falcon-alarm-by-weixin/
安裝fe
cd /opt/openfalcon/femv cfg.example.json cfg.json# 請基於cfg.example.json 酌情修改相關配置項# 啓動./control start# 查看日誌./control tail# 停止服務./control stop
安裝portal
portal是用於配置報警策略的地方
yum install -y python-virtualenv # run as rootcd/opt/openfalcon/portal/
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt# vi frame/config.py# 1. 修改DB配置# 2. SECRET_KEY設置爲一個隨機字符串# 3. UIC_ADDRESS有兩個,internal配置爲FE模塊的內網地址,portal通常是和UIC在一個網段的,# 內網地址相互訪問速度快。external是終端用戶通過瀏覽器訪問的UIC地址,很重要!# 4. 其他配置可以使用默認的./control start
portal默認監聽在5050端口,瀏覽器訪問即可
安裝HBS(heartbeat Server)
心跳服務器,只依賴Portal的DB
cd/opt/openfalcon/hbs/
mv cfg.example.json cfg.json# vi cfg.json 把數據庫配置配置爲portal的db./control start
如果先安裝的繪圖組件又來安裝報警組件,那應該已經安裝過agent了,hbs啓動之後會監聽一個http端口,一個rpc端口,agent要和hbs通信,重新去修改agent的配置cfg.json,把heartbeat那項enabled設置爲true,並配置上hbs的rpc地址,./control restart重啓agent,之後agent就可以和hbs心跳了
安裝judge
報警判斷模塊,judge依賴於HBS,所以得先搭建HBS
cd/opt/openfalcon/judge/
mv cfg.example.json cfg.json# vi cfg.json# remain: 這個配置指定了judge內存中針對某個數據存多少個點,比如host01這個機器的cpu.idle的值在內存中最多存多少個,# 配置報警的時候比如all(#3),這個#後面的數字不能超過remain-1# hbs: 配置爲hbs的地址,interval默認是60s,表示每隔60s從hbs拉取一次策略# alarm: 報警event寫入alarm中配置的redis,minInterval表示連續兩個報警之間至少相隔的秒數,維持默認即可./control start
安裝Links
Links是爲報警合併功能寫的組件。如果你不想使用報警合併功能,這個組件是無需安裝的。
Links個Python的項目,無需像Go的項目那樣去做編譯。不過Go的項目是靜態編譯的,編譯好了之後二進制無依賴,拿到其他機器也可以跑起來,Python的項目就需要安裝一些依賴庫了。
我們使用virtualenv來管理Python環境,yum安裝需切到root賬號# yum install -y python-virtualenv$ cd /path/to/links/
$ virtualenv ./env
$ ./env/bin/pip install -r pip_requirements.txt
安裝完依賴的lib之後就可以用control腳本啓動了,log在var目錄。不過啓動之前要先把配置文件修改成相應配置。另外,監聽的端口在gunicorn.conf中配置。
安裝Nodata
nodata用於檢測監控數據的上報異常。nodata和實時報警judge模塊協同工作,過程爲: 配置了nodata的採集項超時未上報數據,nodata生成一條默認的模擬數據;用戶配置相應的報警策略,收到mock數據就產生報警。採集項上報異常檢測,作爲judge模塊的一個必要補充,能夠使judge的實時報警功能更加可靠、完善。
服務部署
服務部署,包括配置修改、啓動服務、檢驗服務、停止服務等。這之前,需要將安裝包解壓到服務的部署目錄下。
cd /opt/openfalcon/nodatamv cfg.example.json cfg.json
vim cfg.json# 啓動服務./control start# 校驗服務,這裏假定服務開啓了6090的http監聽端口。檢驗結果爲ok表明服務正常啓動。curl -s"127.0.0.1:6090/health"...# 停止服務./control stop
安裝Aggregator
集羣聚合模塊。聚合某集羣下的所有機器的某個指標的值,提供一種集羣視角的監控體驗。
服務部署
服務部署,包括配置修改、啓動服務、檢驗服務、停止服務等。這之前,需要將安裝包解壓到服務的部署目錄下。
修改配置, 配置項含義見下文mv cfg.example.json cfg.json
vim cfg.json# 啓動服務./control start# 校驗服務,看端口是否在監聽ss -tln# 檢查log./control tail
...# 停止服務./control stop
四、使用方法(轉官網)
系統搭建好了,應該如何用起來,這節給大家逐步介紹一下。
有很多寫好的服務監控可參考官網book:
http://book.open-falcon.org/zh/usage/index.html
教學視頻:
http://www.jikexueyuan.com/course/1651_4.html?ss=1
查看監控數據
我們說agent只要部署到機器上,並且配置好了heartbeat和transfer就自動採集數據了,我們就可以去dashboard上面搜索監控數據查看了。dashboard是個web項目,瀏覽器訪問之。左側輸入endpoint搜索,endpoint是什麼?應該用什麼搜索?對於agent採集的數據,endpoint都是機器名,去目標機器上執行hostname,看到的輸出就是endpoint,拿着hostname去搜索。
搜索到了吧?嗯,選中前面的複選框,點擊“查看counter列表”,可以列出隸屬於這個endpoint的counter,counter是什麼?counter=${metric}/sorted(${tags})
假如我們要查看cpu.idle,在counter搜索框中輸入cpu並回車。看到cpu.idle了吧,點擊,會看到一個新頁面,圖表中就是這個機器的cpu.idle的近一小時數據了,想看更長時間的?右上角有個小三角,展開菜單,可以選擇更長的時間跨度
wKioL1gPLUiBMITlAACdzu4KST8135.png
wKiom1gPLUngEhMCAABp7k3x80g972.png
如何配置報警策略
上節我們已經瞭解到如何查看監控數據了,如果數據達到閾值,比如cpu.idle太小的時候,我們應該如何配置告警呢?
配置報警接收人
falcon的報警接收人不是一個具體的手機號,也不是一個具體的郵箱,因爲手機號、郵箱都是容易發生變化的,如果變化了去修改所有相關配置那就太麻煩了。我們把用戶的聯繫信息維護在一個叫UIC(新用戶推薦使用Go版本的UIC,即:falcon-fe項目)的系統裏,以後如果要修改手機號、郵箱,只要在UIC中修改一次即可。報警接收人也不是單個的人,而是一個組(UIC中稱爲Team),比如falcon這個系統的任何組件出問題了,都應該發報警給falcon的運維和開發人員,發給falcon這個團隊,這樣一來,新員工入職只要加入falcon這個Team即可;員工離職,只要從falcon這個Team刪掉即可。
瀏覽器訪問UIC,如果啓用了LDAP,那就用LDAP賬號登陸,如果沒有啓用,那就註冊一個或者找管理員幫忙開通。創建一個Team,名稱姑且叫falcon,把自己加進去,待會用來做測試。
wKioL1gPLYiiRnw3AACAsbNuzZA469.png
創建HostGroup
比如我們要對falcon-judge這個組件做端口監控,那首先創建一個HostGroup,把所有部署了falcon-judge這個模塊的機器都塞進去,以後要擴容或下線機器的時候直接從這個HostGroup增刪機器即可,報警策略會自動生效、失效。咱們爲這個HostGroup取名爲:sa.dev.falcon.judge,這個名稱有講究,sa是我們部門,dev是我們組,falcon是項目名,judge是組件名,傳達出了很多信息,這樣命名比較容易管理,推薦大家這麼做。
wKiom1gPLdijqqyxAABtz8uW98Y232.png
在往組裏加機器的時候如果報錯,需要檢查portal的數據庫中host表,看裏邊是否有相關機器。那host表中的機器從哪裏來呢?agent有個heartbeat(hbs)的配置,agent每分鐘會發心跳給hbs,把自己的ip、hostname、agent version等信息告訴hbs,hbs負責寫入host表。如果host表中沒數據,需要檢查這條鏈路是否通暢。
1
創建策略模板
portal最上面有個Templates鏈接,這就是策略模板管理的入口。我們進去之後創建一個模板,名稱姑且也叫:sa.dev.falcon.judge,與HostGroup名稱相同,在裏邊配置一個端口監控,通常進程監控有兩種手段,一個是進程本身是否存活,一個是端口是否在監聽,此處我們使用端口監控。
wKiom1gPLiPzEKYRAAEZ4sjoCIM401.png
右上角那個加號按鈕是用於增加策略的,一個模板中可以有多個策略,此處我們只添加了一個。下面可以配置報警接收人,此處填寫的是falcon,這是之前在UIC中創建的Team。
將HostGroup與模板綁定
一個模板是可以綁定到多個HostGroup的,現在我們重新回到HostGroups頁面,找到sa.dev.falcon.judge這個HostGroup,右側有幾個超鏈接,點擊【templates】進入一個新頁面,輸入模板名稱,綁定一下就行了。
wKioL1gPLmOxm-8MAABaU46zy_U195.png
補充
上面步驟做完了,也就配置完了。如果judge組件宕機,端口不再監聽了,就會報警。不過大家不要爲了測試報警效果,直接把judge組件給幹掉了,因爲judge本身就是負責判斷報警的,把它幹掉了,那就沒法判斷了……所以說falcon現在並不完善,沒法用來監控本身的組件。爲了測試,大家可以修改一下端口監控的策略配置,改成一個沒有在監聽的端口,這樣就觸發報警了。
上面的策略只是對falcon-judge做了端口監控,那如果我們要對falcon這個項目的所有機器加一些負載監控,應該如何做呢?
創建一個HostGroup:sa.dev.falcon,把所有falcon的機器都塞進去
創建一個模板:sa.dev.falcon.common,添加一些像cpu.idle,load.1min等策略
將sa.dev.falcon.common綁定到sa.dev.falcon這個HostGroup
附:sa.dev.falcon.common的配置樣例
wKioL1gPLovwUJlFAAEOXs1Uvvc934.png
大家可能不知道各個指標分別叫什麼,自己push的數據肯定知道自己的metric了,agent push的數據可以參考:https://github.com/open-falcon/agent/tree/master/funcs
如何配置策略表達式
策略表達式,即expression,具體可以參考HostGroup與Tags設計理念,這裏只是舉個例子:
wKioL1gPLsGCEg4YAACVPkfry_U380.png
上例中的配置傳達出的意思是:falcon-judge這個模塊的所有實例,如果qps連續3次大於1000,就報警給falcon這個報警組。
expression無需綁定到HostGroup,enjoy it