基於 Go 語言開發的監控系統

01 介紹

小米開源的監控系統 open-falcon 和滴滴開源的日誌採集工具 falcon-log-agent 作爲一組黃金搭檔,被互聯網公司廣泛使用。

本文介紹怎麼使用這組黃金搭檔監控業務系統的日誌。

02 open-falcon

open-falcon 使用 Golang 和 Python 開發,其中 Python 主要開發的是 Dashboard。

限於篇幅,本文不準備介紹 open-falcon 的原理,僅介紹如何安裝。

安裝 open-falcon 之前,必須確保已成功安裝 Redis 和 MySQL,因爲 open-falcon 需要使用這兩個存儲組件。

同時,我們還需要確保已成功安裝 Golang 和 Python。

需要注意的是,我們還需要確保已設置 $GOPATH 和 $GOROOT 環境變量(也可以使用默認值)。

安裝 open-falcon :

下載源碼和初始化數據庫

mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git
cd $GOPATH/src/github.com/open-falcon/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

編譯

cd $GOPATH/src/github.com/open-falcon/falcon-plus/

# make all modules
make all

# make specified module
make agent

# pack all modules
make pack

在執行 make pack 之後,我們得到一個壓縮包 open-falcon-vx.x.x.tar.gz

如果我們想要修改每個模塊的配置文件,在執行 make pack 之前,我們可以修改模塊的 config/xxx.json

需要注意的是,模塊的配置文件中,MySQL 的賬號和密碼,默認分別是 root 和空,如果我們的 MySQL 賬號和密碼與之不同,我們需要編輯模塊的配置文件進行修改。

部署

我們可以將得到的壓縮包解壓縮到指定目錄進行部署,例如:

make ~/open-falcon
tar -zxvf open-falcon-vx.x.x.tar.gz -C ~/open-falcon

啓動所有模塊

cd ~/open-falcon
./open-falcon start

# 檢查模塊狀態
./open-falcon check

安裝儀表盤

在安裝 Dashboard 之前,我們需要先安裝依賴項:

# Centos
yum install -y python-virtualenv
yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools"

# Ubuntu
apt-get install -y python-virtualenv
apt-get install -y slapd ldap-utils
apt-get install -y libmysqld-dev
apt-get install -y build-essential
apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev

安裝 Dashboard:

cd ~/open-falcon
git clone https://github.com/open-falcon/dashboard.git
cd dashboard
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt

需要注意的是,這裏有一個 Bug,會導致無法在儀表盤註冊賬號(點擊按鈕無反應),需要將 falcon api 的端口號 18080 改爲 8080

cd ~/open-falcon/dashboard
vim rrd/config.py
# 端口 18080 改爲 8080
API_ADDR = os.environ.get("API_ADDR","http://81.70.201.193:8080/api/v1")

在啓動 Dashboard 之前,我們再檢查一下 open-falcon 的 api 模塊是否已啓動:

cd ~/open-falcon
./open-falcon check

啓動 Dashboard:

cd ~/open-falcon/dashboard
$ ./control start

在瀏覽器中,打開 http://127.0.0.1:8081

03 falcon-log-agent

falcon-log-agent 不同於 ELK,它不是日誌查看系統,而是日誌計算系統。

它通過外掛式的日誌採集方式,實時讀取日誌文件中的內容,實時計算,並將計算結果直接推送到 open-falcon。

它有幾個限定條件,分別是要求日誌必須包含時間,不支持文件軟鏈接,日誌時間必須有序。

安裝 falcon-log-agent:

構建

make -p $GOPATH/src/github.com/didi && cd $_
git clone https://github.com/didi/falcon-log-agent.git
make build

修改配置文件

cd $GOPATH/src/github.com/didi/falcon-log-agent
cp cfg/dev.cfg cfg/cfg.json # 基礎配置
cp cfg/strategy.dev.json cfg/strategy.json # 策略配置

部署

cd $GOPATH/src/github.com/didi/falcon-log-agent
make pack
mkdir ~/open-falcon/falcon-log-agent
tar -zxvf falcon-log-agent.tar.gz -C ~/open-falcon/falcon-log-agent

啓動

cd ~/open-falcon/falcon-log-agent
./control start

檢查

策略配置示例:

本文以 open-falcon 的 agent 模塊的日誌爲例,介紹怎麼配置一個新策略。

[
    {
        "id":10, # 多個策略,id 必須唯一
        "name":"agent send data count"# 對應 open-falcon 中的 metric(監控項)
        "file_path":"/root/open-falcon/agent/logs/agent.log"# 日誌路徑(支持動態路徑)
        "time_format":"yyyy/mm/dd HH:MM:SS"# 時間格式
        "pattern":"Total=(\\d+)"# 匹配正則表達式
        "exclude":""# 排除正則表達式
        "step":60, # 日誌採集週期,單位秒
        "tags":{}, 對應 open-falcon 中的 tag
        "func":"cnt"# 日誌採集方式,cnt、avg、sum、max、min
        "degree":6, # 精度
        "comment":""# 備註
        "parse_succ":true
    }
]

重啓 falcon-log-agent,我們在 Dashboard 中的 Couters 列表中可以看到 agent send data count

04 監控配置

我們介紹完 open-falcon 和 falcon-log-agent 的安裝和啓動。

已實現自動採集日誌並將計算數據上報到 open-falcon,接下來,我們介紹針對日誌數據怎麼配置監控。

監控配置操作步驟:

  1. 創建用戶組。

  2. 創建模板。

  3. 添加策略,其中 metric 對應 falcon-log-agent 策略配置文件中配置項的 name,max 是最大報警次數,P 是報警級別(<3:既發短信也發郵件,>=3:只發郵件),run 是策略生效時間(不填寫代表全天生效),if 代表條件。

    告警條件支持函數如下:

  1. 配置報警接收用戶組。

05 總結

本文我們介紹了基於 Go 語言開發的開源監控系統和日誌採集工具的安裝和使用方式。

建議讀者朋友們動手操作一遍,需要注意的是,儘量嚴格按照本文的目錄結構操作。

參考資料:

  1. https://github.com/open-falcon/falcon-plus

  2. https://github.com/open-falcon/dashboard

  3. https://github.com/didi/falcon-log-agent

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/10DUiyIHSon3OZoYQy7VHg