開源一款監(jiān)控?cái)?shù)據(jù)采集器试躏,啥都能監(jiān)控

簡介

Categraf 是一個(gè)監(jiān)控采集 Agent,類似 Telegraf、Grafana-Agent祠汇、Datadog-Agent笛厦,希望對(duì)所有常見監(jiān)控對(duì)象提供監(jiān)控?cái)?shù)據(jù)采集能力瞎颗,采用 All-in-one 的設(shè)計(jì)您单,不但支持指標(biāo)采集栖袋,也希望支持日志和調(diào)用鏈路的數(shù)據(jù)采集。來自快貓研發(fā)團(tuán)隊(duì)芒帕,和 Open-Falcon、Nightingale 的研發(fā)是一撥人。

categraf的代碼托管在兩個(gè)地方:

對(duì)比

categraf 和 telegraf小作、exporters、grafana-agent持偏、datadog-agent 等的關(guān)系是什么?

telegraf 是 influxdb 生態(tài)的產(chǎn)品,因?yàn)?influxdb 是支持字符串?dāng)?shù)據(jù)的范抓,所以 telegraf 采集的很多 field 是字符串類型,另外 influxdb 的設(shè)計(jì)堂淡,允許 labels 是非穩(wěn)態(tài)結(jié)構(gòu)馋缅,比如 result_code 標(biāo)簽,有時(shí)其 value 是 0绢淀,有時(shí)其 value 是 1,在 influxdb 中都可以接受皆的。但是上面兩點(diǎn)费薄,在類似 prometheus 的時(shí)序庫中,處理起來就很麻煩楞抡。

prometheus 生態(tài)有各種 exporters,但是設(shè)計(jì)邏輯都是一個(gè)監(jiān)控類型一個(gè) exporter凳厢,甚至一個(gè)實(shí)例一個(gè) exporter竞慢,生產(chǎn)環(huán)境可能會(huì)部署特別多的 exporters筹煮,管理起來略麻煩。

grafana-agent import 了大量 exporters 的代碼败潦,沒有裁剪变屁,沒有優(yōu)化,沒有最佳實(shí)踐在產(chǎn)品上的落地疮胖,有些中間件闷板,仍然是一個(gè) grafana-agent 一個(gè)目標(biāo)實(shí)例,管理起來也很不方便性昭。

datadog-agent確實(shí)是集大成者县遣,但是大量代碼是 python 的汹族,整個(gè)發(fā)布包也比較大顶瞒,有不少歷史包袱元旬,而且生態(tài)上是自成一派,和社區(qū)相對(duì)割裂坑资。

categraf 確實(shí)又是一個(gè)輪子穆端,categraf 希望:

  • 支持 remote_write 寫入?yún)f(xié)議,支持將數(shù)據(jù)寫入 promethues字柠、M3DB狡赐、VictoriaMetrics枕屉、InfluxDB
  • 指標(biāo)數(shù)據(jù)只采集數(shù)值鲤氢,不采集字符串,標(biāo)簽維持穩(wěn)態(tài)結(jié)構(gòu)
  • 采用 all-in-one 的設(shè)計(jì)哨颂,所有的采集工作用一個(gè) agent 搞定相种,未來也可以把日志和 trace 的采集納入 agent
  • 純 Go 代碼編寫寝并,靜態(tài)編譯依賴少,容易分發(fā)斤蔓,易于安裝
  • 盡可能落地最佳實(shí)踐镀岛,不需要采集的數(shù)據(jù)無需采集友驮,針對(duì)可能會(huì)對(duì)時(shí)序庫造成高基數(shù)的問題在采集側(cè)做出處理
  • 常用的采集器喇伯,不但提供采集能力稻据,還要整理出監(jiān)控大盤和告警規(guī)則,用戶可以直接導(dǎo)入使用
  • 未來希望作為快貓 SaaS 產(chǎn)品的重要組成部分匆赃,引入快貓團(tuán)隊(duì)的研發(fā)力量持續(xù)迭代今缚,當(dāng)然,希望更多的公司瞬项、更多人研發(fā)人員參與共建何荚,做成國內(nèi)最開放餐塘、最好用的采集器

安裝

可以直接去 categraf releases 頁面,下載編譯好的二進(jìn)制税手,也可自行編譯需纳,編譯只需要一條命令:go build 當(dāng)然,前提是機(jī)器上有 Go 環(huán)境兵扬。

如果是從老版本升級(jí)慌盯,也是建議大家查看 categraf releases 頁面亚皂,每個(gè)版本改動(dòng)了什么,升級(jí)時(shí)注意什么狞谱,都會(huì)在這里寫清楚。

在目標(biāo)機(jī)器部署孵睬,只需要 categraf 二進(jìn)制伶跷、以及 conf 目錄,conf 下有一個(gè)主配置文件:config.toml蹈集,定義機(jī)器名雇初、全局采集頻率靖诗、全局附加標(biāo)簽、remote write backend地址等鄙才;另外就是各種采集插件的配置目錄伤为,以input.打頭据途,如果某個(gè)采集器 xx 不想啟用颖医,把 input.xx 改個(gè)其他前綴,比如 bak.input.xx糖驴,categraf 就會(huì)忽略這個(gè)采集器佛致。

conf 目錄下還提供了 categraf.service 文件樣例俺榆,便于大家使用 systemd 托管 categraf。如果對(duì) systemd 不熟悉定嗓,建議學(xué)習(xí)一下課程:Linux進(jìn)階知識(shí)

測(cè)試

我們經(jīng)常會(huì)需要測(cè)試某個(gè)采集器的行為,臨時(shí)看一下這個(gè)采集器輸出哪些監(jiān)控指標(biāo)凌简,比如配置好了 conf/input.mysql/mysql.toml 想要看看采集了哪些 mysql 指標(biāo)恃逻,可以執(zhí)行命令:./categraf --test --inputs mysql

這個(gè)命令會(huì)去連接你配置的 mysql 實(shí)例,執(zhí)行SQL收集輸出畔派,將輸出的內(nèi)容做格式轉(zhuǎn)換线椰,最終打印到 stdout尘盼,如果我們?cè)?stdout 正常看到了 mysql 相關(guān)監(jiān)控指標(biāo)配紫,則說明一切正常午阵,否則就是哪里出了問題底桂,大概率是 conf/input.mysql/mysql.toml 配置的有問題。

如果修改了某個(gè)采集器的配置于个,需要重啟 categraf 或者給 categraf 進(jìn)程發(fā)送HUP信號(hào)暮顺,發(fā)送HUP信號(hào)的命令捶码,舉例:

kill -HUP `pidof categraf`

另外,categraf 支持哪些命令行參數(shù)档押,可以通過 ./categraf --help 查看

插件說明

采集插件的代碼,在代碼的 inputs 目錄洞就,每個(gè)插件一個(gè)獨(dú)立的目錄掀淘,目錄下是采集代碼革娄,以及相關(guān)的監(jiān)控大盤JSON(如有)和告警規(guī)則JSON(如有),Linux相關(guān)的大盤和告警規(guī)則沒有散在 cpu匆浙、mem厕妖、disk等采集器目錄言秸,而是一并放到了 system 目錄下,方便使用查排。

插件的配置文件抄沮,放在conf目錄,以input.打頭砂代,每個(gè)配置文件都有詳盡的注釋泊藕,如果整不明白难礼,就直接去看 inputs 目錄下的對(duì)應(yīng)采集器的代碼玫锋,Go 的代碼非常易讀撩鹿,比如某個(gè)配置不知道是做什么的,去采集器代碼里搜索相關(guān)配置項(xiàng)键思,很容易就可以找到答案。

配置說明

這里對(duì) config.toml 的每項(xiàng)配置做出解釋:

[global]
# 啟動(dòng)的時(shí)候是否在stdout中打印配置內(nèi)容
print_configs = false

# 機(jī)器名看蚜,作為本機(jī)的唯一標(biāo)識(shí)供炎,會(huì)為時(shí)序數(shù)據(jù)自動(dòng)附加一個(gè) agent_hostname=$hostname 的標(biāo)簽
# hostname 配置如果為空疾党,自動(dòng)取本機(jī)的機(jī)器名
# hostname 配置如果不為空,就使用用戶配置的內(nèi)容作為hostname
# 用戶配置的hostname字符串中竭钝,可以包含變量蜓氨,目前支持兩個(gè)變量队伟,
# $hostname 和 $ip嗜侮,如果字符串中出現(xiàn)這兩個(gè)變量,就會(huì)自動(dòng)替換
# $hostname 自動(dòng)替換為本機(jī)機(jī)器名顷霹,$ip 自動(dòng)替換為本機(jī)IP
# 建議大家使用 --test 做一下測(cè)試击吱,看看輸出的內(nèi)容是否符合預(yù)期
hostname = ""

# 是否忽略主機(jī)名的標(biāo)簽覆醇,如果設(shè)置為true,時(shí)序數(shù)據(jù)中就不會(huì)自動(dòng)附加agent_hostname=$hostname 的標(biāo)簽
omit_hostname = false

# 時(shí)序數(shù)據(jù)的時(shí)間戳使用ms還是s袍辞,默認(rèn)是ms常摧,是因?yàn)閞emote write協(xié)議使用ms作為時(shí)間戳的單位
precision = "ms"

# 全局采集頻率,15秒采集一次
interval = 15

# 全局附加標(biāo)簽肚豺,一行一個(gè)界拦,這些寫的標(biāo)簽會(huì)自動(dòng)附到時(shí)序數(shù)據(jù)上
# [global.labels]
# region = "shanghai"
# env = "localhost"

# 發(fā)給后端的時(shí)序數(shù)據(jù),會(huì)先被扔到 categraf 內(nèi)存隊(duì)列里呛谜,每個(gè)采集插件一個(gè)隊(duì)列
# chan_size 定義了隊(duì)列最大長度
# batch 是每次從隊(duì)列中取多少條隐岛,發(fā)送給后端backend
[writer_opt]
# default: 2000
batch = 2000
# channel(as queue) size
chan_size = 10000

# 后端backend配置瓷翻,在toml中 [[]] 表示數(shù)組齐帚,所以可以配置多個(gè)writer
# 每個(gè)writer可以有不同的url,不同的basic auth信息
[[writers]]
url = "http://127.0.0.1:19000/prometheus/v1/write"

# Basic auth username
basic_auth_user = ""

# Basic auth password
basic_auth_pass = ""

# timeout settings, unit: ms
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

對(duì)于每個(gè)采集器的配置湘今,不在這里一一贅述摩瞎,只講一些相對(duì)通用的配置項(xiàng)孝常。

interval

每個(gè)插件的配置中,一開始通常都是 interval 配置上渴,表示采集頻率稠氮,如果這個(gè)配置注釋掉了洛巢,就會(huì)復(fù)用 config.toml 中的采集頻率稿茉,這個(gè)配置如果配置成數(shù)字,單位就是秒恃慧,如果配置成字符串渺蒿,就要給出單位茂装,比如:

interval = 60
interval = "60s"
interval = "1m"

上面三種寫法,都表示采集頻率是1分鐘,如果是使用字符串胚嘲,可以使用的單位有:

  • 秒:s
  • 分鐘:m
  • 小時(shí):h

instances

很多采集插件的配置中,都有 instances 配置段屋摇,用 [[]] 包住幽邓,說明是數(shù)組牵舵,即,可以出現(xiàn)多個(gè) [[instances]] 配置段白修,比如 ping 監(jiān)控的采集插件,想對(duì)4個(gè)IP做PING探測(cè)窥浪,可以按照下面的方式來配置:

[[instances]]
targets = [
    "www.baidu.com",
    "127.0.0.1",
    "10.4.5.6",
    "10.4.5.7"
]

也可以下面這樣子配置:

[[instances]]
targets = [
    "www.baidu.com",
    "127.0.0.1"
]

[[instances]]
targets = [
    "10.4.5.6",
    "10.4.5.7"
]

interval_times

instances 下面如果有 interval_times 配置漾脂,表示 interval 的倍數(shù)骨稿,比如ping監(jiān)控姜钳,有些地址采集頻率是15秒哥桥,有些可能想采集的別太頻繁激涤,比如30秒倦踢,那就可以把interval配置成15,把不需要頻繁采集的那些instances的interval_times配置成2

或者:把interval配置成5犁嗅,需要15秒采集一次的那些instances的interval_times配置成3愧哟,需要30秒采集一次的那些instances的interval_times配置成6

labels

instances 下面的 labels 和 config.toml 中的 global.labels 的作用類似哼蛆,只是生效范圍不同腮介,都是為時(shí)序數(shù)據(jù)附加標(biāo)簽,instances 下面的 labels 是附到對(duì)應(yīng)的實(shí)例上甘改,global.labels 是附到所有時(shí)序數(shù)據(jù)上

工作計(jì)劃

categraf 已經(jīng)完成了一些常用的采集插件十艾,還有很多需要繼續(xù)開發(fā)腾节,歡迎大家共建補(bǔ)充案腺,已經(jīng)完成的采集插件包括:

  • system
  • kernel
  • kernel_vmstat
  • linux_sysctl_fs
  • cpu
  • mem
  • net
  • netstat
  • disk
  • diskio
  • ntp
  • processes
  • exec
  • ping
  • http_response
  • net_response
  • procstat
  • mysql
  • redis
  • oracle
  • rabbitmq
  • prometheus
  • tomcat
  • nvidia_smi

部分采集器不但提供了采集能力劈榨,還提供了監(jiān)控大盤的配置和告警規(guī)則的配置同辣,將JSON導(dǎo)入夜鶯就可以使用惭载,至于有哪些插件提供了JSON配置棕兼,可以通過下面的方式找到:

[root@master01 categraf]# find inputs -name "*.json"
inputs/redis/alerts.json
inputs/redis/dashboard.json
inputs/system/dashboard.json
inputs/system/alerts-linux.json
inputs/oracle/dashboard.json
inputs/ping/alerts.json
inputs/ping/dashboard.json
inputs/ntp/alerts.json
inputs/procstat/alerts.json
inputs/mysql/alerts.json
inputs/mysql/dashboard.json
inputs/tomcat/dashboard.json
inputs/rabbitmq/dashboard.json
inputs/http_response/alerts.json
inputs/http_response/dashboard.json
inputs/net_response/alerts.json
inputs/net_response/dashboard.json

還需要繼續(xù)開發(fā)的包括:

  • k8s solution
  • nginx vts
  • mongodb
  • rocketmq
  • activemq
  • kafka
  • elasticsearch
  • prometheus discovery
  • windows
  • mssql
  • iis
  • weblogic
  • was
  • hadoop
  • ad
  • zookeeper
  • statsd
  • snmp
  • ipmi
  • smartctl
  • logging
  • trace

更多信息

如果還有問題靶衍,可以到 FAQ 中查找,我們會(huì)持續(xù)補(bǔ)充 FAQ 的內(nèi)容蜈出,如果想加交流群铡原,可以加我的微信:UlricGO 備注: Categraf加群+姓名+公司

本文由mdnice多平臺(tái)發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末商叹,一起剝皮案震驚了整個(gè)濱河市剖笙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌过蹂,老刑警劉巖酷勺,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脆诉,死亡現(xiàn)場(chǎng)離奇詭異坦报,居然都是意外死亡片择,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門啰挪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亡呵,你說我怎么就攤上這事抽活。” “怎么了锰什?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵下硕,是天一觀的道長。 經(jīng)常有香客問我汁胆,道長梭姓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任嫩码,我火速辦了婚禮,結(jié)果婚禮上铸题,老公的妹妹穿的比我還像新娘铡恕。我一直安慰自己,他們只是感情好丢间,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布探熔。 她就那樣靜靜地躺著,像睡著了一般千劈。 火紅的嫁衣襯著肌膚如雪祭刚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天墙牌,我揣著相機(jī)與錄音涡驮,去河邊找鬼。 笑死喜滨,一個(gè)胖子當(dāng)著我的面吹牛捉捅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虽风,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棒口,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了辜膝?” 一聲冷哼從身側(cè)響起无牵,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厂抖,沒想到半個(gè)月后茎毁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年七蜘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谭溉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橡卤,死狀恐怖扮念,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碧库,我是刑警寧澤柜与,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站谈为,受9級(jí)特大地震影響旅挤,放射性物質(zhì)發(fā)生泄漏踢关。R本人自食惡果不足惜伞鲫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望签舞。 院中可真熱鬧秕脓,春花似錦、人聲如沸儒搭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搂鲫。三九已至傍药,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魂仍,已是汗流浹背拐辽。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擦酌,地道東北人俱诸。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像赊舶,于是被迫代替她去往敵國和親睁搭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容