国产化监控方案:夜莺Nightingale系统详解与部署实践
本文介绍了国产开源监控系统夜莺Nightingale的核心功能与搭建实践。文章详细讲解了从环境准备、组件部署到数据采集的完整流程,重点说明其在云原生场景下的应用优势,帮助用户快速上手并实现对业务系统的全面监控。
夜莺监控系统介绍

夜莺监控,英文名字 Nightingale,是一款侧重告警的监控类开源项目。
官网地址:https://flashcat.cloud/
类似 Grafana 的数据源集成方式,夜莺也是对接多种既有的数据源,不过 Grafana 侧重在可视化,夜莺是侧重在告警引擎。比如把 Prometheus、VictoriaMetrics、ElasticSearch 等作为数据源接入夜莺,即可在夜莺里配置告警规则做指标、日志的告警。当然了,夜莺也不止做告警,还提供了 ad-hoc 查询、指标视图、仪表盘等可视化能力,不过在可视化方面没有 Grafana 道行深。
夜莺监控最初于 2020 年 3 月 20 日由滴滴开源,后来捐赠予中国计算机学会开源发展委员会(CCF ODC),依托基金会运作。夜莺项目至今已经发布了 100 多个版本,有 CCF 的支持,有快猫星云等公司的持续投入,相信夜莺项目会越来越好。
流程图如下:

夜莺依赖 mysql 存储各类用户配置,比如告警规则、屏蔽规则、仪表盘,依赖 redis 存储一些机器心跳上来的元信息以及 jwt token,除此之外,没有别的依赖。
对比Prometheus官方是这样说的:
如果您用了多个时序库,比如 Prometheus、VictoriaMetrics、Thanos 等等,需要一个统一的平台来管理告警、看图,夜莺是一个选择。如果您想把监控的能力开放给公司所有研发团队,让研发团队自助服务,觉得 Prometheus 使用配置文件的告警规则管理方式不方便,夜莺是一个选择。如果您需要更为灵活的告警策略配置,比如控制生效时间、一套规则生效多个集群,夜莺是一个选择。如果您需要告警自愈能力,告警之后自动执行个脚本啥的,夜莺是一个选择。
夜莺监控系统搭建
1. 环境准备
下载二进制包:
mkdir /data/n9e/ && cd /data/n9e
# 下载v7.7的版本
wget https://download.flashcat.cloud/n9e-v7.7.0-linux-amd64.tar.gz
解压服务:
tar -zxvf n9e-v7.7.0-linux-amd64.tar.gz -C /data/n9e
由于n9e依赖于redis与mysql,并且为了不影响我们的现有生产环境,我们选择使用docker启动mysql和redis。
# 创建挂在目录
mkdir /data/n9e/{mysql,redis}
# 启动redis
sudo docker run -d \
--name redis-n9e \
-p 17002:6379 \
-v /data/n9e/redis:/data \
redis:6.0.13 \
redis-server --appendonly yes --requirepass "password"
# 启动MySQL
sudo docker run -d \
--name mysql-dev \
-p 17001:3306 \
-v /data/n9e/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=password \
mysql:8.0
验证服务运行状态
root@dev:/data/n9e# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a8ce2532b58 mysql:8.0 "docker-entrypoint.s…" 41 minutes ago Up 41 minutes 33060/tcp, 0.0.0.0:17001->3306/tcp, [::]:17001->3306/tcp n9e-mysql
16b937787b2f redis:6.0.16 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:17002->6379/tcp, [::]:17002->6379/tcp redis-n9e
04ffcbe7b9c8 openspug/spug-service
2. 编写配置文件
root@dev:/data/n9e# pwd
/data/n9e
root@dev:/data/n9e# vim etc/config.toml
# 编辑数据库和redis部分
[DB]
# postgres: host=%s port=%s user=%s dbname=%s password=%s sslmode=%s
# postgres: DSN="host=127.0.0.1 port=5432 user=root dbname=n9e_v6 password=1234 sslmode=disable"
# sqlite: DSN="/path/to/filename.db"
DSN = "root:password@tcp(127.0.0.1:17001)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local&allowNativePasswords=true"
# enable debug mode or not
Debug = false
# mysql postgres sqlite
DBType = "mysql"
# unit: s
MaxLifetime = 7200
# max open connections
MaxOpenConns = 150
# max idle connections
MaxIdleConns = 50
# enable auto migrate or not
# EnableAutoMigrate = false
[Redis]
# address, ip:port or ip1:port,ip2:port for cluster and sentinel(SentinelAddrs)
Address = "127.0.0.1:17002"
# Username = ""
Password = "password"
# DB = 0
# UseTLS = false
# TLSMinVersion = "1.2"
# standalone cluster sentinel
RedisType = "standalone"
# Mastername for sentinel type
# MasterName = "mymaster"
# SentinelUsername = ""
# SentinelPassword = ""
编写Prometheus的write地址:
# 首先确保Prometheus开启--web.enable-remote-write-receiver参数
vim etc/config.toml
[[Pushgw.Writers]]
# Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"
Url = "http://127.0.0.1:9090/api/v1/write"
# Basic auth username
BasicAuthUser = "admin"
# Basic auth password
BasicAuthPass = "password"
3. 导入数据库
登陆到mysql容器导入初始数据库:
sudo docker exec -it mysql-dev mysql -u root -p
# 导入数据库
source /data/n9e/n9e.sql
4. 启动服务
启动测试环境:
# 使用&进行后端启动
./n9e &> n9e.log &
# 观察n9e.log,若无报错,就可以关闭了,有报错信息就要定向调整
使用systemd管理,编写service文件:
vim /etc/systemd/system/n9e.service
[Unit]
Description=Nightingale Monitoring Service
After=network.target
[Service]
Type=simple
ExecStart=/data/n9e/n9e
WorkingDirectory=/data/n9e
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=n9e
[Install]
WantedBy=multi-user.target
重新加载启动:
systemctl daemon-reload
systemctl start n9e.service
默认端口17000,可以修改etc/conf.toml文件修改默认端口,默认账户登陆密码:
用户:root
密码:root.2020


5. 导入Prometheus数据源
点击集成中心–>数据源–>新增–>选择Prometheus

填写相关数据,若Prometheus无密码则不需要填写授权信息:

点击测试并保存:

测试即时查看:

功能其实和Prometheus的这个一样:
感受与总结
至少我使用夜莺感觉非常好用,摒弃了Prometheus复杂的yaml配置规则,在告警规则制定方面要相交于Prometheus简单很多,而且不需要部署过多的exporter进行数据采集,而是可以部署夜莺自己的categraf来进行采集,这个部分我当然还没做优化,引入夜莺的原因就是为了在告警这里做细致的优化,在采集规则这里做更细的配置,希望在未来的一段时间之内可以完成。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)