數據路由組件,用于解決網絡分區情況下的監控數據收集問題

jopen 9年前發布 | 8K 次閱讀 數據

Introduction

多IDC時,可能面對 "分區到中心的專線網絡質量較差&公網ACL不通" 等問題。這時,可以在分區內部署一套數據路由服務,接收本分區內的所有流量(包括所有的agent流量),然后通過公網(開通ACL),將數據push給中心的Transfer。如下圖, gateway.png

站在client端的角度,gateway和transfer提供了完全一致的功能和接口。只有遇到網絡分區的情況時,才有必要使用gateway組件

Installation

首先,通過github倉庫的源碼,編譯出可執行的二進制文件。然后,將二進制文件部署到服務器上,并提供服務。

Build

cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/gateway.git cd gateway
go get ./...
./control build
./control start

最后一步會pack出一個falcon-gateway-$vsn.tar.gz的安裝包,拿著這個包去部署服務即可

Deploy

服務部署,包括配置修改、啟動服務、檢驗服務、停止服務等。這之前,需要將安裝包解壓到服務的部署目錄下。

# download 'falcon-gateway-$vsn.tar.gz'
# tar -zxf falcon-gateway-$vsn.tar.gz && rm -f falcon-gateway-$vsn.tar.gz

# modify config
mv cfg.example.json cfg.json
vim cfg.json

# start service
./control start

# check, you should get 'ok'
curl -s "127.0.0.1:6060/health"

...
# stop service
./control stop

服務啟動后,可以通過日志查看服務的運行狀態,日志文件地址為./var/app.log。可以通過調試腳本./test/debug查看服務器的內部狀態數據,如 運行 bash ./test/debug 可以得到服務器內部狀態的統計信息。

gateway組件,部署于分區中。單個gateway實例的轉發能力,為 {1核, 500MB內存, Qps不小于1W/s};但我們仍然建議,一個分區至少部署兩個gateway實例,來實現高可用。

Usage

send items via transfer's http-api

#!/bin/bash
e="test.endpoint.1" 
m="test.metric.1"
t="t0=tag0,t1=tag1,t2=tag2"
ts=`date +%s`
curl -s -X POST -d "[{\"metric\":\"$m\", \"endpoint\":\"$e\", \"timestamp\":$ts,\"step\":60, \"value\":9, \"counterType\":\"GAUGE\",\"tags\":\"$t\"}]" "127.0.0.1:6060/api/push" | python -m json.tool

Configuration

debug: true/false, 如果為true,日志中會打印debug信息

http
    - enable: true/false, 表示是否開啟該http端口,該端口為控制端口,主要用來對transfer發送控制命令、統計命令、debug命令等
    - listen: 表示監聽的http端口

rpc
    - enable: true/false, 表示是否開啟該jsonrpc數據接收端口, Agent發送數據使用的就是該端口
    - listen: 表示監聽的jsonrpc端口

socket #即將被廢棄,請避免使用
    - enable: true/false, 表示是否開啟該telnet方式的數據接收端口,這是為了方便用戶一行行的發送數據給transfer
    - listen: 表示監聽的socket端口

transfer
    - enable: true/false, 表示是否開啟向tranfser轉發數據
    - batch: 數據轉發的批量大小,可以加快發送速度,建議保持默認值
    - connTimeout: 單位是毫秒,與后端建立連接的超時時間,可以根據網絡質量微調,建議保持默認
    - callTimeout: 單位是毫秒,發送數據給后端的超時時間,可以根據網絡質量微調,建議保持默認
    - maxConns: 連接池相關配置,最大連接數,建議保持默認
    - maxIdle: 連接池相關配置,最大空閑連接數,建議保持默認
    - addr: transfer服務的地址,形如 $hostname:$port

注意:transfer.addr應該指向一臺transfer服務器,或者,指向一個掛在了transfer服務器集群的 域名或vip。這里,不提供指向transfer集群列表的功能,有此需求的用戶可以進行二次開發。

Debug

可以通過調試腳本./test/debug查看服務器的內部狀態數據,含義如下

# bash ./test/debug
{
    "data": [
        { // counter of items received
            "Cnt": 0,
            "Name": "RecvCnt",
            "Other": {},
            "Qps": 0,
            "Time": "2015-08-14 06:41:57"
        },
        { // counter of items sent to transfer
            "Cnt": 0,
            "Name": "SendCnt",
            "Other": {},
            "Qps": 0,
            "Time": "2015-08-14 06:41:57"
        },
        { // counter of items drop(gateway would drop items when caching too many)
            "Cnt": 0,
            "Name": "SendDropCnt",
            "Other": {},
            "Qps": 0,
            "Time": "2015-08-14 06:41:57"
        },
        { // counter of items sent to transfer failed
            "Cnt": 0,
            "Name": "SendFailCnt",
            "Other": {},
            "Qps": 0,
            "Time": "2015-08-14 06:41:57"
        },
        { // size of cached items
            "Cnt": 0,
            "Name": "SendQueuesCnt",
            "Other": {},
            "Time": "2015-08-14 06:41:54"
        }
    ],
    "msg": "success"
}

項目主頁:http://www.baiduhome.net/lib/view/home/1439649047036

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!