open-falcon 的使用

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

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