<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)控發(fā)布新輪子

          共 6676字,需瀏覽 14分鐘

           ·

          2022-06-12 22:31

          簡(jiǎn)介

          Categraf 是夜鶯監(jiān)控的默認(rèn)數(shù)據(jù)采集 Agent,主打開(kāi)箱即用和all-in-one,同時(shí)支持對(duì)metrics、log、trace 的收集,由夜鶯監(jiān)控核心開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā)。


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

          • 中國(guó)計(jì)算學(xué)會(huì)確實(shí)開(kāi)源平臺(tái):

              • https://www.gitlink.org.cn/flashcat/categraf 

          • Github:

              • https://github.com/flashcatcloud/categraf


          對(duì)比

          categraf和telegraf、exporters、grafana-agent、datadog-agent 有什么異同?


          telegraf 是 influxdb 生態(tài)的產(chǎn)品,因?yàn)?influxdb 是支持字符串?dāng)?shù)據(jù)的,所以 telegraf 采集的很多 field 是字符串類(lèi)型;另外 influxdb 的設(shè)計(jì),允許 labels 是非穩(wěn)態(tài)結(jié)構(gòu),比如 result_code 標(biāo)簽,有時(shí)其 value 是 0,有時(shí)其 value 是 1,在 influxdb 中都可以接受而在 prometheus 中不能很好支持;第三,telegraf從根本上缺乏對(duì)于service discovery 和 relabel 的支持。 這些都導(dǎo)致 telegraf 與 prometheus 生態(tài)的兼容性不佳。


          prometheus 生態(tài)有各種 exporters,但是設(shè)計(jì)邏輯都是一個(gè)監(jiān)控類(lèi)型一個(gè) exporter,甚至一個(gè)實(shí)例一個(gè) exporter,生產(chǎn)環(huán)境可能會(huì)部署特別多的 exporters,管理起來(lái)略麻煩。同時(shí)社區(qū)維護(hù)的很多exporter數(shù)據(jù)采集質(zhì)量參差不齊,缺乏治理,給后續(xù)使用帶來(lái)了很大的不便。


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


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


          Categraf 確實(shí)又是一個(gè)輪子,目標(biāo):

          • 采用 all-in-one 的設(shè)計(jì),所有的采集工作使用一個(gè) agent 來(lái)解決,包括metrics、log 和 trace ,并從數(shù)據(jù)采集的源頭建立起三者的關(guān)聯(lián)關(guān)系,保障好數(shù)據(jù)的質(zhì)量;
          • 開(kāi)箱即用:針對(duì)常用的采集對(duì)象,在提供采集能力的同時(shí),配套有默認(rèn)的監(jiān)控大盤(pán)和告警規(guī)則模板,用戶(hù)可以直接導(dǎo)入并使用;
          • 知識(shí)沉淀,盡可能落地最佳實(shí)踐,不需要采集的數(shù)據(jù)無(wú)需采集,針對(duì)可能會(huì)對(duì)時(shí)序庫(kù)造成高基數(shù)的問(wèn)題在采集側(cè)做出處理;
          • 兼容prometheus生態(tài),支持 remote_write 寫(xiě)入?yún)f(xié)議,支持將數(shù)據(jù)寫(xiě)入 promethues、M3DB、VictoriaMetrics、InfluxDB;
          • 指標(biāo)數(shù)據(jù)只采集數(shù)值,不采集字符串,標(biāo)簽維持穩(wěn)態(tài)結(jié)構(gòu);
          • 純 Go 代碼編寫(xiě),靜態(tài)編譯依賴(lài)少,容易分發(fā),易于安裝;


          Categraf 會(huì)作為快貓星云 SaaS 產(chǎn)品的重要組成部分,快貓星云技術(shù)團(tuán)隊(duì)也會(huì)投入研發(fā)力量,持續(xù)迭代。同時(shí),歡迎更多的公司、更多研發(fā)人員參與共建,做成國(guó)內(nèi)最開(kāi)放、最好用的采集器。


          安裝


          可以直接去 [categraf releases](https://www.gitlink.org.cn/flashcat/categraf/releases) 頁(yè)面,下載編譯好的二進(jìn)制,也可自行編譯,編譯只需要一條命令:`go build` 當(dāng)然,前提是機(jī)器上有 Go 環(huán)境。


          如果是從老版本升級(jí),也是建議大家查看 [categraf releases](https://www.gitlink.org.cn/flashcat/categraf/releases) 頁(yè)面,每個(gè)版本改動(dòng)了什么,升級(jí)時(shí)注意什么,都會(huì)在這里寫(xiě)清楚。


          在目標(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í)]( https://edu.51cto.com/course/31049.html )


          測(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),則說(shuō)明一切正常,否則就是哪里出了問(wèn)題,大概率是 `conf/input.mysql/mysql.toml` 配置的有問(wèn)題。


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


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


          插件說(shuō)明


          采集插件的代碼,在代碼的 inputs 目錄,每個(gè)插件一個(gè)獨(dú)立的目錄,目錄下是采集代碼,以及相關(guān)的監(jiān)控大盤(pán)JSON(如有)和告警規(guī)則JSON(如有),Linux相關(guān)的大盤(pán)和告警規(guī)則沒(méi)有散在 cpu、mem、disk等采集器目錄,而是一并放到了 system 目錄下,方便使用。


          插件的配置文件,放在conf目錄,以input.打頭,每個(gè)配置文件都有詳盡的注釋?zhuān)绻幻靼?,就直接去?inputs 目錄下的對(duì)應(yīng)采集器的代碼,Go 的代碼非常易讀,比如某個(gè)配置不知道是做什么的,去采集器代碼里搜索相關(guān)配置項(xiàng),很容易就可以找到答案。


          配置說(shuō)明


          這里對(duì) config.toml 的每項(xiàng)配置做出解釋?zhuān)?/span>

          [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 配置如果不為空,就使用用戶(hù)配置的內(nèi)容作為hostname# 用戶(hù)配置的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è),這些寫(xiě)的標(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ì)列最大長(zhǎng)度# batch 是每次從隊(duì)列中取多少條,發(fā)送給后端backend[writer_opt]# default: 2000batch = 2000# channel(as queue) sizechan_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 usernamebasic_auth_user = ""# Basic auth passwordbasic_auth_pass = ""# timeout settings, unit: mstimeout = 5000dial_timeout = 2500max_idle_conns_per_host = 100


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


          interval

          每個(gè)插件的配置中,一開(kāi)始通常都是 interval 配置,表示采集頻率,如果這個(gè)配置注釋掉了,就會(huì)復(fù)用 config.toml 中的采集頻率,這個(gè)配置如果配置成數(shù)字,單位就是秒,如果配置成字符串,就要給出單位,比如:

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

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


          • 秒:s

          • 分鐘:m

          • 小時(shí):h


          instances

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

          [[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 的作用類(lèi)似,只是生效范圍不同,都是為時(shí)序數(shù)據(jù)附加標(biāo)簽,instances 下面的 labels 是附到對(duì)應(yīng)的實(shí)例上,global.labels 是附到所有時(shí)序數(shù)據(jù)上。


          工作計(jì)劃

          categraf 已經(jīng)完成了一些常用的采集插件,還有很多需要繼續(xù)開(kāi)發(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)控大盤(pán)的配置和告警規(guī)則的配置,將JSON導(dǎo)入夜鶯就可以使用,至于有哪些插件提供了JSON配置,可以通過(guò)下面的方式找到:

          [root@master01 categraf]# find inputs -name "*.json"inputs/redis/alerts.jsoninputs/redis/dashboard.jsoninputs/system/dashboard.jsoninputs/system/alerts-linux.jsoninputs/oracle/dashboard.jsoninputs/ping/alerts.jsoninputs/ping/dashboard.jsoninputs/ntp/alerts.jsoninputs/procstat/alerts.jsoninputs/mysql/alerts.jsoninputs/mysql/dashboard.jsoninputs/tomcat/dashboard.jsoninputs/rabbitmq/dashboard.jsoninputs/http_response/alerts.jsoninputs/http_response/dashboard.jsoninputs/net_response/alerts.jsoninputs/net_response/dashboard.json
          繼續(xù)開(kāi)發(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


          往期推薦



          范型下,優(yōu)雅的 Lodash 風(fēng)


          ?

          API設(shè)計(jì)中性能提升的10個(gè)建議?


          直播預(yù)約 | JetBrains 碼上道:Go 語(yǔ)言的 netpoll 抽象與常見(jiàn)問(wèn)題

          想要了解Go更多內(nèi)容,歡迎掃描下方?? 關(guān)注 公眾號(hào),回復(fù)關(guān)鍵詞 [實(shí)戰(zhàn)群]  ,就有機(jī)會(huì)進(jìn)群和我們進(jìn)行交流~

          分享、在看與點(diǎn)贊,至少我要擁有一個(gè)叭~

          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  夜夜撸日日| 日本 国产 视频在线 | 亚洲丁香五月 | 天天av无码天天爽AV | 91免费成人电影 |