跳到主要内容

生产拓扑

单团队、单公司、多机房带边缘告警的参考布局。

三档规模,三张部署图。挑最接近你现状的那张照着搭,不用从架构图开始设计。

单团队:一台机器​

一个组、几十台机器、告警断一会儿不至于出事——一台机器上跑一个 n9e 就够。

categraf ──► n9e (17000) ──► 内置时序库(本地磁盘)
│
MySQL + Redis
  • [DB] 换成 MySQL 或 PostgreSQL,[Redis] 换成 standalone:默认的 SQLite 和 miniredis 是进程内的,进程没了数据就没了;
  • [EmbeddedTSDB] 保持开启,RetentionDuration 按你要看多久的历史调;
  • 备份只有一件事:mysqldump + etc/ 目录。

代价说清楚:这台机器就是单点。n9e 进程挂了、机器重启了,这段时间不判定也不通知。

单公司:两三个 n9e + 外部时序库​

告警开始被当成基础设施之后,第一件要去掉的就是上面那个单点。

┌── n9e #1 ─┐
浏览器 / 采集器 ─►│ n9e #2 │──► VictoriaMetrics / Prometheus
(LB) └── n9e #3 ─┘
│
MySQL + Redis(各自也要做高可用)

组集群没有额外组件:多跑几个 n9e,配置一致,共享同一套 MySQL 和 Redis。 告警规则自动分派,一条规则只在一个实例上跑;某个实例挂了,它的规则被别的实例接管。

三处必须改:

# 1. 关掉内置时序库——它的数据在单个进程的本地磁盘上,多副本时每个只有一部分
[EmbeddedTSDB]
Enable = false

# 2. 指向外部时序库
[[Pushgw.Writers]]
Url = "http://victoriametrics:8428/api/v1/write"

# 3. 数据库和 Redis 必须是所有实例都连得上的同一套
[DB]
DSN = "n9e:<password>@tcp(mysql:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local"
[Redis]
RedisType = "standalone"
Address = "redis:6379"

负载均衡后面挂的是 17000 端口。注意写入端点和管理端点在同一个端口上 (/prometheus/v1/write、/v1/n9e/heartbeat 和 Web UI 都在 17000), 做网络收口时不能简单地「把 17000 放到公网」。

多机房:中心 + 边缘​

有多个机房、机房之间的专线不那么可靠时,让中心去查远端机房的时序库, 告警的可靠性就等于那条链路的可靠性——链路一断,整个机房失去告警。

中心机房 边缘机房 A
┌──────────────┐ ┌────────────────────────┐
│ n9e × N │◄── 拉规则配置 ──│ n9e-edge (19000) │
│ MySQL/Redis │ │ 本地 Redis + 本地时序库 │
└──────────────┘ └────────────────────────┘

n9e-edge 跑在边缘机房,规则仍然在中心统一管理并下发,但查询和判定在本地做。 链路断了,边缘继续判定、继续发通知。

要点:

  • 中心侧要打开 [HTTP.APIForService] Enable = true,边缘靠它拉配置;
  • 边缘需要自己的 Redis,不能复用中心那套;
  • 启动时一定要指对配置目录:n9e-edge --configs etc/edge, 默认的 etc 是中心的配置,指错了不会报错,只会静默地跑偏。

详见边缘机房与边缘断网行为。

什么时候值得拆进程​

n9e 里已经包含了告警判定和 Pushgw 的能力,n9e-alert / n9e-pushgw 是性能选项,不是必经步骤。

现象拆什么
Web 页面卡,但判定不延迟先别拆,看数据源查询是不是慢
判定延迟,Web 也跟着卡拆 n9e-alert,让判定不和 Web 抢 CPU
写入量把进程打满,判定被拖累拆 n9e-pushgw
某个机房的数据查不动上 n9e-edge,这是拓扑变化不是性能调优

一上来就三个进程,只是多两份要保持同步的配置文件。

三档拓扑要准备的东西​

单团队单公司多机房
n9e 实例数12–3中心 2–3 + 每机房 1 个 edge
元数据库MySQL/PostgreSQL 单实例MySQL 主备同左
Redis单实例哨兵或集群中心一套 + 每个边缘机房一套
时序库内置外部(VictoriaMetrics 等)中心一套 + 每机房本地一套
负载均衡不需要需要中心需要

相关​