小米開源監控open-falcon安裝

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方法。

http://ip:4040/

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

轉載地址:https://www.cnblogs.com/liangqihui/p/6618127.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章