夜莺监控对接 Categraf 采集器
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",
]