夜莺-Nightingale
夜莺V6
项目介绍 架构介绍
快速开始
黄埔营
安装部署
升级
采集器
使用手册
API
数据库表结构
FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵
第2章:探索PromQL
第3章:Prometheus告警处理
第4章:Exporter详解
第5章:数据与可视化
第6章:集群与高可用
第7章:Prometheus服务发现
第8章:监控Kubernetes
第9章:Prometheus Operator
参考资料

使用二进制方式部署夜莺

下载夜莺

可以去两个地方下载夜莺发布包,完事自行解压缩:

注意:amd64.tar.gz 是 x86_64 架构的,arm64.tar.gz 是 arm64 架构的。根据自己的服务器架构选择下载。如果下载错了,启动的时候会报错:无法执行二进制文件。

准备依赖

根据「项目介绍」中的架构介绍,夜莺依赖 MySQL、Redis,需要各位提前准备好。这里也提供一个小脚本来安装这两个组件,大家可以参考。

# install mysql
yum -y install mariadb*
systemctl enable mariadb
systemctl restart mariadb
mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234');"

# install redis
yum install -y redis
systemctl enable redis
systemctl restart redis

上例中 mysql 的 root 密码设置为了 1234,建议维持这个不变,后续就省去了修改配置文件的麻烦。如果你想修改默认用户名和密码,就要对应的修改配置文件中的 mysql 连接信息,配置文件的哪个地方配置了 mysql 的密码呢?通过下面的命令可以找到:

# 夜莺的主配置文件是 etc/config.toml
grep "1234" etc/config.toml

夜莺配置文件中的 Redis 默认是配置的单机版,且无密码,如果想做调整,根据配置文件中的注释来修改即可。

导入数据库表结构

解压缩夜莺的 tar.gz 之后,可以看到 n9e.sql,这是数据库初始化 sql,需要导入到 mysql 中。

mysql -uroot -p1234 < n9e.sql

启动夜莺

解压缩夜莺的 tar.gz 之后,可以看到三个二进制:

  • n9e:这是夜莺的服务端二进制
  • n9e-edge:这是边缘机房部署模式时使用,后面会讲,现在不用管
  • n9e-cli:这是 v5 升级 v6 版本时使用的命令行迁移工具,新用户也无需关心

另外可以看到几个目录:

  • cli:v5 升级 v6 的时候用的,新用户无需关心
  • etc:配置文件目录
  • docker:docker 部署的时候用的,相关配置文件,相关 compose.yaml 文件都在这里,二进制部署无需关心
  • integrations:集成目录。存放内置告警规则、内置仪表盘

启动夜莺很简单,直接执行 n9e 二进制即可:

./n9e

如果启动失败,会在控制台打印错误日志,根据错误日志来排查问题即可。

当然了,上面的启动方式,一旦关闭终端,夜莺就停止了,Ctrl + C 夜莺进程也会停止。如果想让夜莺在后台运行,可以使用 nohup 或者 systemd 来管理。比如 nohup 启动夜莺:

nohup ./n9e &> n9e.log &

如果启动成功,夜莺默认会监听在 17000 端口,通过下面的命令可以查看端口是否正常在监听:

ss -tlnp|grep 17000

通过下面的命令可以查看进程是否正常在运行:

ps -ef|grep n9e

查看日志

如果是 nohup 方式启动,在 n9e.log 中可以查看夜莺的日志。如果是 systemd 方式启动,可以通过 journalctl 来查看日志(假设 service 名字是 n9e):

journalctl -fu n9e

journalctl 具体如何使用请自行 Google。

把日志输出到指定目录

默认情况下夜莺的日志打印到 stdout,如果想把日志输出到指定目录,可以通过修改 config.toml 中的 [Log] 部分达成目的,比如:

[Log]
Dir = "logs"
Level = "INFO"
Output = "file"
KeepHours = 24

上面的配置表示,把日志输出到 logs 目录下,日志级别是 INFO,日志文件保留 24 小时。也可以根据大小来配置,比如:

[Log]
Dir = "logs"
Level = "INFO"
Output = "file"
RotateNum = 3
RotateSize = 256

上面的配置表示,把日志输出到 logs 目录下,日志级别是 INFO,日志文件大小超过 256M 时,会自动切割,保留 3 个日志文件。

访问夜莺

浏览器访问夜莺的端口,即 17000,默认用户是 root,密码是 root.2020

介入监控数据采集和传输

根据「项目介绍」中的架构介绍,上面的方式搭建的夜莺,只是作为一个告警引擎使用,此时你可以在页面(注意,这里是页面)上添加数据源(菜单路径:系统配置-数据源),看图、配置告警规则。如果想要用夜莺来接收监控数据并转存到时序库,那就得通过配置文件(注意,这里是配置文件)告诉夜莺时序库的地址在哪里。还记得之前的架构图不?

20240221154910

在这个架构下,夜莺进程有两个角色,一个是作为告警引擎,一个是作为数据转发的 pushgateway,这里首先需要一个时序库,可以使用 Prometheus 或 VictoriaMetrics(推荐)。夜莺接收到数据之后会通过 remote write 方式转发给时序库。

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。

VictoriaMetrics

VictoriaMetrics 的搭建,更为简单,从 VictoriaMetrics github releases 下载对应平台的发布包,解压缩里边只有一个二进制,执行 ./victoria-metrics-prod 即可启动,生产环境建议使用 systemd 托管,这里提供一个 systemd 的 service 文件供大家参考:

# /etc/systemd/system/victoriametrics.service
[Unit]
Description="victoriametrics"
After=network.target

[Service]
Type=simple

ExecStart=/opt/victoriametrics/victoria-metrics-prod

Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=victoriametrics


[Install]
WantedBy=multi-user.target

VictoriaMetrics 默认会监听在 8428 端口,可以通过 http://IP:8428 访问 VictoriaMetrics 的 web 界面。

修改夜莺配置文件对接时序库

夜莺作为 pushgateway,需要告诉夜莺时序库的地址在哪里。夜莺的配置文件是 etc/config.toml,修改 [[Pushgw.Writers]] 部分即可,比如对接 VictoriaMetrics 单机版:

[[Pushgw.Writers]]
Url = "http://127.0.0.1:8428/api/v1/write"

注意上面的 IP 改成你自己环境的 VictoriaMetrics 的 IP,如果对接的是 Prometheus,则配置就是:

[[Pushgw.Writers]]
Url = "http://127.0.0.1:9090/api/v1/write"

注意上面的 IP 改成你自己环境的的 Prometheus 的 IP,如果对接的是集群版本的 VictoriaMetrics,则配置就是:

[[Pushgw.Writers]]
Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"

注意上面的 IP 改成你自己环境的 vminsert 的 IP。[[Pushgw.Writers]] 这个部分是双中括号扩起来的,在 toml 配置中,表示数组,即 [[Pushgw.Writers]] 配置段可以有多个,这样夜莺接收到数据之后,就会把数据同时写到多个后端时序库。比如:

[[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 = ""

上例中就是配置了两个时序库。

最后,重启夜莺进程,就完成了夜莺和时序库的对接。到此为止,服务端就搞定了,接下来是客户端。

通过 Categraf 采集数据

对于要监控的目标机器,需要在每个机器上安装 Categraf,Categraf 是夜莺的数据采集器,相关资料:

Categraf 的主配置在 conf/config.toml,注意里边有两处 127.0.0.1:17000 就是夜莺的地址,需要改成你自己环境的夜莺地址。

Categraf 要安装在所有要监控的目标机器上,建议使用 ansible 之类的批量管理工具来安装。

高可用部署

夜莺的高可用部署非常简单,就是把 n9e 进程部署到多个机器上就行了,配置文件保持一致,多个机器上的 n9e 进程读写同一个 MySQL 和 Redis。多个 n9e 前面最好是搞一个负载均衡,用户使用负载均衡的地址来访问夜莺,Categraf 中的夜莺的地址也配置为负载均衡的地址。

开源版
Flashcat
Flashduty