跳到主要内容

安装与注册

安装 agent、填夜莺的写入地址、确认主机出现在对象列表里。

这页办完你会得到:目标机器上跑着 Categraf,基础设施 → 设备列表 里能看到这台机器, 点开有 CPU、内存、操作系统这些元信息。大约 5 分钟。

Categraf 是夜莺推荐的采集器:一个二进制、 90 多个输入插件,按 Prometheus Remote Write 协议把指标推给夜莺。夜莺自己不采集任何东西。

开始之前​

  • 目标机器能访问夜莺的地址(默认 http://<夜莺IP>:17000);
  • 有 root 权限;
  • 夜莺已经起来了,还没起看快速开始。

路线一:从设备列表一键安装​

基础设施 → 设备列表,右上角 一键安装 Categraf。

1. 确认服务端地址。 弹窗第一项是「夜莺服务端地址」,默认取服务端自己识别到的地址。 被监控机器要能访问到它——反向代理后面这个地址常常推错(少了端口、协议成了 http), 不对就直接改。

2. 复制命令,去目标机器上以 root 执行。 命令长这样:

curl -sSfL 'http://10.0.0.10:17000/api/n9e/agents/categraf/install.sh' \
| sudo bash -s -- --server 'http://10.0.0.10:17000' --download-base 'http://10.0.0.10:17000'

服务端开了 Basic Auth 的话,弹窗里会多出用户名密码两格, 填完命令会自动带上 -u 和 --auth——不填的话装完是上报不了数据的。

不放心直接 pipe 给 bash,展开「高级选项」有分步版本:先下载、less 看一眼、再执行。

弹窗还会告诉你安装包从哪来:「安装包由服务端直接分发,被监控机器无需公网」 说明夜莺自带了安装包;「服务端未内置安装包」则说明目标机器需要能访问公网。

3. 等它上报。 弹窗第二步每 5 秒检测一次,看到「已检测到 N 台新机器上报」就成了。 关掉弹窗,设备列表会自动刷新。

Windows 机器不走这条路,手动装。

路线二:手动装​

从 GitHub Releases 下对应架构的包:

mkdir -p /opt/categraf && cd /opt/categraf
# 例:categraf-v0.5.17-linux-amd64.tar.gz
tar xzf categraf-<版本>-linux-amd64.tar.gz --strip-components=1

解开是一个二进制 categraf 加一个 conf/ 目录,conf/ 里有 config.toml、logs.toml 和一堆 input.<插件>/ 子目录。

两个必配项:writers 和 heartbeat​

改 conf/config.toml,只有两处必须动。包里自带的示例地址是 指向的是打包时残留的某台开发机,对你一定是无效的,必须改掉。

[[writers]]
# 指标往这里推。边缘模式下改成 n9e-edge 的地址
url = "http://10.0.0.10:17000/prometheus/v1/write"
basic_auth_user = ""
basic_auth_pass = ""
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

[heartbeat]
enable = true
# 心跳发到这里,机器靠它出现在设备列表
url = "http://10.0.0.10:17000/v1/n9e/heartbeat"
interval = 10

两者分工不同,缺一个会缺一块:

配置关掉之后
只关 heartbeat设备列表里还能看到这台机器(靠指标认出来),但 CPU、内存、系统这些元信息全是 unknown
只关 writers元信息齐全,但没有指标,机器上挂的标签也附不到指标上
都关设备列表里没有这台机器

夜莺的 agent 接口(写入和心跳)默认不开认证,basic_auth_user / basic_auth_pass 留空即可;服务端在 [HTTP.APIForAgent] 里打开了 BasicAuth,这两处才要填。

顺手可以配的还有两项:

[global]
# 采集周期,秒
interval = 15
# 机器名,留空取 os.Hostname()。支持 $hostname / $ip / $sn 和环境变量
hostname = ""

[global.labels]
# 挂在这台机器所有指标上的标签
# region = "bj"
# env = "prod"

hostname 就是这台机器在夜莺里的唯一标识(设备列表里的「标识」列)。 两台机器用同一个 hostname,夜莺只会有一条记录,两边的元信息互相覆盖,而且不会有任何告警—— 所以务必保证全局唯一。

装成系统服务​

Categraf 自带服务管理,不用自己写 unit 文件:

cd /opt/categraf
./categraf --install # 生成并注册 systemd 服务,名字就叫 categraf
./categraf --start
./categraf --status

生成的服务 WorkingDirectory 是二进制所在目录,启动参数是 -configs <目录>/conf, Restart=on-failure。卸载用 --remove。

日志默认打到 stdout,服务模式下就是 journal:

journalctl -u categraf -n 50

想落到文件,改 conf/config.toml 的 [log] file_name,填一个路径即可(自动轮转)。

一个必须知道的坑:Categraf 启动时会先把工作目录切到自己二进制所在的目录。 所以 --configs 用相对路径时,相对的是二进制所在目录,不是你当前 shell 的目录。 在别处调用它,一律用绝对路径:

/opt/categraf/categraf --configs /opt/categraf/conf --test --inputs cpu

确认主机出现在设备列表里​

基础设施 → 设备列表,应该能看到一行,「标识」列是你的 hostname。

表格里这几列是心跳带上来的,能一眼看出心跳通没通:

列说明
状态心跳新鲜度
AGENT版本categraf 的版本号
上报的标签[global.labels] 里配的那些
更新时间最近一次心跳
内存 / CPU元信息;显示 unknown 说明心跳没通
时间偏移夜莺机器的时间减去这台机器的时间
来源 IP心跳请求的来源地址

左侧概览里的「有心跳 / 无心跳 / 未上报」可以快速定位有问题的机器。

再确认指标也到了:数据查询 → 指标,数据源选 embedded-tsdb,查一条:

cpu_usage_active

有曲线,并且带着 agent_hostname 标签,就说明两条链路都通了。

下一步​