开源监控系统夜莺V6-7-2介绍-部署-使用入门

一、介绍

1.1 简介

​ 夜莺监控是一款开源云原生观测分析工具,采用 All-in-One 的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力。夜莺于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 100 多个版本。它最初由滴滴开发和开源,并于 2022 年 5 月 11 日,捐赠予中国计算机学会开源发展委员会(CCF ODC),为 CCF ODC 成立后接受捐赠的第一个开源项目。夜莺的核心研发团队,也是 Open-Falcon 项目原核心研发人员。

​ 夜莺的代码库分前端代码库与后端代码库,已经托管址在github平台,后端主要实现语言是Go,前端主要实现语言是TypeScript。

1.2 思考与分析

​ 在夜莺监控这个软件之前,监控告警、告警自愈与图表展示已经有了一套可行的开源解决方案即“Prometheus+Grafana+AlertManager”组合。那为什么还需要再开发一套“重复的”、有着相同功能的软件解决方案呢?其实它们主体功能是重复的,但它们的优势与可组合性不一样,这样用户可以根据自己的实际需求来选择适合自己的解决方案。

​ 为了叙述的简洁性,以下使用“PGA组合”代替“Prometheus+Grafana+AlertManager”组合。

功能特征或实际需求 “PGA组合” 夜莺
先前已经使用“PGA组合”搭建好自己监控告警与图表展示,功能已经基本满足需求且没有痛点 +1'
需要使用Grafana社区中庞大而炫酷的图表 +1' (夜Grafana中一般常见的基础的图表图表在夜莺都是有的或可重用的)
需要使用多个TSDB如Prometheus、VictoriaMetrics、Thanos等,需要一个统一的平台来管理告警、看图 +1'
让多个团队自行采用图形化方式灵活方便地定制自己的告警规则与图表 +1'
让多个团队自行采用图形化方式灵活方便地定制自己的告警策略配置,比如控制生效时间、一套规则生效多个集群 +1'
需要告警自愈能力,如告警之后自动执行个脚本 +1'
以图形化方式开箱即用内置告警规则和内置仪表盘 +1'

​ 可以看到,“PGA组合”由于产生的时间更早,可能已在相当一部企业或场景的生产环境中使用,如其功能已能基本满足需求、使用中确实没有痛点、需要Grafana社区中庞大而炫酷的图表,可以继续使用“PGA组合”。否则就可以尝试夜莺这一套解决方案。

1.3 构架介绍

20230531103435

​ 首先上图中间的飞鸟代表夜莺的核心进程 n9e (下文以 n9e 代替),它的集群方式非常简单只需部署多节点即可实现。

​ 对于 n9e 来说,它本身依赖的存储有两个

  • Mysql : 存放配置类别信息,如用户,监控大盘,告警规则等
  • Redis : 存放访问令牌(JWT Token),心跳信息,如机器列表中CPU、内存、时间偏移、核数、操作系统、CPU架构等

​ 从 v6 版本开始,夜莺尝试转型为统一可观测性平台,n9e 不再仅支持接入时序数据源(Prometheus、Victoriametrics、M3DB、Thanos),也可以接入日志类数据源(Elasticsearch,Loki【预】),链路追踪数据源(Jaeger)。

​ 左侧就是 n9e 的数据来源,n9e 可以支持多种采集器 agent,比如 Datadog-Agent,Telegraf,Grafana-Agent,OpenTSDB agent,Node-Exporter,vmagent 都可以对接,不过最推荐的还是 Categraf。比如在 n9e 中机器列表页面的心跳信息都是 Categraf 才会去采集并上报的,所以为了更丝滑使用更推荐使用 Categraf,并且 Categraf 采用 All-In-One 的设计,采集日志,指标,链路追踪,所有的采集工作使用一个 agent 来解决。

​ 介绍完中心部署架构,我们再来描述一下它的数据流:假设是时序指标数据的采集,agent 把采集到的数据推送给 n9e (端口:17000),然后经由 n9e 加工(自动添加附加标签)转发给对应的时序数据库保存。另外在 n9e 把数据的转发给时序数据库之前,会先从监控数据中提取出 ident 标签写入 mysql 的 target 表(机器列表)中,同时如果 agent 用的是 Categraf 并且配置了心跳(heartbeat=true),则会把心跳上报的 metadata 存入 Redis(就是那些核数、操作系统、CPU架构等)。

​ 更复杂的部署方案请查看官方文档:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/arch/。

二、部署

2.1 基础环境

2.1.1 环境信息

主机名 IP 操作系统 规格 磁盘 root用户密码
k8s03-1 10.13.15.61 Ubuntu 20.04.3 LTS-amd64 8c16g 400G Changeme@123

2.1.2 安装要求说明

(1)服务器构架:支持x84_64,也支持 arm64构架。amd64 是 x84 的包,下载站点也提供 arm64 的包。如果需要其他平台的包则要自行编译验证。

(2)操作系统:笔者在centos7.9-amd64与Ubuntu20.04.x LTS-amd64上都验证过,可行。其他基于Linux内核的操作系统理论上都支持,具体要验证。

(3)操作系统规格:如果就是用来检验一下、不上生产环境,2核CPU+4G内存+50G磁盘空间即可。如果上生产环境,建议8C16G及以上+300G磁盘以上,且最好搭建一个夜莺高可用集群,搭建夜莺高可用集群方法见其官网。

(4)夜莺官网安装文档:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/install/intro/

2.2 下载安装包

以下假设安装文件与安装目录分别在:/data/softs、/data/server

2.2.1 夜莺下载地址

1
2
3
#使用n9e-v6.7.2
cd /data/softs
wget https://github.com/ccfos/nightingale/releases/download/v6.7.2/n9e-v6.7.2-linux-amd64.tar.gz

2.2.2 categraf下载地址

1
2
3
4
5
6
#以categraf-v0.3.61-linux-amd64为例
#Linux上categraf:https://github.com/flashcatcloud/categraf/releases/download/v0.3.61/categraf-v0.3.61-linux-amd64.tar.gz
cd /data/softs
wget https://github.com/flashcatcloud/categraf/releases/download/v0.3.61/categraf-v0.3.61-linux-amd64.tar.gz

#Windows上categraf:https://github.com/flashcatcloud/categraf/releases/download/v0.3.61/categraf-v0.3.61-windows-amd64.zip

2.2.3 victoria-metrics下载地址

1
2
3
#使用单机版VM-v1.93.10
cd /data/softs
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.10/victoria-metrics-linux-amd64-v1.93.10.tar.gz

2.3 部署夜莺相关各服务

依赖 mysql 存储用户配置类数据,依赖 redis 存储 jwt token 和机器心跳上报的 metadata,所以,先准备 mysql 和 redis。

2.3.1 安装victoriametrics

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tar -zxf victoria-metrics-linux-amd64-v1.93.10.tar.gz -C /data/server
chown root:root /data/server/victoria-metrics-prod
chmod 755 /data/server/victoria-metrics-prod

#创建用户和用户组
useradd -u 1003 victoriametrics

#部署二进制文件
cd /data/server
install -o victoriametrics -g victoriametrics -m 0755 victoria-metrics-prod /usr/local/bin/victoriametrics

#创建进程文件与数据存储目录
mkdir -p /run/victoriametrics && chown victoriametrics:victoriametrics /run/victoriametrics
mkdir -p /data/server/victoriametrics/data/ && chown -R victoriametrics:victoriametrics /data/server/victoriametrics/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#配置systemd管理服务
cat > /etc/systemd/system/victoriametrics.service <<EOF
[Unit]
Description=VictoriaMetrics
After=network.target

[Service]
Type=simple
StartLimitBurst=5
StartLimitInterval=0
Restart=on-failure
RestartSec=1
PIDFile=/run/victoriametrics/victoriametrics.pid
ExecStart=/usr/local/bin/victoriametrics -storageDataPath /data/server/victoriametrics/data/ -retentionPeriod 1098
ExecStop=/bin/kill -s SIGTERM $MAINPID
User=victoriametrics

[Install]
WantedBy=multi-user.target
EOF
1
2
3
4
5
6
7
8
#ulimit 
mkdir -p /etc/systemd/system/victoriametrics.service.d

cat > /etc/systemd/system/victoriametrics.service.d/ulimit.conf << EOF
[Service]
LimitNOFILE=32000
LimitNPROC=32000
EOF
1
2
3
4
5
systemctl daemon-reload
systemctl start victoriametrics.service

systemctl enable victoriametrics.service
systemctl status victoriametrics.service
image-20241028111538618

2.3.2 安装mysql

对于夜莺来说,它本身依赖的存储有两个

  • Mysql : 存放配置类别信息,如用户,监控大盘,告警规则等
  • Redis : 存放访问令牌(JWT Token),心跳信息,如机器列表中CPU、内存、时间偏移、核数、操作系统、CPU架构等
1
2
3
4
5
6
apt -y install mariadb*
systemctl enable mariadb
systemctl status mariadb

mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234');"
mysql -uroot -p1234
image-20241028111612351
1
2
#如果远程登录mysql服务端的话,需要修改50-server.cnf文件的bind-address为0.0.0.0(否则只能从本机登录)
vi /etc/mysql/mariadb.conf.d/50-server.cnf
image-20241028111915017
1
2
3
#修改cracklib_password_check.cnf以修改 mysql密码校验策略
#将cracklib_password_check 插件注释
vi /etc/mysql/mariadb.conf.d/cracklib_password_check.cn
image-20241028112132636
1
2
#重启数据库服务
systemctl restart mariadb.service
1
2
3
4
#不加-h参数,默认以本机为客户端登录数据库
mysql -uroot -p1234
#允许root用户可以从任意机器上登入mysql的任意数据库、操作任意数据库的任意表
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY "1234";
1
2
3
4
#远程登录数据库内,修改root用户的登录密码
mysql -hxxx -uroot -p1234
#允许root用户可以从任意机器上登入mysql的任意数据库、操作任意数据库的任意表
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY "1234";

2.3.3 安装redis

1
2
3
4
apt install -y redis

systemctl enable redis
systemctl status redis

2.3.4 安装n9e

1
2
3
4
5
6
mkdir -p mkdir /data/server/n9e-v6.7.2
tar -zxf ztmonitor-v2.0.tar.gz -C /data/server/n9e-v6.7.2/

cd /data/server/n9e-v6.7.2/
# 解压缩之后,可以看到 n9e.sql 是建表语句,导入数据库
mysql -uroot -p1234 < n9e.sql

2.3.4.1 封装n9e.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat >> /usr/lib/systemd/system/n9e.service <<EOF
[Unit]
Description="n9e"
After=network.target mariadb.service
[Service]
Type=simple
ExecStart=/data/server/n9e-v6.7.2/n9e
WorkingDirectory=/data/server/n9e-v6.7.2/
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=n9e
[Install]
WantedBy=multi-user.target
EOF

2.3.4.2 修改n9e配置文件

1
2
3
4
5
6
#修改./etc/config.toml文件
vi ./etc/config.toml
...
[[Pushgw.Writers]]
Url = "http://10.13.15.61:8428/api/v1/write"
...
image-20241028140727607

2.3.4.3 启动n9e服务

1
2
3
systemctl daemon-reload 
systemctl restart n9e && systemctl enable n9e
systemctl status n9e

2.3.4.4 访问n9e的web界面

链接是:http://10.13.15.61:17000/login

image-20241028141145325

2.3.4.5 添加数据源

image-20241028141904842
image-20241028141958225

三、使用入门

3.1 夜莺能监控什么

​ 夜莺能够监控的对象有很多,但它本身并没有采集被监控的数据。它是一个服务端组件,类似 Grafana,可以接入不同的数据源,比如 Prometheus、VictoriaMetrics、Thanos 等等,只要数据进到这些库里了,夜莺就可以对数据源的数据进行分析、告警、可视化,以及后续的事件处理、告警自愈。

3.2 夜莺如何获取监控数据

​ 夜莺有端口接收监控数据,只要各监控采集器跟夜莺打通了就能将数据推送给夜莺,夜莺接收到采集数据后,可能会进行少量处理如添加少许标签,然后会保存到n9e配置文件中配置的时序数据库中(如上述./etc/config.toml文件中[Pushgw.Writers]组下Url配置的victoria-metrics)。然后在夜莺的web界面,可以创建夜莺中的数据源,数据源是各仪表盘可视化与告警分析的数据来源。

​ 常用的开源采集器如 Telegraf、Categraf、Grafana-agent、Datadog-agent、Prometheus 生态的各类 Exporter 等等,都是可以跟夜莺结合一起使用的。这些 agent (也就是采集器)采集了数据推给夜莺,夜莺适配了这些 agent 的数据传输协议,所以可以接收这些 agent 上报的监控数据,转存到后端对接的时序数据库,之后就可以对这些数据做告警分析、可视化。

​ Categraf 是一个开源的监控采集 Agent,由快猫星云技术团队(也就是夜莺的开发团队)研发并开源,提供了对所有常见监控对象如Linux/Windows服务器、MySQl数据库、k8s、容器、NVIDIA GPU等等提供高质量的监控数据采集能力,采用了 All-in-one 的设计理念,可以同时支持指标、日志、链路追踪数据的采集。以下以 categraf 采集器为例进行说明与操作。

​ 一般来说,被监控对象都有一个对应 Categraf 进程。比如说要监控 10.13.15.61 这个服务器的NVIDIA GPU、cpu、内存、磁盘、上传下载网速等这类服务器固有信息,或这其上部署的软件如MySQL、k8s 等,就需要在10.13.15.61 这个服务器的操作系统上安装categraf,并进行配置。Categraf目前支持的操作系统包括Windows、Linux及macOS,具体的版本细节请查看官方文档。

3.3 安装与配置 categraf

​ categraf 其实是一个采集插件集合,其中包含了多个针对常见被监控对象的插件,如input.cpu、input.disk、input.mysql等等,这些插件都放在categraf安装目录下的 conf 子目录下,每个以 ”input.“ 开头的子目录就是categraf 的一个采集插件。

​ 如果要禁用某个插件,把 input.xx 改个其他前缀(或者删除这个目录),比如 bak.input.xx,categraf 就会忽略这个采集器。

​ categraf安装好后,如果不对默认插件配置目录及文件进行修改,它默认也会启用常基本的插件如input.cpu、input.disk等,以采集最常见的服务器与操作系统数指标数据如cpu、内存、磁盘大小与io、上传下载速率等。默认没有采集的指标数据就需要使用其他 Categraf 插件来客制化采集。

1
2
3
tar -zxf /data/softs/categraf-v0.3.61-linux-amd64.tar.gz -C /data/server/
cd /data/server
cp categraf-v0.3.61-linux-amd64/conf/categraf.service /usr/lib/systemd/system/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vi /usr/lib/systemd/system/categraf.service
#修改后内容如下
[Unit]
Description="Categraf"
After=network.target

[Service]
Type=simple

ExecStart=/data/server/categraf-v0.3.61-linux-amd64/categraf #这里
WorkingDirectory=/data/server/categraf-v0.3.61-linux-amd64 #这里

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


[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi categraf-v0.3.61-linux-amd64/conf/config.toml 
#以下修改后的几点
[global]
...
hostname = "$ip" #夜莺中以自动获取到的服务器ip标识服务器
...
[[writers]]
url = "http://10.13.15.61:17000/prometheus/v1/write" #夜莺接收监控数据的url
...
[heartbeat]
...
# report os version cpu.util mem.util metadata
url = "http://10.13.15.61:17000/v1/n9e/heartbeat?gid=1" #夜莺中接收监控对象心跳的url。最后加上"gid=1"会自动将被监控服务器归到默认业务组内
...
1
2
3
4
#启动categraf服务
systemctl daemon-reload
systemctl start categraf.service && systemctl enable categraf.service
systemctl status categraf.service
image-20241028145210919

3.4 监控

3.4.1 监控服务器信息

​ categraf安装好后,默认会启用常基本的插件如input.cpu、input.disk等,以采集最常见的服务器与操作系统数指标数据如cpu、内存、磁盘大小与io、上传下载速率等。

image-20241028145414264
image-20241028145442200

查看刚刚克隆的仪表盘及其中数据:

image-20241028145535733
image-20241029095051041

3.5.1 监控k8s及容器

​ 参考笔者以前写的文章:https://jiangsanyin.github.io/2024/05/26/%E5%A4%9C%E8%8E%BAnightingalev6-7-2%E9%80%9A%E8%BF%87kubelet%E9%87%87%E9%9B%86docker%E5%AE%B9%E5%99%A8%E7%9B%91%E6%8E%A7%E6%95%B0%E6%8D%AE/

3.6.1 采集监控其他对象数据

​ 关于其他插件的用法,参考官方文档:https://flashcat.cloud/docs/content/flashcat-monitor/categraf/plugin/introduction/

3.5 基础设施-机器列表

​ n9e 把数据的转发给时序数据库之前,会先从监控数据中提取出 ident 标签写入 mysql 的 target 表(机器列表)中,同时 Categraf 会把心跳上报的 metadata 存入 Redis(就是那些核数、操作系统、CPU架构等)。这些数据就是就是展示在“基础设施-机器列表”页面的服务器。

image-20241028220233328

3.6 人员组织

3.6.1 用户管理

​ 此页面的用户是夜莺系统中的用户,更直观地讲就是可以登录此web系统的用户。ta可能是某个使用者的逻辑映射,也可能是某个机器人如钉钉机器人。仅有一个默认的root用户也可以继续使用此系统。

image-20241028224349420

3.6.2 团队管理

​ 团队就是多个用户的集合。

image-20241029095403547

3.6.3 业务组管理

​ 业务组下面包含多个团队,每个团队又有各自的成员。这样划分结构,在使用告警规则非常有用,即某个业务组下的可能有多个告警规则,而这些告警则检查的对象如服务器可能是由不同的团队负责的,这样一来,相应的报警就应该发送给对应团队下面的用户,有利于避免打扰与权责的界定。

image-20241028225018637

3.7 告警管理

3.6.1 内置规则

​ 内置规则是夜莺默认已经内置的一些常用或基础的告警规则,用户开箱即用的。

​ 将其进行克隆即可形成自己的告警规则,可以对内置规则进行克隆再进行修改,创建满足自己实际需求的告警规则。如下两张图的操作,从内置告警组克隆一个告警规则到默认业务组下,但并没有启用。当然也可查看“内置规则”的内容,从而确定是否是自己想要的准告警规则。

image-20241028220625744
image-20241028221656103

3.6.2 告警规则

​ 克隆得到的告警规则在如下的“告警规则”页面,点击规则名称可以再次对其进行编辑。编辑好的告警规则一定确认已经启用,否则相当于被禁用了。

image-20241028221953883
image-20241028222701515
image-20241028224050927

开源监控系统夜莺V6-7-2介绍-部署-使用入门
https://jiangsanyin.github.io/2024/10/27/开源监控系统夜莺V6-7-2介绍-部署-使用入门/
作者
sanyinjiang
发布于
2024年10月27日
许可协议