open-falcon之agent


功能

采集數據,解析數據,上報數據至transfer

  • 基本涵蓋了系統層面監控指標,直接將數據轉換為metricValue形式,上報至transfer

  • 支持插件采集,代碼插件放可受git管理,放置在plugin目錄,從HBS中獲取執行周期,版本等

  • 支持數據直接上報,提供HTTPAPI,將收到的數據轉換為metricValue形式,上報至transfer

  • 支持HTTP API對自身控制

配置文件:

  • 設置采集數據的腳本更新地址

  • 指定Agent的上游模塊的地址,包括heartbeat和transfer模塊

  • agent開放的HTTP端口

  • 采集數據的過濾條件


{

    "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, # 此處enabled要設置為true

        "addrs": [

            "127.0.0.1:8433",

            "127.0.0.1:8433"

        ], # transfer的地址,端口是transfer的rpc端口, 可以支持寫多個transfer的地址,agent會保證HA

        "interval": 60, # 采集周期,單位是秒,即agent一分鍾采集一次數據發給transfer

        "timeout": 1000 # 連接transfer的超時時間,單位是毫秒

    },

    "http": {

        "enabled": true, # 是否要監聽http端口

        "listen": ":1988" # 如果監聽的話,監聽的地址

    },

    "collector": {

        "ifacePrefix": ["eth", "em"] # 默認配置只會采集網卡名稱前綴是eth、em的網卡流量,配置為空就會采集所有的,lo的也會采集。可以從/proc/net/dev看到各個網卡的流量信息

    },

    "ignore": { # 默認采集了200多個metric,可以通過ignore設置為不采集

        "cpu.busy": true,

        "mem.swapfree": true

    }

}

agent 和HBS 通信

每隔一分鍾,Agent會與HBS進行一系列RPC通信,上報自己的狀態,並且獲取一些自己需要的數據。

  • 向HBS匯報的數據:

    • HostName

    • IP (cfg中的IP,或者本機的IP)

    • Agent版本

    • Plugin版本(腳本所在git目錄的版本,git rev-parse HEAD)

  • 從HBS獲取的數據:

    • Plugin信息,需要以什么頻率運行什么腳本

    • 內置采集信息

      • URL_CHECK_HEALTH,需要定期檢查哪些URL

      • NET_PORT_LISTEN,需要檢查哪些端口的存活

      • DU_BS,需要檢查哪些文件夾的占用空間

      • PROC_NUM,需要檢查哪些進程的存活

    • 信任的IP列表(執行遠程命令時需要檢查)

agent HTTP API

提供如下功能:

  • Admin命令

    • Agent進程退出

    • 重新加載配置

    • 返回工作目錄

    • 返回信任的IP列表)

    • 返回目前采集的數據CPU、磁盤、IO、內存……

  • Plugin(使用git同步遠端的腳本)

  • 接收其它模塊Push數據

  • 運行任意用戶命令

    運行系統命令:date, uptime, loadavg


http://127.0.0.1:1988/exit

http://127.0.0.1:1988/config/reload

http://127.0.0.1:1988/workdir

http://127.0.0.1:1988/ips

http://127.0.0.1:1988/proc/cpu/num

http://127.0.0.1:1988/proc/cpu/mhz

http://127.0.0.1:1988/page/cpu/usage

http://127.0.0.1:1988/proc/cpu/usage

http://127.0.0.1:1988/page/df

http://127.0.0.1:1988/health

http://127.0.0.1:1988/version

http://127.0.0.1:1988/page/diskio

http://127.0.0.1:1988/proc/kernel/hostname

http://127.0.0.1:1988/proc/kernel/maxproc

http://127.0.0.1:1988/proc/kernel/maxfiles

http://127.0.0.1:1988/proc/kernel/version

http://127.0.0.1:1988/page/memory

http://127.0.0.1:1988/proc/memory

http://127.0.0.1:1988/

http://127.0.0.1:1988/plugin/update

http://127.0.0.1:1988/plugin/reset

http://127.0.0.1:1988/plugins

http://127.0.0.1:1988/v1/push

http://127.0.0.1:1988/system/date

http://127.0.0.1:1988/page/system/uptime

http://127.0.0.1:1988/proc/system/uptime

http://127.0.0.1:1988/page/system/loadavg

http://127.0.0.1:1988/proc/system/loadavg

上報的數據格式:

通過在transfer 的8433端口抓包拿到了agent上報數據的格式


{"method":"Transfer.Update","params":[[{"endpoint":"open-falcon-1","metric":"rate","value":0.016666596005299582,"step":60,"counterType":"GAUGE","tags":"name=pfc.push.cnt","timestamp":1491879

    120},{"endpoint":"open-falcon-1","metric":"sum","value":76,"step":60,"counterType":"GAUGE","tags":"name=pfc.push.cnt","timestamp":1491879120},{"endpoint":"open-falcon-1","metric":"value","value":4,"st

    ep":60,"counterType":"GAUGE","tags":"name=pfc.push.ms","timestamp":1491879120},{"endpoint":"open-falcon-1","metric":"value","value":4,"step":60,"counterType":"GAUGE","tags":"name=pfc.push.size","times

    tamp":1491879120}]],"id":23}

其中,Step和CounterType中RRD中的概念。Step就是數據采集的間隔,單位為秒。而CounterType分為五個類型,分別如下表:

  • COUNTER: 必須是遞增的,除非是計數器溢出(overflows)。在這種情況下,RRDtool 會自動修改收到的值。例如網絡接口流量、收到的packets 數量都屬於這一類型。

  • DERIVE: 和 COUNTER 類似。但可以是遞增,也可以遞減,或者一會增加一會兒減少。

  • ABSOLUTE: ABSOLUTE 比較特殊,它每次都假定前一個interval的值是0,再計算平均值。

  • GAUGE: GAGUE 和上面三種不同,它沒有“平均”的概念,RRDtool 收到值之后字節存入 RRA 中。

  • COMPUTE: COMPUTE 比較特殊,它並不接受輸入,它的定義是一個表達式,能夠引用其他DS並自動計算出某個值。

agent 和transfer底層鏈接

  • agent和transfer 之間數據交互采用長連接方式

  • agent剛啟動之后,不會立即和transfer建立鏈接,而是在第一次上報數據的時候經過tcp 三次握手之后建立,此后保持鏈接不斷

  • agent 上報完數據之后,transfer 會返回給agent 上報的結果


2017/04/11 11:11:00 var.go:56: => <Total=4> <Endpoint:open-falcon-1, Metric:rate, Type:GAUGE, Tags:name=pfc.push.cnt, Step:60, Time:1491880260, Value:0.016666685985855727>

2017/04/11 11:11:00 var.go:63: <= <Total=4, Invalid:0, Latency=0ms, Message:ok>

2017/04/11 11:11:27 var.go:56: => <Total=7> <Endpoint:open-falcon-1, Metric:df.bytes.free.percent, Type:GAUGE, Tags:mount=/,fstype=ext4, Step:60, Time:1491880287, Value:95.25614893427964>

2017/04/11 11:11:27 var.go:56: => <Total=6> <Endpoint:open-falcon-1, Metric:ss.estab, Type:GAUGE, Tags:, Step:60, Time:1491880287, Value:57>

2017/04/11 11:11:27 var.go:63: <= <Total=7, Invalid:0, Latency=0ms, Message:ok>

2017/04/11 11:11:27 var.go:63: <= <Total=6, Invalid:0, Latency=0ms, Message:ok>

2017/04/11 11:11:27 var.go:56: => <Total=88> <Endpoint:open-falcon-1, Metric:agent.alive, Type:GAUGE, Tags:, Step:60, Time:1491880287, Value:1>

2017/04/11 11:11:27 var.go:63: <= <Total=88, Invalid:0, Latency=0ms, Message:ok>


##agent 和transfer建立tcp 鏈接

11:11:00.003435 IP localhost.53889 > localhost.8433: Flags [S], seq 860978551, win 32792, options [mss 16396,sackOK,TS val 5479392 ecr 0,nop,wscale 7], length 0

11:11:00.003457 IP localhost.8433 > localhost.53889: Flags [S.], seq 3616557726, ack 860978552, win 32768, options [mss 16396,sackOK,TS val 5479392 ecr 5479392,nop,wscale 7], length 0

11:11:00.003474 IP localhost.53889 > localhost.8433: Flags [.], ack 1, win 257, options [nop,nop,TS val 5479392 ecr 5479392], length 0



#agent 第一次上報數據

11:11:00.004004 IP localhost.53889 > localhost.8433: Flags [P.], seq 1:619, ack 1, win 257, options [nop,nop,TS val 5479393 ecr 5479392], length 618

11:11:00.004180 IP localhost.8433 > localhost.53889: Flags [.], ack 619, win 266, options [nop,nop,TS val 5479393 ecr 5479393], length 0

11:11:00.004976 IP localhost.8433 > localhost.53889: Flags [P.], seq 1:83, ack 619, win 266, options [nop,nop,TS val 5479394 ecr 5479393], length 82

11:11:00.005027 IP localhost.53889 > localhost.8433: Flags [.], ack 83, win 257, options [nop,nop,TS val 5479394 ecr 5479394], length 0



#agent 第二次上報數據,此次上報的數據tcp 交互不再是連續的,和日志相對應

11:11:27.387968 IP localhost.53889 > localhost.8433: Flags [P.], seq 619:1816, ack 83, win 257, options [nop,nop,TS val 5506777 ecr 5479394], length 1197

11:11:27.388750 IP localhost.8433 > localhost.53889: Flags [P.], seq 83:165, ack 1816, win 285, options [nop,nop,TS val 5506778 ecr 5506777], length 82

11:11:27.388758 IP localhost.53889 > localhost.8433: Flags [.], ack 165, win 257, options [nop,nop,TS val 5506778 ecr 5506778], length 0

11:11:27.397886 IP localhost.53889 > localhost.8433: Flags [P.], seq 1816:2631, ack 165, win 257, options [nop,nop,TS val 5506787 ecr 5506778], length 815

11:11:27.398225 IP localhost.8433 > localhost.53889: Flags [P.], seq 165:247, ack 2631, win 304, options [nop,nop,TS val 5506787 ecr 5506787], length 82

11:11:27.437698 IP localhost.53889 > localhost.8433: Flags [.], ack 247, win 257, options [nop,nop,TS val 5506827 ecr 5506787], length 0

11:11:27.472026 IP localhost.53889 > localhost.8433: Flags [P.], seq 2631:15063, ack 247, win 257, options [nop,nop,TS val 5506861 ecr 5506787], length 12432

11:11:27.474822 IP localhost.8433 > localhost.53889: Flags [P.], seq 247:330, ack 15063, win 384, options [nop,nop,TS val 5506863 ecr 5506861], length 83

11:11:27.474837 IP localhost.53889 > localhost.8433: Flags [.], ack 330, win 257, options [nop,nop,TS val 5506863 ecr 5506863], length 0




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM