使用 Categraf 作為夜鶯監控的採集器,採集指標、日誌等資料,與夜鶯專案絲滑對接。Categraf 是一個開源的採集器,支援 Prometheus remote write 協定。

Categraf 是一個可以採集指標和日誌的 agent,部署到所有待監控的目標機器上。Categraf 可以採集指標和日誌,指標推給夜鶯,日誌推給 Kafka。我們推薦使用 Categraf 作為夜鶯監控的採集器。

Categraf 對接夜鶯

關鍵是兩個設定項(Categraf 的 conf 目錄下的 config.toml),一個是 heartbeat 設定,一個是 writer 設定。

  • Categraf 週期性向夜鶯發送心跳,即呼叫夜鶯的 heartbeat 介面,上報本機的元資訊。之後可以在夜鶯的機器列表裡看到機器,點擊機器會展示這些元資訊。
  • Categraf 根據 conf 目錄下各個 input. 開頭的外掛設定,採集監控指標資料,然後通過 Prometheus remote write 協定,將指標資料推送給夜鶯,即夜鶯的 /prometheus/v1/write 介面。

具體設定項如下。

設定

Categraf 的設定檔:conf/config.toml,關鍵設定如下。更詳細的設定請參看這裡

[writer_opt]
# default: 2000
batch = 2000
# channel(as queue) size
chan_size = 10000

[[writers]]
### !!!! 这里就是夜莺的 Prometheus remote write 接口 !!!!###
### 如果是边缘模式,请改为边缘机房的 n9e-edge 地址 ###
url = "http://N9E:17000/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

[heartbeat]
enable = true

### !!!! 这里就是夜莺的 heartbeat 接口 !!!!###
### 如果是边缘模式,请改为边缘机房的 n9e-edge 地址 ###
url = "http://N9E:17000/v1/n9e/heartbeat"

# interval, unit: s
interval = 10

# Basic auth username
basic_auth_user = ""

# Basic auth password
basic_auth_pass = ""

## Optional headers
# headers = ["X-From", "categraf", "X-Xyz", "abc"]

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

FAQ

Categraf writer url 可以設定為時序資料庫嗎?

可以,writer url 可以設定為任何支援 Prometheus remote write 協定的時序資料庫,比如 Prometheus、VictoriaMetrics、Thanos、Cortex 等。但是,這樣一來,Categraf 採集的監控資料就不流經夜鶯了,夜鶯裡給機器打的標籤就無法附加到時序資料上了。告警自癒功能也會受影響。

Categraf heartbeat 和 writer 可以關閉或直接推給時序資料庫嗎?

  • 如果 writer 和 heartbeat 都關閉了或沒有發給夜鶯,夜鶯的機器列表裡就看不到這台機器了
  • 如果 writer 發給夜鶯,heartbeat 關閉了,夜鶯的機器列表裡可以看到這台機器,但是看不到元資訊,表格裡看到一堆 unknown 欄位
  • 如果 heartbeat 發給夜鶯,writer 關閉了或發給其他時序資料庫了,夜鶯的機器列表裡可以看到這台機器和元資訊,但是指標沒有流經夜鶯,所以無法給機器相關的指標附加標籤(機器列表裡給機器附加的標籤可以最終附加到指標上),也會影響告警自癒。
  • 通常,heartbeat 和 writer 都應該設定為夜鶯的位址,這樣才最方便

可以這麼理解:

  • 如果用了夜鶯和 Categraf,Categraf 的 heartbeat 和 writer 都應該發給夜鶯
  • 如果不想用夜鶯,只想用 Categraf 的採集能力,可以關閉 heartbeat,把 writer 發給其他時序資料庫

習慣了使用 Exporter,Categraf 還需要嗎?

我們建議,機器相關的監控指標至少使用 Categraf 採集,機器元資訊使用 Categraf 上報,Categraf 和夜鶯對接還能實現指令碼下發告警自癒能力。

至於 MySQL、Redis、Oracle、ElasticSearch、Kafka 等各類監控物件的資料採集,您也可以使用 Categraf,也可以使用您熟悉的其他採集器。

Categraf 如何監控多個目標?

比如有多個 MySQL 執行個體要監控,或者有多個程序要監控,應該如何設定?

Categraf 大部分外掛的範例設定裡都有一個 [[instances]] 的設定段,但凡有這個設定段的外掛,就可以通過增加 [[instances]] 來監控多個目標。Categraf 的設定檔是 toml 格式,雙中括號表示陣列。比如 MySQL 外掛的設定範例:

[[instances]]
address = "10.1.2.3:3306"
username = "categraf"
password = "XXXXXXXX"
labels = { instance="n9e-mysql-01" }

[[instances]]
address = "10.1.2.4:3306"
username = "categraf"
password = "XXXXXXXX"
labels = { instance="n9e-mysql-02" }

再比如程序監控外掛 procstat 的設定範例:

[[instances]]
search_exec_substring = "mysqld"
gather_total = true
gather_per_pid = true
gather_more_metrics = [
    "threads",
    "fd",
    "io",
    "uptime",
    "cpu",
    "mem",
    "limit",
]

[[instances]]
search_exec_substring = "n9e-plus"
gather_total = true
gather_per_pid = true
gather_more_metrics = [
    "threads",
    "fd",
    "io",
    "uptime",
    "cpu",
    "mem",
    "limit",
]

常見問題

Q1:Categraf 和 Telegraf 選哪個?

A:

  • Categraf:FlashCat 主導維護,對 n9e 相容性最好,推薦
  • Telegraf:InfluxData 維護,外掛最齊全,老使用者繼續用沒問題。

新部署一律推薦 Categraf。

Q2:Categraf 裝在容器裡能監控宿主機嗎?

A:可以 — 容器啟動時 volume mount 宿主機的 /proc/sys 到容器內,並設定 Categraf 讀取這些路徑。具體看 Categraf 文件的「容器化部署」章節。

Q3:升級 Categraf 版本?

A:PLUS 使用者可以從夜鶯機器列表的「升級 Agent」功能遠端升級;社群版需要登入每台機器手工升級。

參考資料

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云