七星網(wǎng)絡(luò)網(wǎng)站軟文范例大全500
前言
夜鶯類似 Grafana 可以接入多個(gè)數(shù)據(jù)源,查詢數(shù)據(jù)源的數(shù)據(jù)做告警和展示。但是有些數(shù)據(jù)源所在的機(jī)房和中心機(jī)房之間網(wǎng)絡(luò)鏈路不好,如果由 n9e 進(jìn)程去周期性查詢數(shù)據(jù)并判定告警,那在網(wǎng)絡(luò)鏈路抖動(dòng)或擁塞的時(shí)候,告警就不穩(wěn)定了。所以,夜鶯引入了邊緣告警引擎:n9e-edge。n9e-edge 進(jìn)程部署在邊緣機(jī)房,和邊緣機(jī)房的時(shí)序庫部署在一起,由 n9e-edge 負(fù)責(zé)邊緣機(jī)房的告警判定工作,這樣整個(gè)架構(gòu)就穩(wěn)定的多了。
架構(gòu)詳解
為了說明這個(gè)架構(gòu)下的告警引擎工作原理,我畫了一張架構(gòu)圖:
我們這里假設(shè)貴司有 3 個(gè)機(jī)房:中心主力機(jī)房、邊緣機(jī)房 A 和邊緣機(jī)房 B,其中邊緣機(jī)房 A 和中心機(jī)房之間有專線,網(wǎng)絡(luò)鏈路很好,邊緣機(jī)房 B 和中心機(jī)房之間沒有專線,走公網(wǎng),網(wǎng)絡(luò)鏈路不夠可靠。
n9e 進(jìn)程部署在中心主力機(jī)房,n9e 依賴 mysql 和 redis,所以 mysql 和 redis 也部署在中心主力機(jī)房。如果你想做高可用,中心機(jī)房的 n9e 可以部署多個(gè)實(shí)例,配置文件保持一致,連同一個(gè) mysql 和 redis 即可。
上圖中,我們有 5 個(gè)數(shù)據(jù)源:
- 中心機(jī)房有一套 Loki,一套 ElasticSearch
- 邊緣機(jī)房 A 有一套 ElasticSearch,一套 Prometheus
- 邊緣機(jī)房 B 有一套 VictoriaMetrics
我們希望在中心 n9e 統(tǒng)一查看這 5 個(gè)數(shù)據(jù)源的數(shù)據(jù),所以要把這 5 個(gè)數(shù)據(jù)源的訪問地址配置到夜鶯中,菜單位置:集成中心-數(shù)據(jù)源
,如下圖所示:
中心 n9e 可以通過內(nèi)網(wǎng)地址直接連通中心機(jī)房和邊緣機(jī)房 A 的數(shù)據(jù)源,但是無法直接連通邊緣機(jī)房 B 的數(shù)據(jù)源(因?yàn)闆]有專線),那只能把邊緣機(jī)房 B 的 VictoriaMetrics 暴露一個(gè)公網(wǎng)地址(假設(shè)地址為 ex.a.com)出來,中心 n9e 通過公網(wǎng)地址訪問邊緣機(jī)房 B 的 VictoriaMetrics,如下:
架構(gòu)圖中的 1、2、3、4、5 這 5 條線,表示中心 n9e 和 5 個(gè)數(shù)據(jù)源的連接關(guān)系。用戶在查詢數(shù)據(jù)的時(shí)候,是在 n9e 的 web 上查的,發(fā)請(qǐng)求給 n9e 進(jìn)程,n9e 進(jìn)程此時(shí)相當(dāng)于一個(gè) proxy,把請(qǐng)求代理給后端的各個(gè)數(shù)據(jù)源,然后把數(shù)據(jù)源的數(shù)據(jù)返回給用戶。
n9e-edge 部署在邊緣機(jī)房 B,用于處理 B 機(jī)房 VictoriaMetrics 的告警判定,n9e-edge 會(huì)從中心 n9e 同步告警規(guī)則(即圖中的 A 那條線),然后把告警規(guī)則緩存在內(nèi)存里,對(duì)本機(jī)房的 VictoriaMetrics 做告警判定工作。這樣的架構(gòu)下,n9e-edge 和 VictoriaMetrics 是內(nèi)網(wǎng)連通的,所以告警比較可靠,另外即便 n9e-edge 連不通中心機(jī)房的 n9e 了,也不影響 B 機(jī)房的告警判定工作,因?yàn)?n9e-edge 內(nèi)存中已經(jīng)緩存了告警規(guī)則。
n9e-edge 產(chǎn)生的告警事件會(huì)調(diào)用 n9e 的接口寫回中心 mysql,調(diào)用釘釘、飛書、FlashDuty 等的接口發(fā)送通知。如果 n9e-edge 和 n9e 之間網(wǎng)絡(luò)斷了,告警事件就寫不到 mysql 了,但是只要 n9e-edge 所在機(jī)房的外網(wǎng)出口是好的,告警通知還是可以發(fā)出去的。
架構(gòu)圖中:
- 中心機(jī)房的 n9e 負(fù)責(zé)中心機(jī)房的 Loki、ElasticSearch 的告警判定,也負(fù)責(zé)機(jī)房 A 的 ElasticSearch 和 Prometheus 的告警判定
- 邊緣機(jī)房 B 的 n9e-edge 負(fù)責(zé)機(jī)房 B 的 VictoriaMetrics 的告警判定
那如何指定不同的數(shù)據(jù)源和告警引擎之間的關(guān)聯(lián)關(guān)系呢?其實(shí)是在數(shù)據(jù)源的管理頁面:
上圖中:
- URL 是中心 n9e 讀取數(shù)據(jù)的地址,在上例架構(gòu)中,需要配置為 B 機(jī)房 VictoriaMetrics 的公網(wǎng)地址
- 時(shí)序庫內(nèi)網(wǎng)地址是 n9e-edge 連接 VictoriaMetrics 的地址,如果 URL 已經(jīng)是一個(gè)內(nèi)網(wǎng)地址了,這個(gè)配置項(xiàng)就可以留空,留空之后 n9e-edge 就會(huì)使用 URL 中的地址。上例中,由于 n9e-edge 和 VictoriaMetrics 在同一個(gè)機(jī)房,所以這個(gè)地址應(yīng)該配置為內(nèi)網(wǎng)地址,這樣告警判定更可靠
- Remote Write URL 是 VictoriaMetrics 的 remote write 寫入地址,用于記錄規(guī)則,即 recording rule,n9e-edge 負(fù)責(zé)處理記錄規(guī)則,把結(jié)果寫回時(shí)序庫,所以需要知道時(shí)序庫的 remote write 地址,因?yàn)槭墙o n9e-edge 用的,所以使用內(nèi)網(wǎng)地址。如果你沒有用到夜鶯的記錄規(guī)則,這里可以不用配置
- 關(guān)聯(lián)告警引擎集群,上圖選擇的是 edge-b,這是 B 機(jī)房 n9e-edge 的名字(由 edge.toml 的 EngineName 字段指定),這樣配置之后,就建立了 B 機(jī)房 n9e-edge 和 B 機(jī)房 VictoriaMetrics 之間的關(guān)聯(lián)關(guān)系,就會(huì)由這個(gè) n9e-edge 來處理 B 機(jī)房 VictoriaMetrics 的告警規(guī)則和記錄規(guī)則
新版本的夜鶯,n9e-edge 依賴一個(gè) redis,所以需要在 B 機(jī)房部署一個(gè) redis 給 n9e-edge 使用,注意,n9e-edge 所用的 redis 和中心機(jī)房 n9e 所用的 redis 不是一個(gè)。架構(gòu)圖中我特意標(biāo)注了 R1、R2 兩個(gè)名字,表示兩個(gè) redis,分別給 n9e 和 n9e-edge 使用。
最后說一下 categraf,如果網(wǎng)絡(luò)鏈路比較好,categraf 可以把數(shù)據(jù)直接上報(bào)到中心機(jī)房的 n9e,比如中心機(jī)房和 A 機(jī)房的 categraf 都可以直接對(duì)接到中心機(jī)房的 n9e,但是 B 機(jī)房部署了 n9e-edge,那 B 機(jī)房的 categraf 就應(yīng)該對(duì)接到 B 機(jī)房的 n9e-edge。
配置樣例
要達(dá)到上述架構(gòu),各個(gè)組件的配置文件應(yīng)該如何配置?這里給出一個(gè)示例。
中心機(jī)房 n9e 配置
中心機(jī)房 n9e 的默認(rèn)配置文件是?etc/config.toml
:
[HTTP.APIForService]
Enable = true
[HTTP.APIForService.BasicAuth]
user001 = "ccc26da7b9aba533cbb263a36c07dcc5"
user002 = "ccc26da7b9aba533cbb263a36c07dcc6"
重點(diǎn)就是?HTTP.APIForService
?這塊的配置。默認(rèn) Enable 是 false 是為了安全考慮,即默認(rèn)不支持 n9e-edge 架構(gòu),如果要支持,需要改成 true。n9e-edge 調(diào)用 n9e 的接口時(shí),可以使用 BasicAuth 認(rèn)證,即?HTTP.APIForService.BasicAuth
?下面的部分,上例中配置了兩個(gè)用戶,分別是 user001 和 user002,密碼是?ccc26da7b9aba533cbb263a36c07dcc5
?和?ccc26da7b9aba533cbb263a36c07dcc6
。其實(shí)配置一個(gè)用戶就行,我配置兩個(gè)只是為了演示。另外,如果你的 n9e 暴露在公網(wǎng),千萬要修改 BasicAuth 的默認(rèn)密碼,不然很容易被攻擊。
邊緣機(jī)房 n9e-edge 配置
邊緣機(jī)房 n9e-edge 的默認(rèn)配置文件是?etc/edge/edge.toml
,首先 n9e-edge 要調(diào)用中心 n9e 的接口,所以要配置中心 n9e 的地址:
[CenterApi]
Addrs = ["http://N9E-CENTER-SERVER:17000"]
BasicAuthUser = "user001"
BasicAuthPass = "ccc26da7b9aba533cbb263a36c07dcc5"
# unit: ms
Timeout = 9000
N9E-CENTER-SERVER:17000 表示中心 n9e 的地址,你按照自己的環(huán)境調(diào)整即可。BasicAuthUser 和 BasicAuthPass 是中心 n9e 的 BasicAuth 用戶名和密碼,如果中心 n9e 沒有開啟 BasicAuth,這兩個(gè)字段可以不填。還是那句話,千萬要修改 BasicAuth 的默認(rèn)密碼,不然很容易被攻擊。
新版本 n9e-edge 依賴 redis,所以要配置 redis 地址,默認(rèn)應(yīng)該是在 edge.toml 的最下面,自行修改即可。如果你是老版本,不依賴 redis,那就不用配置了。如何分辨你的版本的 n9e-edge 是否依賴 redis?就看你下載下來的 edge.toml 默認(rèn)配置中是否帶有 redis 配置,帶了就說明依賴 redis。
邊緣機(jī)房 categraf 配置
主要是注意 2 個(gè)地方,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 默認(rèn)監(jiān)聽的端口是 19000,也可以在 edge.toml 中自行修改。
ibex 配置
ibex 部分,即故障自愈的功能,這個(gè)功能有些公司擔(dān)心安全問題不開放。如果你們要開啟這個(gè)功能,同樣的道理,在 edge.toml 中開啟:
[Ibex]
Enable = true
RPCListen = "0.0.0.0:20090"
然后邊緣機(jī)房的 categraf 連邊緣機(jī)房的 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 = "./meta"
N9E-EDGE-IP:20090
?表示 n9e-edge 的 RPC 地址。注意這是 RPC 地址,不是 HTTP 地址,所以,不要在?N9E-EDGE-IP
?前面畫蛇添足加上?http://
?啦。
其他適用場景
除了網(wǎng)絡(luò)鏈路不好的場景之外,有時(shí)為了安全考慮,網(wǎng)絡(luò)也會(huì)有分區(qū),比如某個(gè)網(wǎng)絡(luò)區(qū)域只有一臺(tái)中轉(zhuǎn)機(jī)可以連通中心的 n9e,其他機(jī)器都不能連通,這時(shí)候就可以在中轉(zhuǎn)機(jī)上部署 n9e-edge,然后其他機(jī)器的 categraf 連中轉(zhuǎn)機(jī)的 n9e-edge 即可。
總結(jié)
這個(gè)邊緣機(jī)房告警引擎的模式聽起來稍微有點(diǎn)復(fù)雜,不過對(duì)提高監(jiān)控系統(tǒng)的可用性有很大幫助,多讀兩遍本文,理解架構(gòu)了就容易了,希望本文可以幫到你,加油!