小米開源監控open-falcon安裝

http://www.javashuo.com/article/p-axfogpuo-gs.html
前言html

近期爆出Zabbix有嚴重bug,加上一直對zabbix的性能、UI不滿。因此此次想鑽研一下最近很火的open-falcon,源於小米公司的開源項目,贊一個。

1、官網介紹python

監控系統是整個運維環節,乃至整個產品生命週期中最重要的一環,事前及時預警發現故障,過後提供翔實的數據用於追查定位問題。監控系統做爲一個成熟的運維產品,業界有不少開源的實現可供選擇。當公司剛剛起步,業務規模較小,運維團隊也剛剛創建的初期,選擇一款開源的監控系統,是一個省時省力,效率最高的方案。以後,隨着業務規模的持續快速增加,監控的對象也愈來愈多,愈來愈複雜,監控系統的使用對象也從最初少數的幾個SRE,擴大爲更多的DEVS,SRE。這時候,監控系統的容量和用戶的「使用效率」成了最爲突出的問題。

    監控系統業界有不少傑出的開源監控系統。咱們在早期,一直在用zabbix,不過隨着業務的快速發展,以及互聯網公司特有的一些需求,現有的開源的監控系統在性能、擴展性、和用戶的使用效率方面,已經沒法支撐了。

    所以,咱們在過去的一年裏,從互聯網公司的一些需求出發,從各位SRE、SA、DEVS的使用經驗和反饋出發,結合業界的一些大的互聯網公司作監控,用監控的一些思考出發,設計開發了小米的監控系統:Open-Falcon。

特色:mysql

數據採集免配置:agent自發現、支持Plugin、主動推送模式linux

容量水平擴展:生產環境每秒50萬次數據收集、告警、存儲、繪圖,可持續水平擴展。c++

告警策略自發現:Web界面、支持策略模板、模板繼承和覆蓋、多種告警方式、支持回調動做。git

告警設置人性化:支持最大告警次數、告警級別設置、告警恢復通知、告警暫停、不一樣時段不一樣閾值、支持維護週期,支持告警合併。github

歷史數據高效查詢:秒級返回上百個指標一年的歷史數據。golang

Dashboard人性化:多維度的數據展現,用戶自定義Dashboard等功能。web

架構設計高可用:整個系統無核心單點,易運維,易部署redis

架構圖:

圖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

2、安裝準備

系統環境: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

3、開始安裝

第一部分:繪圖組件安裝

組件列表:

組件名稱

用途

服務端口

備註

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&tos=ulric.qin@gmail.com,user@example.com&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": "xxxx@abc.com",

    "password": "12345",

    "from": "xxxx@abc.com"

}

}

#啓動

./control start

#測試郵件接口是否正常,收到郵件證實API 正常。

curl http://127.0.0.1:4000/sender/mail -d "tos=29235373@qq.com&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="×××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="×××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

4、使用方法(轉官網)

系統搭建好了,應該如何用起來,這節給你們逐步介紹一下。

有不少寫好的服務監控可參考官網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

轉載地址:http://www.javashuo.com/article/p-axfogpuo-gs.html

相關文章
相關標籤/搜索