夜莺监控是一款开源云原生观测分析工具,采用 All-in-One 的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力。夜莺于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 100 多个版本。

夜莺最初由滴滴开发和开源,并于 2022 年 5 月 11 日,捐赠予中国计算机学会开源发展委员会(CCF ODC),为 CCF ODC 成立后接受捐赠的第一个开源项目。夜莺的核心研发团队,也是 Open-Falcon 项目原核心研发人员,从 2014 年(Open-Falcon 是 2014 年开源)算起来,也有 10 年了,只为把监控这个事情做好。

部署夜莺

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

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

准备依赖

根据架构,夜莺依赖 MySQL、Redis,需要各位提前准备好。

导入数据库表结构

mysql -uroot -p1234 < n9e.sql

启动夜莺

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

  • n9e:这是夜莺的服务端二进制

  • n9e-edge:这是边缘机房部署模式时使用,后面会讲,现在不用管

  • n9e-cli:这是 v5 升级 v6 版本时使用的命令行迁移工具,新用户也无需关心

另外可以看到几个目录:

  • cli:v5 升级 v6 的时候用的,新用户无需关心

  • etc:配置文件目录

  • docker:docker 部署的时候用的,相关配置文件,相关 compose.yaml 文件都在这里,二进制部署无需关心

  • integrations:集成目录。存放内置告警规则、内置仪表盘

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

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

./n9e

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

ss -tlnp|grep 17000

已服务模式运行

# nano /lib/systemd/system/n9e-server.service


[Unit]
Description=n9e Service
After=network.target

[Service]
Type=simple
ExecStart=/opt/n9e/n9e
WorkingDirectory=/opt/n9e

RestartSec=3
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=n9e

[Install]
WantedBy=multi-user.target


# systemctl daemon-reload
# systemctl start n9e-server
# systemctl status n9e-server
# systemctl enable n9e-server

查看日志

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

journalctl -fu n9e

把日志输出到指定目录(选做)

默认情况下夜莺的日志打印到 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

访问夜莺

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

接入数据源

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

部署时序库

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


# systemctl daemon-reload
# systemctl start victoriametrics
# systemctl status victoriametrics
# systemctl enable victoriametrics

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

夜莺作为 pushgateway,需要告诉夜莺时序库的地址在哪里。夜莺的配置文件是 etc/config.toml,修改 [[Pushgw.Writers]] 部分即可,核心是 Url 部分,夜莺接收到指标数据之后,会通过 Prometheus remote write 协议写入 Url 指向的时序库(任何支持 Prometheus remote write 的存储都可以用),比如对接 VictoriaMetrics 单机版:

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

重启夜莺进程,就完成了夜莺和时序库的对接。

在页面添加数据源

菜单操作入口:数据源。以 Prometheus Like 类型的数据源举例,创建页面填写的关键信息如下:

  • 数据源名称:自定义的数据源名称

  • URL:数据源的地址,页面上已经给了例子

  • 超时时间:默认 10 秒,有的时候查询重量级 promql 10 秒可能不够,可以调大这个值,比如改成 30000 毫秒,即 30 秒

  • 授权:用户名密码指的是数据源的 Basic auth 认证信息

  • Remote write URL:如果用到了记录规则,记录规则产生的新指标会通过该地址回写时序库。比如 VictoriaMetrics 单机版的 remote write 地址是 http://IP:8428/api/v1/write,Prometheus 的 remote write 地址是 http://IP:9090/api/v1/write,如果没有用到记录规则,这个字段可以忽略

  • 时序库内网地址:通常用于边缘机房下沉部署告警引擎的场景,如果该字段不为空,n9e-edge 会使用该地址访问时序库,如果该字段为空,n9e-edge 会使用上面的 URL 访问时序库

  • 关联告警引擎集群:如果只是部署了中心夜莺,这里就默认选择 default 即可,如果你当前添加的数据源是某个边缘机房的数据源,并且该边缘机房有专门的 n9e-edge 告警引擎,那么这里就选择对应的告警引擎集群,何为边缘机房部署模式?请参考前面的文档《附:边缘机房部署

点击【测试并保存】,如果测试通过,就可以对这个数据源的数据看图、配告警规则了。比如我使用 docker compose bridge 部署的,时序库是 VictoriaMetrics,那么数据源 URL 就是 http://victoriametrics:8428,compose 中自动启动了 categraf 采集数据,配置完了数据源就可以立马去查看数据:

部署采集器

通过 Categraf 采集数据

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

支持的OS

categraf 采用golang编写,所以只要支持golang的os,理论上都可以运行。

当前categraf使用golang 1.21版本编译。

  • Windows: Windows10 及以上版本, Windows Server2008以上版本

  • Linux: 内核2.6.32以上的OS

  • macOS: 10.15及以上版本

采集插件

  • aliyun: 阿里云指标采集插件,用于从阿里云服务收集性能指标。

  • amd_rocm_smi: AMD显卡采集插件,用于收集AMD显卡的性能和状态信息。

  • appdynamics: AppDynamics采集插件,用于从AppDynamics平台收集应用性能数据。

  • arp_packet: ARP信息采集插件,用于捕获和分析ARP数据包。

  • bind: BIND信息采集插件,用于收集BIND DNS服务器的性能数据。

  • cadvisor: cAdvisor或kubelet内置cAdvisor采集插件,用于收集容器性能指标。

  • chrony: Chrony是一个网络时间同步工具,插件可能用于监控时间同步状态。

  • clickhouse: ClickHouse数据库性能监控插件。

  • cloudwatch: Amazon CloudWatch采集插件,用于收集AWS CloudWatch指标。

  • conntrack: 连接跟踪采集插件,用于监控网络连接状态。

  • consul: Consul服务发现和配置共享系统采集插件。

  • cpu: CPU性能监控插件,用于收集CPU使用率等信息。

  • dcgm: NVIDIA DCGM(Data Center GPU Manager)采集插件,用于监控NVIDIA GPU。

  • disk: 磁盘性能监控插件,用于收集磁盘使用情况和性能数据。

  • diskio: 磁盘I/O性能监控插件。

  • dns_query: DNS查询监控插件,用于监控DNS查询响应时间等。

  • docker: Docker容器监控插件。

  • elasticsearch: Elasticsearch搜索引擎性能监控插件。

  • exec: 执行外部命令并收集输出的插件。

  • filecount: 文件/文件目录数量和变化监控插件,用于统计特定目录下的文件数量/文件变化。

  • googlecloud: Google Cloud监控插件,用于收集Google Cloud平台的性能指标。

  • greenplum: Greenplum数据库性能监控插件。

  • haproxy: HAProxy负载均衡器监控插件。

  • http_response: HTTP响应时间监控插件。

  • influxdb: InfluxDB时间序列数据库性能监控插件。

  • ipmi: IPMI(智能平台管理接口)采集插件,用于硬件监控和管理。

  • ipvs: Linux IPVS(IP Virtual Server)负载均衡器监控插件。

  • jenkins: Jenkins持续集成工具监控插件。

  • jolokia_agent_kafka: Jolokia代理Kafka监控插件。

  • jolokia_agent_misc: Jolokia代理其他服务监控插件。

  • kafka: Apache Kafka消息队列监控插件。

  • kernel: Linux内核性能监控插件。

  • kernel_vmstat: Linux内核虚拟内存统计监控插件。

  • kubernetes: Kubernetes集群监控插件。

  • ldap: LDAP(轻量级目录访问协议)服务监控插件。

  • linux_sysctl_fs: Linux文件系统sysctl配置监控插件。

  • logstash: Logstash日志处理和转发工具监控插件。

  • mem: 内存性能监控插件。

  • mongodb: MongoDB数据库性能监控插件。

  • mtail: mtail日志数据提取工具监控插件。

  • mysql: MySQL数据库性能监控插件。

  • nats: NATS消息系统监控插件。

  • net: 网络性能监控插件。

  • net_response: 网络(TCP/UDP)响应时间监控插件。

  • netstat: netstat网络状态(time wait/established等)统计监控插件。

  • netstat_filter: 采集网络连接情况,并根据用户条件进行过滤统计。

  • nfsclient: NFS客户端监控插件。

  • nginx: Nginx Web服务器监控插件。

  • nginx_upstream_check: Nginx上游服务健康检查插件。

  • node_exporter: 类似Node Exporter监控插件,多了file和crontab collector。

  • nsq: NSQ消息队列监控插件。

  • ntp: NTP(网络时间协议)服务监控插件。

  • nvidia_smi: NVIDIA SMI(系统管理界面)采集插件,用于监控NVIDIA GPU。

  • oracle: Oracle数据库性能监控插件。

  • phpfpm: PHP-FPM(FastCGI进程管理器)监控插件。

  • ping: 网络连通性监控插件。

  • postgresql: PostgreSQL数据库性能监控插件。

  • processes: 进程状态(running/sleeping等)监控插件。

  • procstat: 系统进程状态监控插件。

  • prometheus: 采集Prometheus格式监控数据的插件。

  • rabbitmq: RabbitMQ消息队列(3.8以下版本)监控插件。

  • redis: Redis数据库性能监控插件。

  • redis_sentinel: Redis Sentinel监控插件。

  • rocketmq_offset: RocketMQ偏移量监控插件。

  • self_metrics: 自身性能指标监控插件。

  • smart: S.M.A.R.T(自监测、分析和报告技术)硬盘监控插件。

  • snmp: SNMP(简单网络管理协议)监控插件。

  • snmp_trap: SNMP Trap监控插件。

  • sockstat: 套接字统计监控插件。

  • sqlserver: Microsoft SQL Server数据库性能监控插件。

  • supervisor: Supervisor进程监控工具监控插件。

  • switch_legacy: 旧版交换机监控插件。

  • system: Linux 系统性能监控插件。

  • systemd: systemd系统和服务管理器监控插件。

  • tengine: Tengine Web服务器监控插件。

  • tomcat: Tomcat应用服务器监控插件。

  • traffic_server: Apache Traffic Server监控插件。

  • vsphere: VMware vSphere监控插件。

  • whois: WHOIS查询监控插件。

  • xskyapi: Xsky分布式存储系统API监控插件。

  • zookeeper: Apache Zookeeper监控插件。

下载

国内用户可以直接去 下载中心下载,国外用户推荐去categraf releases 页面,下载编译好的二进制,也可自行编译,编译只需要一条命令:go build 当然,前提是机器上有 Go 环境。

categraf release包的命名规则遵循{project}-{version}-{os}-{arch}.tar.gz (windows后缀是zip),例如 categraf-v0.3.21-linux-amd64.tar.gz 表示 categraf 的版本是 v0.3.21,运行在 linux 系统上,架构是 amd64。

部署

在目标机器部署,只需要 categraf 二进制、以及 conf 目录,conf 下有一个主配置文件:

  1. config.toml,定义机器名、全局采集频率、全局附加标签、remote write backend地址等;

  2. 另外就是各种采集插件的配置目录,以input.打头,categraf 会遍历这些文件下的插件配置执行采集任务,如果某个采集器 xx 不想启用,把 input.xx 改个其他前缀(或者删除这个目录),比如 bak.input.xx,categraf 就会忽略这个采集器。

启停

linux systemd 托管 (推荐)

v0.3.35 版本及以上支持

# 以service方式安装, 相当于添加service文件+systemctl daemon-reload
sudo ./categraf  --install

# 以service方式卸载, 相当于systemctl stop categraf + 删除service文件
sudo ./categraf  --remove

# 以service方式启动categraf ,相当于systemctl start categraf
# 如果之前有nohup启动的categraf进程,需要先人工停掉原来的categraf进程
sudo ./categraf  --start

# 以service方式停止categraf,相当于systemctl stop categraf
sudo ./categraf  --stop

# 以service方式查看categraf,相当于systemctl status categraf
sudo ./categraf  --status

windows 服务方式启动

# windows 安装服务
categraf.exe --win-service-install

# 启动服务
categraf.exe --win-service-start 

# 停止服务
categraf.exe --win-service-stop

测试

我们经常会需要测试某个采集器的行为,临时看一下这个采集器输出哪些监控指标,比如配置好了 conf/input.mysql/mysql.toml 想要看看采集了哪些 mysql 指标,可以执行命令:./categraf --test --inputs mysql

如果要一次性测试、查看多个插件的输出,可以执行命令:./categraf --test --inputs mysql:cpu:mem, 注意使用冒号来分割多个插件。

这个命令会去连接你配置的 mysql 实例,执行SQL收集输出,将输出的内容做格式转换,最终打印到 stdout,如果我们在 stdout 正常看到了 mysql 相关监控指标,则说明一切正常,否则就是哪里出了问题,大概率是 conf/input.mysql/mysql.toml 配置的有问题。

重启

如果修改了某个采集器的配置,需要重启 categraf 或者给 categraf 进程发送HUP信号,发送HUP信号的命令,如下:

kill -HUP `pidof categraf`

:windows下不支持发送HUP信号,需要重启categraf。

另外,categraf 支持哪些命令行参数,可以通过 ./categraf --help 查看

自升级

linux下v0.3.36版本及以上支持通过 --update --update_url 升级文件来进行升级 ,例如

./categraf  --update  --update_url https://download.flashcat.cloud/categraf-v0.3.36-linux-amd64.tar.gz

自升级的前提就是: 已经通过 --install 安装了服务,如果没有安装服务,需要先安装服务,然后再执行自升级命令。