<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          categraf監(jiān)控采集 Agent

          聯(lián)合創(chuàng)作 · 2023-09-27 08:31

          Categraf 是一個(gè)監(jiān)控采集 Agent,類似 Telegraf、Grafana-Agent、Datadog-Agent,希望對所有常見監(jiān)控對象提供監(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 和 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)境可能會部署特別多的 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ū)相對割裂。

          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ù)無需采集,針對可能會對時(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)境。

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

          在目標(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 就會忽略這個(gè)采集器。

          測試

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

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

          如果修改了某個(gè)采集器的配置,需要重啟 categraf 或者給 categraf 進(jìn)程發(fā)送HUP信號,發(fā)送HUP信號的命令,舉例:kill -HUPpidof 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 目錄下的對應(yīng)采集器的代碼,Go 的代碼非常易讀,比如某個(gè)配置不知道是做什么的,去采集器代碼里搜索相關(guān)配置項(xiàng),很容易就可以找到答案。

          配置說明

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

          [global]
          # 啟動(dòng)的時(shí)候是否在stdout中打印配置內(nèi)容
          print_configs = false
          
          # 機(jī)器名,作為本機(jī)的唯一標(biāo)識,會為時(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è)變量,就會自動(dòng)替換
          # $hostname 自動(dòng)替換為本機(jī)機(jī)器名,$ip 自動(dòng)替換為本機(jī)IP
          # 建議大家使用 --test 做一下測試,看看輸出的內(nèi)容是否符合預(yù)期
          hostname = ""
          
          # 是否忽略主機(jī)名的標(biāo)簽,如果設(shè)置為true,時(shí)序數(shù)據(jù)中就不會自動(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)簽會自動(dòng)附到時(shí)序數(shù)據(jù)上
          # [global.labels]
          # region = "shanghai"
          # env = "localhost"
          
          # 發(fā)給后端的時(shí)序數(shù)據(jù),會先被扔到 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
          

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

          interval

          每個(gè)插件的配置中,一開始通常都是 interval 配置,表示采集頻率,如果這個(gè)配置注釋掉了,就會復(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)控的采集插件,想對4個(gè)IP做PING探測,可以按照下面的方式來配置:

          [[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 是附到對應(yīng)的實(shí)例上,global.labels 是附到所有時(shí)序數(shù)據(jù)上

          工作計(jì)劃

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

          • [x] system
          • [x] kernel
          • [x] kernel_vmstat
          • [x] linux_sysctl_fs
          • [x] cpu
          • [x] mem
          • [x] net
          • [x] netstat
          • [x] disk
          • [x] diskio
          • [x] ntp
          • [x] processes
          • [x] exec
          • [x] ping
          • [x] http_response
          • [x] net_response
          • [x] procstat
          • [x] mysql
          • [x] redis
          • [x] oracle
          • [x] rabbitmq
          • [x] prometheus
          • [x] tomcat
          • [x] 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

           

          瀏覽 31
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产在线最新地址 | 北条麻妃中文字幕黄色片子 | 天天搞天天拍 | 亚洲成人欧美 | 三区在线视频观看 |