1、简介
夜莺(Nightingale)是一种强大的开源监控和性能管理工具,旨在帮助组织实时监测和诊断其计算基础设施的健康和性能。它是一个模块化的监控系统,为用户提供了广泛的功能,以确保应用程序和系统保持高可用性和高性能。本文为了演示方便,部署的是单机版。
2、特点
- 实时监控
- 夜莺监控提供实时性能监控,可用于追踪应用程序和系统的性能指标。它可以收集和展示各种数据,包括CPU使用率、内存使用率、网络流量、磁盘活动等,以帮助用户快速识别问题并采取措施。
- 可扩展性
- 夜莺具有模块化的架构,允许用户轻松添加新的监控插件或数据源。这使得它非常适合大型和复杂的环境,可以根据需要进行定制。
- 告警和通知
- 夜莺允许用户设置告警规则,当性能指标超过或低于阈值时触发告警。用户可以选择不同的通知方式,包括电子邮件、短信或集成到其他通知系统中。
- 数据存储和检索
- 夜莺使用可扩展的时间序列数据库来存储监控数据,这允许用户轻松地检索历史数据以进行分析和回顾。用户可以通过图表和报表来可视化数据。
- 自动发现
- 夜莺支持自动发现,可以自动检测和添加新的主机和服务,减轻了管理的工作负担。
3、服务架构
单机版的配套时序库是使用Prometheus。如果要监控的机器有几千台,服务有几百个,单机版的容量无法满足,可以上集群版,集群版的时序库建议使用VictoriaMetrics,也可以使用M3DB,不过M3DB的架构更复杂,很多朋友无法搞定,选择简单的VictoriaMetrics,对大部分公司来讲,足够用了。我们先来看一下服务端架构:

- 核心模块server:server是用来做告警的,会从数据库中同步告警规则,然后读取Prometheus的数据做告警判断。server也可以接收监控数据上报,然后通过remote write协议写入多个时序库。server也依赖redis,用redis存储了server本身以及监控对象的心跳信息。
- 核心模块webapi:提供restful api,用于和前端JavaScript交互,把一些用户配置类的信息写入mysql,鉴权采用jwt,jwt的token使用redis存储,在单机部署的方式下,server的redis和webapi的redis可以复用。
4、安装部署
依赖的组件有:mysql、redis、prometheus,这三个组件都是开源软件,请大家自行安装,其中prometheus在启动的时候要注意开启 --enable-feature=remote-write-receiver
这里也提供一个小脚本来安装这3个组件:# install prometheus
mkdir -p /opt/prometheus
wget https://s3-gz01.didistatic.com/n9e-pub/prome/prometheus-2.28.0.linux-amd64.tar.gz -O prometheus-2.28.0.linux-amd64.tar.gz
tar xf prometheus-2.28.0.linux-amd64.tar.gz
cp -far prometheus-2.28.0.linux-amd64/* /opt/prometheus/
# service
cat <<EOF >/etc/systemd/system/prometheus.service
[Unit]
Description=”prometheus”
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus –config.file=/opt/prometheus/prometheus.yml–storage.tsdb.path=/opt/prometheus/data –web.enable-lifecycle –enable-feature=remote-write-receiver –query.lookback-delta=2m
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=prometheus
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable prometheus
systemctl restart prometheus
systemctl status prometheus
# 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
5、安装夜莺组件
mkdir -p /opt/n9e && cd /opt/n9e
# 去 https://github.com/didi/nightingale/releases 找最新版本的包,文档里的包地址可能已经不是最新的了
tarball=n9e-5.0.0-ga-06.tar.gz
urlpath=https://github.com/didi/nightingale/releases/download/v5.0.0-ga-06/${tarball}
wget $urlpath || exit 1
tar zxvf ${tarball}
mysql -uroot -p1234 < docker/initsql/a-n9e.sql
nohup ./n9e server &> server.log &
nohup ./n9e webapi &> webapi.log &
# check logs
# check port
注意:
- 如果启动成功,server默认会监听在19000端口,webapi会监听在18000端口,且日志没有报错。上面使用nohup简单演示,生产环境建议用systemd托管,相关service文件可以在etc/service目录下找到。
- 配置文件etc/server.conf和etc/webapi.conf中都含有mysql的连接地址配置,检查一下用户名和密码,prometheus如果使用上面的脚本安装,默认会监听本机9090端口,server.conf和webapi.conf中的prometheus相关地址都不用修改就是对的。
6、访问
浏览器访问webapi的端口(默认是18000)就可以体验相关功能了,默认用户是root
,密码是root.2020
