接入数据源
根据「项目介绍」中的架构介绍,上面的方式搭建的夜莺,只是作为一个告警引擎使用,此时你可以在页面(注意,这里是页面)上添加数据源(菜单路径:系统配置-数据源),看图、配置告警规则。如果想要用夜莺来接收监控数据并转存到时序库,那就得通过配置文件(注意,这里是配置文件)告诉夜莺时序库的地址在哪里。还记得之前的架构图不?
在这个架构下,夜莺进程有两个角色,一个是作为告警引擎,一个是作为数据转发的 pushgateway,这里首先需要一个时序库,可以使用 Prometheus 或 VictoriaMetrics(推荐)。夜莺接收到数据之后会通过 remote write 方式转发给时序库。
1 部署时序库
1.1 Prometheus
Prometheus 的搭建,这里不再赘述,网上资料很多,比如可以参考 这里。唯一要注意的时候,启动 Prometheus 的时候需要传入一个参数:--web.enable-remote-write-receiver
,只有开了这个参数(老版本的参数是 --enable-feature=remote-write-receiver
,可以通过 ./prometheus --help
查看你的 Prometheus 的配置方式),Prometheus 才能通过 remote write 方式接收监控数据,否则后面跟夜莺对接的话会报接口 404。
如果你之前已经有 Prometheus 了,可以直接使用(记得检查是否开启了 --web.enable-remote-write-receiver
),如果之前没有 Prometheus,那就不用安装了,直接使用 VictoriaMetrics。
1.2 VictoriaMetrics
VictoriaMetrics 的搭建,更为简单,从 VictoriaMetrics github releases 下载对应平台的发布包,解压缩里边只有一个二进制,执行 ./victoria-metrics-prod
即可启动,生产环境建议使用 systemd 托管,这里提供一个 systemd 的 service 文件供大家参考:
下载下面的链接:
# 解压
tar xf victoria-metrics-linux-amd64-v1.93.16.tar.gz
root@n9e:~/vm# ll
total 31520
drwxr-xr-x 2 root root 4096 Aug 1 15:10 ./
drwx------ 8 root root 4096 Aug 1 15:07 ../
-rwxr-xr-x 1 zhang zhang 21211696 Jul 18 02:51 victoria-metrics-prod*
# /etc/systemd/system/victoriametrics.service
[Unit]
Description="victoriametrics"
After=network.target
[Service]
Type=simple
# 应用所在目录
ExecStart=/root/vm/victoria-metrics-prod
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=victoriametrics
[Install]
WantedBy=multi-user.target
# 启动
systemctl enable --now victoriametrics.service
systemctl status victoriametrics.service
# 查看端口
ss -ntl| grep 8428
LISTEN 0 4096 0.0.0.0:8428 0.0.0.0:*
VictoriaMetrics 默认会监听在 8428 端口,可以通过 http://IP:8428
访问 VictoriaMetrics 的 web 界面。
2 修改夜莺配置文件对接时序库
夜莺作为 pushgateway,需要告诉夜莺时序库的地址在哪里。夜莺的配置文件是 etc/config.toml
,修改 [[Pushgw.Writers]]
部分即可,核心是 Url 部分,夜莺接收到指标数据之后,会通过 Prometheus remote write 协议写入 Url 指向的时序库(任何支持 Prometheus remote write 的存储都可以用)
2.1 对接 VictoriaMetrics
单机版
比如对接 VictoriaMetrics
单机版:
cd /root/n9e/
vim etc/config.toml
[[Pushgw.Writers]]
# 修改为自己的 vm IP
Url = "http://10.0.0.10:8428/api/v1/write"
重启夜莺服务
$ systemctl restart n9e.service
$ systemctl status n9e.service
● n9e.service - Nightinagle
Loaded: loaded (/lib/systemd/system/n9e.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-08-01 15:48:05 CST; 5s ago
Main PID: 5286 (n9e)
Tasks: 6 (limit: 4513)
Memory: 23.7M
CPU: 2.738s
CGroup: /system.slice/n9e.service
└─5286 /root/n9e/n9e
Aug 01 15:48:05 n9e systemd[1]: Started Nightinagle.
Aug 01 15:48:05 n9e n9e[5286]: runner.cwd: /root/n9e
Aug 01 15:48:05 n9e n9e[5286]: runner.hostname: n9e
Aug 01 15:48:05 n9e n9e[5286]: runner.fd_limits: (soft=524288, hard=524288)
Aug 01 15:48:05 n9e n9e[5286]: runner.vm_limits: (soft=unlimited, hard=unlimited)
2.2 对接 Prometheus
对接 Prometheus,则配置就是:
cd /root/n9e/
vim etc/config.toml
[[Pushgw.Writers]]
# 修改为自己的 Prometheus IP
Url = "http://127.0.0.1:9090/api/v1/write"
2.3 对接集群版本的 VictoriaMetrics
如果对接的是集群版本的 VictoriaMetrics,则配置就是:
cd /root/n9e/
vim etc/config.toml
[[Pushgw.Writers]]
# 修改为自己的 vm 集群 IP
Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"
2.4 同时对接多个数据源
在 toml 配置中,表示数组,即 [[Pushgw.Writers]]
配置段可以有多个,这样夜莺接收到数据之后,就会把数据同时写到多个后端时序库。比如:
vim etc/config.toml
[[Pushgw.Writers]]
Url = "http://127.0.0.1:9090/api/v1/write"
BasicAuthUser = ""
BasicAuthPass = ""
[[Pushgw.Writers]]
Url = "http://127.0.0.1:8428/api/v1/write"
BasicAuthUser = ""
BasicAuthPass = ""
上例中就是配置了两个时序库。
最后,重启夜莺进程,就完成了夜莺和时序库的对接。
3 在页面添加数据源
菜单操作入口:数据源
。以 Prometheus Like 类型的数据源举例,创建页面填写的关键信息如下:
- 数据源名称:自定义的数据源名称
- URL:数据源的地址,页面上已经给了例子
- 超时时间:默认 10 秒,有的时候查询重量级 promql 10 秒可能不够,可以调大这个值,比如改成 30000 毫秒,即 30 秒
- 授权:用户名密码指的是数据源的 Basic auth 认证信息
- Remote write URL:如果用到了记录规则,记录规则产生的新指标会通过该地址回写时序库。比如 VictoriaMetrics 单机版的 remote write 地址是
http://IP:8428/api/v1/write
,Prometheus 的 remote write 地址是http://IP:9090/api/v1/write
,如果没有用到记录规则,这个字段可以忽略 - 时序库内网地址:通常用于边缘机房下沉部署告警引擎的场景,如果该字段不为空,n9e-edge 会使用该地址访问时序库,如果该字段为空,n9e-edge 会使用上面的 URL 访问时序库
- 关联告警引擎集群:如果只是部署了中心夜莺,这里就默认选择 default 即可,如果你当前添加的数据源是某个边缘机房的数据源,并且该边缘机房有专门的 n9e-edge 告警引擎,那么这里就选择对应的告警引擎集群,何为边缘机房部署模式?请参考前面的文档《附:边缘机房部署》
3.1 新增数据源
这里以 vm 单机版本为例,这里的数据源类型为 Prometheus,因为 vm 和 Prometheus 共享 API
当然现在是没有数据源的,因为我们的都知道 vm 默认为时序数据库,所以我们还需要部署一个 Prometheus 并且将 exporter 采集的数据上传至 vm 中,这样 vm 里面就有了数据,在 n9e 的时序指标里面就能正常查询
4 部署 Prometheus 对接 vm 获取监控数据
1.创建目录下载安装包
root@server:~# mkdir /apps
root@server:~# cd /apps/
root@server:/apps# wget https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gz
root@ubuntu:/apps# tar xf prometheus-2.31.1.linux-amd64.tar.gz
2.解压完了之后可以看到对应的文件
root@server:/apps# ll prometheus-2.31.1.linux-amd64
total 185592
drwxr-xr-x 4 3434 3434 4096 Oct 6 00:43 ./
drwxr-xr-x 3 root root 4096 Nov 15 15:43 ../
drwxr-xr-x 2 3434 3434 4096 Oct 6 00:39 console_libraries/
drwxr-xr-x 2 3434 3434 4096 Oct 6 00:39 consoles/
-rw-r--r-- 1 3434 3434 11357 Oct 6 00:39 LICENSE
-rw-r--r-- 1 3434 3434 3646 Oct 6 00:39 NOTICE
-rwxr-xr-x 1 3434 3434 100357256 Oct 6 00:14 prometheus* # Prometheus 执行程序
-rw-r--r-- 1 3434 3434 934 Oct 6 00:39 prometheus.yml # Prometheus 配置文件
-rwxr-xr-x 1 3434 3434 89643838 Oct 6 00:17 promtool* # Prometheus yaml 文件语法检查工具
3.创建软连接,这样的好处是后期 Prometheus 升级或者版本变化也好 service 文件不用修改
root@server:/apps# ln -sv /apps/prometheus-2.31.1.linux-amd64 /apps/prometheus
'/apps/prometheus' -> '/apps/prometheus-2.31.1.linux-amd64'
4.编写 service
root@server:~# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/apps/prometheus/
ExecStart=/apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
5.设置为开机自启动
root@server:~# systemctl daemon-reload
root@server:~# systemctl enable --now prometheus.service
# 查看当前 Prometheus 状态已经运行
root@ubuntu:~# systemctl status prometheus.service
● prometheus.service - Prometheus Server
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-11-15 15:54:07 CST; 2min 54s ago
Docs: https://prometheus.io/docs/introduction/overview/
Main PID: 1845 (prometheus)
Tasks: 8 (limit: 2290)
CGroup: /system.slice/prometheus.service
└─1845 /apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml
# 能够停止 Prometheus
root@ubuntu:~# systemctl stop prometheus.service
# 重启
root@ubuntu:~# systemctl restart prometheus.service
4.1 修改 Prometheus 配置实现对接vm
修改配置
vim prometheus/prometheus.yml
# vm 单机版 api
remote_write:
- url: "http://localhost:8428/api/v1/write" # 这里的 URL 是您 VictoriaMetrics 单机版的地址
# vm 集群版 api
remoteWrite:
- url: http://vminsert:8480/insert/0/prometheus/ # 这里的 URL 是您 VictoriaMetrics 集群版的地址
重启 Prometheus
systemctl restart prometheus.service
systemctl status prometheus.service
● prometheus.service - Prometheus Server
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-08-01 16:07:00 CST; 9s ago
Docs: https://prometheus.io/docs/introduction/overview/
Main PID: 5518 (prometheus)
Tasks: 9 (limit: 4513)
Memory: 20.8M
CPU: 646ms
CGroup: /system.slice/prometheus.service
└─5518 /apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.002Z caller=head.go:590 level=info compon>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.002Z caller=head.go:596 level=info compon>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.006Z caller=main.go:866 level=info fs_typ>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.007Z caller=main.go:869 level=info msg="T>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.007Z caller=main.go:996 level=info msg="L>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.011Z caller=dedupe.go:112 component=remot>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.011Z caller=dedupe.go:112 component=remot>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.014Z caller=dedupe.go:112 component=remot>
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.018Z caller=main.go:1033 level=info msg=">
Aug 01 16:07:01 n9e prometheus[5518]: ts=2024-08-01T08:07:01.020Z caller=main.go:811 level=info msg="S
4.2 n9e 验证数据
可以看到此时在夜莺的查询中就能够正常获取数据