夜莺是什么
夜莺监控(Nightingale)是一款开箱即用、默认中文、界面美观的开源监控系统。
夜莺监控是一款先进的开源云原生监控分析系统,采用 All-In-One 的设计,集数据采集、可视化、监控告警、数据分析、权限管理于一体,拥有企业级的监控分析和告警能力。夜莺集合了 Prometheus 和 Grafana 的优点,你可以在 UI 上管理和配置告警策略,也可以对分布在多个 Region 的指标、日志、链路追踪数据进行统一的可视化和分析。
夜莺是一个服务端组件,类似 Grafana,可以对接不同的TSDB时序数据库作为数据源,支持的TSDB时序数据库如Prometheus、VictoriaMetrics、Thanos等等,只要数据进到这些库里了,夜莺就可以对数据源的数据进行分析、告警、可视化,以及后续的事件处理、告警自愈。
架构介绍
中心机房部署架构
对于中心集群来说,主要包括以下组件:
MySQL:用于存放配置信息以及告警事件。
Redis:用于存储 JWT Token,机器元信息等数据。
TSDB:时序数据库,存放监控指标。
N9e:核心服务,处理 Web 请求、提供告警引擎。
中间的飞鸟代表夜莺的核心进程 n9e ,它的集群方式非常简单只需部署多节点即可实现。
对于 n9e 来说,它本身依赖的存储有两个:
Mysql : 存放配置类别信息,如用户,监控大盘,告警规则等。
Redis : 存放访问令牌(JWT Token),心跳信息,如机器列表中CPU、内存、时间偏移、核数、操作系统、CPU架构等。
从 v6 版本开始,夜莺尝试转型为统一可观测性平台,n9e 不再仅支持接入时序数据源(Prometheus、Victoriametrics、M3DB、Thanos),也可以接入日志类数据源(Elasticsearch,Loki),链路追踪数据源(Jaeger)。
Categraf是夜莺团队开发维护的监控采集侧核心组件,类似Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用All-in-one的设计,不但支持指标采集,也希望支持日志和调用链路的数据采集。Categraf采集器采集了数据推送给夜莺,然后转存到后端数据源,如TSDB、ElasticSearch等。
特点是简单,维护成本比较低。
缺点:前提是要求机房之间的网络链路要比较好。
边缘下沉式混杂部署方案
主要是针对网络不好的情况:
把时序数据库 TSDB、转发网关、告警引擎都下沉到具体的 Region,由 Region 自己的来处理。不过 Region 依然需要和中心集群建立心跳连接,用户还是可以通过中心集群的监控面板查看其他 Region 的监控信息。
从 v6.0.0.ga.9 开始,合并了 n9e-alert、n9e-pushgw 模块为 n9e-edge,应对边缘机房的场景。n9e-edge 不依赖 mysql、redis,只依赖中心端的 n9e,所以 edge.toml 配置文件里,需要配置中心端 n9e 的地址。
[CenterApi]
Addrs = ["http://127.0.0.1:17000"]
BasicAuthUser = "user001"
BasicAuthPass = "ccc26da7b9aba533cbb263a36c07dcc5"
# unit: ms
Timeout = 9000
部署夜莺
使用 Docker compose 的方式一键部署夜莺
先去 github releases 页面下载最新的 release 包,或者从 flashcat 下载中心下载最新的发布包。
下载完成后解压缩,可以看到三个目录:
compose-bridge:bridge 网络模式的 docker compose 部署方式,数据库使用 MySQL。
compose-host-network:host 网络模式的 docker compose 部署方式,数据库使用 MySQL。
compose-postgres: bridge 网络模式的 docker compose 部署方式,数据库使用 PostgreSQL。
MacOS 不支持 host network,所以,MacOS 用户只能使用 bridge 模式。
进入 compose-bridge 目录,执行 docker-compose up -d 即可启动。
# docker compose V2版本执行 docker compose up -d (https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)
docker-compose up -d
# 正常会有以下输出
# Creating mysql ... done
# Creating redis ... done
# Creating prometheus ... done
# Creating ibex ... done
# Creating agentd ... done
# Creating n9e ... done
# Creating telegraf ... done
# docker compose V2版本执行 docker compose ps (https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)
docker-compose ps
# 正常情况会有以下输出
# NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
# categraf flashcatcloud/categraf:latest "/entrypoint.sh" categraf 2 days ago Up 2 days
# ibex ulric2019/ibex:0.3 "sh -c '/wait && /ap…" ibex 2 days ago Up 2 days
# mysql mysql:5.7 "docker-entrypoint.s…" mysql 2 days ago Up 2 days
# n9e flashcatcloud/nightingale:latest "sh -c '/wait && /ap…" n9e 2 days ago Up 2 days
# prometheus prom/prometheus "/bin/prometheus --c…" prometheus 2 days ago Up 2 days
# redis redis:6.2 "docker-entrypoint.s…" redis 2 days ago Up 2 days
在浏览器输入http://127.0.0.1:17000,默认用户是root,密码是root.2020。
基本使用
添加数据源
在即时查询可以查到 Prometheus 的数据或者直接查看 node-exporter 的仪表盘。