前言

可观测性是大部分中小公司比较头疼的问题,主要表现以下几个方面:

需要不同的开源软件来组装以实现不同的功能,比如使用 Skywalking 实现链路监控,使用 ELK 实现日志收集监控,使用 Grafana+Prometheus 来实现指标监控。

每个开源软件背后都是独立的一套体系,它们之前是相互独立的(Grafana 全家桶已经实现组合)。

数据孤岛,链路、日志、指标各玩各的,没有建立联系。目前市面上的解决方案要么是商业化产品,要么是自研。

本文的主角其实也没有做大一统,目前阶段依然是不同的开源组件实现不同的功能,只不过N9e可以在同一个主面板查看它们,但是数据之间的联系依然没有实现。

那为什么还要学习研究N9e呢?

因为它正在向这方面发展。

上面提到 Grafana 其实已经在做了,基于 Grafana+Loki+Tempo+Prometheus 组合可以实现监控、指标、链路的联动,N9e 和 Grafana 有什么不同呢?

用秦总的话说:Grafana更擅长监控面板的管理,N9e更擅长告警规则的管理。

N9e 可以将不同的告警规则发送到不同的业务组,不同的群体,避免在一个群里产生大量的告警信息,久而久之就上演了狼来了的故事。

说了这么多,N9e到底长啥样?

下面是我部署好的一套系统。

image.png

可以看到,在该面板上,我们可以实现:

告警管理

时序指标查询

日志分析

链路追踪

告警自愈

人员管理

这样就不用几个应用来回切了,方面快捷。

系统架构

说一千到一万,架构不懂都白干。

现在我们来看看 N9e 的架构到底是什么样的,只有从架构逻辑上理清楚 N9e 是怎么玩的,不论是对部署还是维护都大有裨益。

N9e 主要有中心汇聚式部署方案以及边缘下沉式混杂部署方案,下面会分别做解释。

中心汇聚式部署方案

先上图:

打开网易新闻 查看精彩图片

image.png

对于中心集群来说,主要包括以下组件:

MySQL:用于存放配置信息以及告警事件。

Redis:用于存储 JWT Token,机器元信息等数据。

TSDB:时序数据库,存放监控指标。

N9e:核心服务,处理 Web 请求、提供告警引擎

LB:为多个 N9e 提供负载功能。

对于其他 Region,只需要部署 Categraf 即可,它会将本地的监控数据推送到中心集群。

边缘下沉式混杂部署方案

打开网易新闻 查看精彩图片

image.png

把时序数据库 TSDB、转发网关、告警引擎都下沉到具体的 Region,由 Region 自己的来处理。不过 Region 依然需要和中心集群建立心跳连接,用户还是可以通过中心集群的监控面板查看其他 Region 的监控信息。

对于已有 Prometheus 的情况,也可以直接将 Prometheus 作为数据源接入即可。

单机部署

为什么这里要选择单机部署呢?

其实我是想挨着部署各个组件,这样对于理解整个 N9e 的运行模式有一定的帮助。

!! Tips:我这里使用的是 Ubuntu 22.04.1 系统

安装 MySQL

!! Tips:为了快速我安装的是 Mariadb

# 更新镜像源$ sudo apt-get update# 更新软件$ sudo apt-get upgrade# 安装Mariabd$ sudo apt-get install mariadb-server-10.6

安装完成后会自动启动。然后为数据库设置一个用户密码。

# 连接数据库$ sudo mysql# 设置权限和密码> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '1234';>flush privileges;

安装 Redis

# 更新镜像源$ sudo apt-get update# 更新软件$ sudo apt-get upgrade# 安装Redis$ sudo apt install redis-server

默认会自动启动。

安装 TSDB

N9e 的 TSDB 有多种选择:

Prometheus

M3DB

VictoriaMetrics

InfluxDB

Thanos

这里我选择的是 VictoriaMetrics。

# 下载二进制包$ wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.90.0/victoria-metrics-linux-amd64-v1.90.0.tar.gz# 解压$ tar xf victoria-metrics-linux-amd64-v1.90.0.tar.gz# 启动$ nohup ./victoria-metrics-prod &>victoria.log &

观察8428是否启动。

安装 N9e

# 下载最新版本的二进制包$ wget https://github.com/ccfos/nightingale/releases/download/v6.0.0-ga.3/n9e-v6.0.0-ga.3-linux-amd64.tar.gz# 解压$ mkdir n9e$ tar xf n9e-v6.0.0-ga.3-linux-amd64.tar.gz -C n9e/# 检验目录如下$ lltotal 35332drwxrwxr-x7 jokerbai jokerbai 40964月 12 14:05 ./drwxr-xr-x4 jokerbai jokerbai 40964月 12 14:05 ../drwxrwxr-x3 jokerbai jokerbai 40964月 12 14:05 cli/drwxrwxr-x 10 jokerbai jokerbai 40964月 12 14:05 docker/drwxrwxr-x4 jokerbai jokerbai 40964月 12 14:09 etc/drwxrwxr-x 20 jokerbai jokerbai 40964月 12 14:05 integrations/-rwxr-xr-x1 jokerbai jokerbai 252805124月6 19:05 n9e*-rwxr-xr-x1 jokerbai jokerbai 108380164月6 19:05 n9e-cli*-rw-r--r--1 jokerbai jokerbai297844月6 19:04 n9e.sqldrwxrwxr-x6 jokerbai jokerbai 40964月 12 14:05 pub/

然后导入 N9e 的数据库。

# 导入数据库$ mysql -uroot -p

修改 N9e 的配置文件,在当前目录 etc/config.toml 文件中。

[[Pushgw.Writers]]# Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"Url = "http://127.0.0.1:8428/api/v1/write"

然后启动 N9e 服务。

# 启动服务$ nohup ./n9e &>n9e.log &# 检测17000端口是否启动$ ss -ntl | grep 17000LISTEN 04096 *:17000*:*

在浏览器输入http://127.0.0.1:17000,然后输入用户名root,密码root.2020即可登录系统。

打开网易新闻 查看精彩图片

安装 Categraf

Categraf 是一个监控采集 Agent,会将采集到的信息推送到 TSDB。

# 下载$ wget https://download.flashcat.cloud/categraf-v0.2.38-linux-amd64.tar.gz# 解压$ tar xf categraf-v0.2.38-linux-amd64.tar.gz# 进入目录$ cd categraf-v0.2.38-linux-amd64/

修改配置文件,在 conf/config.toml 中,修改的部分如下:

[[writers]]url = "http://127.0.0.1:17000/prometheus/v1/write"[heartbeat]enable = true

然后启动 Categraf。

$ nohup ./categraf &>categraf.log &

然后就可以在主界面看到基础信息。

打开网易新闻 查看精彩图片

添加数据源

现在如果去查看时序数据指标,是查询不到的,因为没有添加数据源。

打开网易新闻 查看精彩图片

在系统配置->数据源处添加数据源,如下:

打开网易新闻 查看精彩图片

然后就能看到对应的指标数据了。

打开网易新闻 查看精彩图片

也可以通过内置的仪表盘查看主机的监控数据,如下:

打开网易新闻 查看精彩图片

总结

这篇文章主要是带搭建对夜莺(Nightingale )有一个初步的印象,对它的整体架构做了简单的介绍,然后带大家从 0 到 1 安装了一遍,旨在让大家对夜莺的组件有一个清晰的认识。

目前夜莺已经更新迭代到 V6 版本,该版本有许多新的功能尝试,比如接入 ELK,接入 Jaeger 等,后续会持续对这个系列进行更新。