阿雷网站建设,wordpress lucene,wordpress相册分类名称,温岭公司做网站前言
夜莺类似 Grafana 可以接入多个数据源#xff0c;查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好#xff0c;如果由 n9e 进程去周期性查询数据并判定告警#xff0c;那在网络链路抖动或拥塞的时候#xff0c;告警就不稳定了。所…前言
夜莺类似 Grafana 可以接入多个数据源查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好如果由 n9e 进程去周期性查询数据并判定告警那在网络链路抖动或拥塞的时候告警就不稳定了。所以夜莺引入了边缘告警引擎n9e-edge。n9e-edge 进程部署在边缘机房和边缘机房的时序库部署在一起由 n9e-edge 负责边缘机房的告警判定工作这样整个架构就稳定的多了。
架构详解
为了说明这个架构下的告警引擎工作原理我画了一张架构图 我们这里假设贵司有 3 个机房中心主力机房、边缘机房 A 和边缘机房 B其中边缘机房 A 和中心机房之间有专线网络链路很好边缘机房 B 和中心机房之间没有专线走公网网络链路不够可靠。
n9e 进程部署在中心主力机房n9e 依赖 mysql 和 redis所以 mysql 和 redis 也部署在中心主力机房。如果你想做高可用中心机房的 n9e 可以部署多个实例配置文件保持一致连同一个 mysql 和 redis 即可。
上图中我们有 5 个数据源
中心机房有一套 Loki一套 ElasticSearch边缘机房 A 有一套 ElasticSearch一套 Prometheus边缘机房 B 有一套 VictoriaMetrics
我们希望在中心 n9e 统一查看这 5 个数据源的数据所以要把这 5 个数据源的访问地址配置到夜莺中菜单位置集成中心-数据源如下图所示 中心 n9e 可以通过内网地址直接连通中心机房和边缘机房 A 的数据源但是无法直接连通边缘机房 B 的数据源因为没有专线那只能把边缘机房 B 的 VictoriaMetrics 暴露一个公网地址假设地址为 ex.a.com出来中心 n9e 通过公网地址访问边缘机房 B 的 VictoriaMetrics如下 架构图中的 1、2、3、4、5 这 5 条线表示中心 n9e 和 5 个数据源的连接关系。用户在查询数据的时候是在 n9e 的 web 上查的发请求给 n9e 进程n9e 进程此时相当于一个 proxy把请求代理给后端的各个数据源然后把数据源的数据返回给用户。
n9e-edge 部署在边缘机房 B用于处理 B 机房 VictoriaMetrics 的告警判定n9e-edge 会从中心 n9e 同步告警规则即图中的 A 那条线然后把告警规则缓存在内存里对本机房的 VictoriaMetrics 做告警判定工作。这样的架构下n9e-edge 和 VictoriaMetrics 是内网连通的所以告警比较可靠另外即便 n9e-edge 连不通中心机房的 n9e 了也不影响 B 机房的告警判定工作因为 n9e-edge 内存中已经缓存了告警规则。
n9e-edge 产生的告警事件会调用 n9e 的接口写回中心 mysql调用钉钉、飞书、FlashDuty 等的接口发送通知。如果 n9e-edge 和 n9e 之间网络断了告警事件就写不到 mysql 了但是只要 n9e-edge 所在机房的外网出口是好的告警通知还是可以发出去的。
架构图中
中心机房的 n9e 负责中心机房的 Loki、ElasticSearch 的告警判定也负责机房 A 的 ElasticSearch 和 Prometheus 的告警判定边缘机房 B 的 n9e-edge 负责机房 B 的 VictoriaMetrics 的告警判定
那如何指定不同的数据源和告警引擎之间的关联关系呢其实是在数据源的管理页面 上图中
URL 是中心 n9e 读取数据的地址在上例架构中需要配置为 B 机房 VictoriaMetrics 的公网地址时序库内网地址是 n9e-edge 连接 VictoriaMetrics 的地址如果 URL 已经是一个内网地址了这个配置项就可以留空留空之后 n9e-edge 就会使用 URL 中的地址。上例中由于 n9e-edge 和 VictoriaMetrics 在同一个机房所以这个地址应该配置为内网地址这样告警判定更可靠Remote Write URL 是 VictoriaMetrics 的 remote write 写入地址用于记录规则即 recording rulen9e-edge 负责处理记录规则把结果写回时序库所以需要知道时序库的 remote write 地址因为是给 n9e-edge 用的所以使用内网地址。如果你没有用到夜莺的记录规则这里可以不用配置关联告警引擎集群上图选择的是 edge-b这是 B 机房 n9e-edge 的名字由 edge.toml 的 EngineName 字段指定这样配置之后就建立了 B 机房 n9e-edge 和 B 机房 VictoriaMetrics 之间的关联关系就会由这个 n9e-edge 来处理 B 机房 VictoriaMetrics 的告警规则和记录规则
新版本的夜莺n9e-edge 依赖一个 redis所以需要在 B 机房部署一个 redis 给 n9e-edge 使用注意n9e-edge 所用的 redis 和中心机房 n9e 所用的 redis 不是一个。架构图中我特意标注了 R1、R2 两个名字表示两个 redis分别给 n9e 和 n9e-edge 使用。
最后说一下 categraf如果网络链路比较好categraf 可以把数据直接上报到中心机房的 n9e比如中心机房和 A 机房的 categraf 都可以直接对接到中心机房的 n9e但是 B 机房部署了 n9e-edge那 B 机房的 categraf 就应该对接到 B 机房的 n9e-edge。
配置样例
要达到上述架构各个组件的配置文件应该如何配置这里给出一个示例。
中心机房 n9e 配置
中心机房 n9e 的默认配置文件是 etc/config.toml
[HTTP.APIForService]
Enable true
[HTTP.APIForService.BasicAuth]
user001 ccc26da7b9aba533cbb263a36c07dcc5
user002 ccc26da7b9aba533cbb263a36c07dcc6重点就是 HTTP.APIForService 这块的配置。默认 Enable 是 false 是为了安全考虑即默认不支持 n9e-edge 架构如果要支持需要改成 true。n9e-edge 调用 n9e 的接口时可以使用 BasicAuth 认证即 HTTP.APIForService.BasicAuth 下面的部分上例中配置了两个用户分别是 user001 和 user002密码是 ccc26da7b9aba533cbb263a36c07dcc5 和 ccc26da7b9aba533cbb263a36c07dcc6。其实配置一个用户就行我配置两个只是为了演示。另外如果你的 n9e 暴露在公网千万要修改 BasicAuth 的默认密码不然很容易被攻击。
边缘机房 n9e-edge 配置
边缘机房 n9e-edge 的默认配置文件是 etc/edge/edge.toml首先 n9e-edge 要调用中心 n9e 的接口所以要配置中心 n9e 的地址
[CenterApi]
Addrs [http://N9E-CENTER-SERVER:17000]
BasicAuthUser user001
BasicAuthPass ccc26da7b9aba533cbb263a36c07dcc5
# unit: ms
Timeout 9000N9E-CENTER-SERVER:17000 表示中心 n9e 的地址你按照自己的环境调整即可。BasicAuthUser 和 BasicAuthPass 是中心 n9e 的 BasicAuth 用户名和密码如果中心 n9e 没有开启 BasicAuth这两个字段可以不填。还是那句话千万要修改 BasicAuth 的默认密码不然很容易被攻击。
新版本 n9e-edge 依赖 redis所以要配置 redis 地址默认应该是在 edge.toml 的最下面自行修改即可。如果你是老版本不依赖 redis那就不用配置了。如何分辨你的版本的 n9e-edge 是否依赖 redis就看你下载下来的 edge.toml 默认配置中是否带有 redis 配置带了就说明依赖 redis。
边缘机房 categraf 配置
主要是注意 2 个地方writer 的地址和 heartbeat 的地址都配置为 n9e-edge 的地址
...
[[writers]]
url http://N9E-EDGE:19000/prometheus/v1/write...
[heartbeat]
enable true# report os version cpu.util mem.util metadata
url http://N9E-EDGE:19000/v1/n9e/heartbeat
...N9E-EDGE:19000 表示 n9e-edge 的地址注意n9e-edge 默认监听的端口是 19000也可以在 edge.toml 中自行修改。
ibex 配置
ibex 部分即故障自愈的功能这个功能有些公司担心安全问题不开放。如果你们要开启这个功能同样的道理在 edge.toml 中开启
[Ibex]
Enable true
RPCListen 0.0.0.0:20090然后边缘机房的 categraf 连边缘机房的 n9e-edge 的 20090 端口即可即 categraf 的 config.toml 要做如下配置
[ibex]
enable true
## ibex flush interval
interval 1000ms
## n9e ibex server rpc address
servers [N9E-EDGE-IP:20090]
## temp script dir
meta_dir ./metaN9E-EDGE-IP:20090 表示 n9e-edge 的 RPC 地址。注意这是 RPC 地址不是 HTTP 地址所以不要在 N9E-EDGE-IP 前面画蛇添足加上 http:// 啦。
其他适用场景
除了网络链路不好的场景之外有时为了安全考虑网络也会有分区比如某个网络区域只有一台中转机可以连通中心的 n9e其他机器都不能连通这时候就可以在中转机上部署 n9e-edge然后其他机器的 categraf 连中转机的 n9e-edge 即可。
总结
这个边缘机房告警引擎的模式听起来稍微有点复杂不过对提高监控系统的可用性有很大帮助多读两遍本文理解架构了就容易了希望本文可以帮到你加油