夜莺监控系统介绍

在这里插入图片描述

夜莺监控,英文名字 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来进行采集,这个部分我当然还没做优化,引入夜莺的原因就是为了在告警这里做细致的优化,在采集规则这里做更细的配置,希望在未来的一段时间之内可以完成。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐