夜鶯官方文檔優(yōu)化第一彈:手把手教你部署和架構(gòu)講解,消滅所有部署失敗的case!干!
前置說(shuō)明
各種環(huán)境的選型建議
Docker compose 方式:僅僅用于簡(jiǎn)單測(cè)試,不推薦在生產(chǎn)環(huán)境使用 Docker compose,升級(jí)起來(lái)挺麻煩的,除非你對(duì) Docker compose 真的很熟
二進(jìn)制部署:最推薦的方式,穩(wěn),升級(jí)也方便
Helm 方式:公司大規(guī)模使用了 Kubernetes,可以選擇?Helm 方式(?https://github.com/flashcatcloud/n9e-helm ),前提是貴司對(duì) Helm 這套真的很熟
存儲(chǔ)選型:如果之前沒(méi)有部署過(guò),是個(gè)新環(huán)境,時(shí)序庫(kù)選型建議使用 VictoriaMetrics,單機(jī)版 VictoriaMetrics 就可以抗住每秒上百萬(wàn)數(shù)據(jù)點(diǎn),性能很好,CPU、內(nèi)存的占用都比 Prometheus 少,而且,完全兼容 Prometheus 的查詢接口
時(shí)間校準(zhǔn):社區(qū)反饋的很多問(wèn)題都是因?yàn)闄C(jī)器時(shí)間沒(méi)有校準(zhǔn),監(jiān)控系統(tǒng)對(duì)時(shí)間很敏感,請(qǐng)各位先把機(jī)器時(shí)間校準(zhǔn)一致,讓服務(wù)端的機(jī)器、時(shí)序庫(kù)的機(jī)器、要監(jiān)控的目標(biāo)機(jī)器、瀏覽器所在的 PC 時(shí)間,都保持一致
用戶名密碼
默認(rèn)用戶是?root
,密碼是?root.2020
。
使用 Docker compose 快速體驗(yàn)
具體可以參考這個(gè)文檔(?https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/install/docker-compose/ )。不推薦使用,除非你對(duì) Docker compose 真的很熟!
安裝前置依賴
我們更推薦二進(jìn)制的方式來(lái)部署,后文都是以二進(jìn)制的方式來(lái)說(shuō)明部署方式以及架構(gòu)。夜鶯依賴 mysql 存儲(chǔ)用戶配置類數(shù)據(jù),依賴 redis 存儲(chǔ) jwt token 和機(jī)器心跳上報(bào)的 metadata,所以,先準(zhǔn)備 mysql 和 redis。這倆組件請(qǐng)大家自行安裝,這里也提供一個(gè)小腳本來(lái)安裝這兩個(gè)組件,大家可以參考:
上例中 mysql 的 root 密碼設(shè)置為了 1234,建議維持這個(gè)不變,后續(xù)就省去了修改配置文件的麻煩。如果你想修改默認(rèn)用戶名和密碼,就要對(duì)應(yīng)的修改配置文件中的 mysql 連接信息,配置文件的哪個(gè)地方配置了 mysql 的密碼呢?通過(guò)下面的命令可以找到:
安裝夜鶯
可以去?https://flashcat.cloud/download/nightingale/?找最新版本的包,文檔里的包地址可能已經(jīng)不是最新的了
如果日志和端口都沒(méi)啥問(wèn)題,恭喜,你完成了夜鶯的安裝!通過(guò)瀏覽器訪問(wèn)這個(gè)機(jī)器的 17000,理論上就可以看到登錄頁(yè)面了。
玩法1:僅使用夜鶯做告警管理
如果您之前已經(jīng)部署了 Prometheus、Thanos、VictoriaMetrics、M3DB、Mimir 等某個(gè)時(shí)序庫(kù),只是想使用夜鶯的告警管理功能,沒(méi)問(wèn)題,架構(gòu)如下:

假設(shè)你之前有個(gè) Prometheus,只需要把 Prometheus 作為數(shù)據(jù)源配置進(jìn)來(lái)就可以了,入口在:

具體配置樣例如下:

這里一些配置項(xiàng)的含義解釋如下:
名稱:隨意取名,就是個(gè)標(biāo)識(shí),使用英文命名
URL:Prometheus 的訪問(wèn)地址,如果是其他時(shí)序庫(kù),這個(gè)地址就不同嘍,比如集群版本的 VictoriaMetrics,可能是類似這么個(gè)地址:
http://127.0.0.1:8481/select/0/prometheus
超時(shí)時(shí)間:?jiǎn)挝皇呛撩耄ㄗh最小設(shè)置為10000,即10s,如果一些大的查詢,就會(huì)比較耗時(shí)
授權(quán):如果時(shí)序庫(kù)啟用了 Basic auth,這里就配置對(duì)應(yīng)的 Basic auth username 和 password 即可
跳過(guò) SSL 驗(yàn)證:如果證書不是正兒八經(jīng)的證書想要跳過(guò)校驗(yàn),就勾選這個(gè)項(xiàng)
自定義 HTTP 頭:訪問(wèn)時(shí)序庫(kù)的時(shí)候可以附加一些 HTTP Header
write_addr:這個(gè)是時(shí)序庫(kù)的 remote write 地址,我的例子中是 Prometheus,所以 url path 是?
/api/v1/write
,如果是其他時(shí)序庫(kù)可能不同,比如集群版本的 VictoriaMetrics,remote write 地址可能是類似這個(gè)樣子:http://127.0.0.1:8480/insert/0/prometheus/api/v1/write
。這個(gè)信息用在哪里呢?平時(shí)都用不到,除非你在夜鶯里使用了記錄規(guī)則(recording rule),記錄規(guī)則會(huì)生成新指標(biāo),新指標(biāo)要回寫時(shí)序庫(kù),所以要求時(shí)序庫(kù)提供 remote write 地址。如果你不知道啥是 recording rule,可以 google 一下,google 關(guān)鍵字:“Prometheus recording rule”,或者跳過(guò)以后再說(shuō)關(guān)聯(lián)告警引擎集群:這個(gè)說(shuō)起來(lái)有點(diǎn)復(fù)雜了,選中默認(rèn)的 default 即可,如果需要在邊緣機(jī)房單獨(dú)部署 n9e-alert 的時(shí)候,才需要詳細(xì)了解這個(gè)信息
以上配置完成之后,我們?nèi)ゼ磿r(shí)查詢驗(yàn)證一下,看看能否查詢到這個(gè) Prometheus 的數(shù)據(jù):

如上就表示正常的,如果有些數(shù)據(jù)確定時(shí)序庫(kù)里是有的,但是在即時(shí)查詢里查不到,有可能是時(shí)間沒(méi)有校準(zhǔn),請(qǐng)自行檢查時(shí)間。之后,就可以在夜鶯里配置告警規(guī)則了,具體可以參考后續(xù)告警相關(guān)的文檔( https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/usage/alert/?)。
玩法2:使用 categraf 采集數(shù)據(jù),使用夜鶯接收數(shù)據(jù)
社區(qū)里經(jīng)常有小伙伴咨詢,問(wèn)夜鶯可以監(jiān)控xx么?
其實(shí),夜鶯啥都可以監(jiān)控,又啥都監(jiān)控不了。夜鶯是一個(gè)服務(wù)端組件,類似 Grafana,可以接入不同的數(shù)據(jù)源,比如 Prometheus、VictoriaMetrics、Thanos 等等,只要數(shù)據(jù)進(jìn)到這些庫(kù)里了,夜鶯就可以對(duì)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行分析、告警、可視化,以及后續(xù)的事件處理、告警自愈。
當(dāng)然,夜鶯也有端口接收監(jiān)控?cái)?shù)據(jù),可以跟開(kāi)源社區(qū)常見(jiàn)的各種監(jiān)控采集器打通,比如 Telegraf、Categraf、Grafana-agent、Datadog-agent、Prometheus 生態(tài)的各類 Exporter 等等。這些 agent 采集了數(shù)據(jù)推給夜鶯,夜鶯適配了這些 agent 的數(shù)據(jù)傳輸協(xié)議,所以可以接收這些 agent 上報(bào)的監(jiān)控?cái)?shù)據(jù),轉(zhuǎn)存到后端對(duì)接的數(shù)據(jù)源,之后就可以對(duì)這些數(shù)據(jù)做告警分析、可視化。
所以夜鶯本身不做監(jiān)控?cái)?shù)據(jù)采集,啥都不能監(jiān)控,但是夜鶯可以對(duì)接數(shù)據(jù)源,又啥都可以監(jiān)控。
這一小節(jié),我們介紹使用 Categraf 作采集器,然后推數(shù)據(jù)給夜鶯,夜鶯轉(zhuǎn)存到時(shí)序庫(kù),并且后續(xù)對(duì)這些數(shù)據(jù)做可視化、告警等,整個(gè)架構(gòu)如下圖所示:

圖上畫了三個(gè) agent:datadog-agent、telegraf、categraf,都可以和夜鶯對(duì)接,我們推薦的是 categraf,所以本節(jié)主要以 categraf 舉例。夜鶯默認(rèn)監(jiān)聽(tīng)的端口是 17000,通過(guò) api:/prometheus/v1/write
?接收 remote write 協(xié)議的監(jiān)控?cái)?shù)據(jù),categraf 恰好可以以 remote write 協(xié)議上報(bào)監(jiān)控?cái)?shù)據(jù),所以二者可以對(duì)接,telegraf、grafana-agent 其實(shí)也可以以 remote write 協(xié)議上報(bào)監(jiān)控?cái)?shù)據(jù),所以也可以和夜鶯對(duì)接。
夜鶯收到監(jiān)控?cái)?shù)據(jù)之后,夜鶯自身不存儲(chǔ)這些時(shí)序數(shù)據(jù),直接轉(zhuǎn)存到后端時(shí)序庫(kù),在這里,夜鶯的角色只是一個(gè) Pushgateway 的角色。我們推薦的時(shí)序庫(kù)是單機(jī)版本的 VictoriaMetrics,后文就以此演示。當(dāng)然了,夜鶯可以同時(shí)并行轉(zhuǎn)發(fā)數(shù)據(jù)給后端多個(gè)時(shí)序庫(kù),就像上圖畫的,把一份數(shù)據(jù)同時(shí)存儲(chǔ)在 VictoriaMetrics 和 Prometheus,也是可以通過(guò)配置實(shí)現(xiàn)的。
安裝單機(jī)版本的 VictoriaMetrics
如果選用集群版本的 VictoriaMetrics,可以參考?這里(?https://flashcat.cloud/docs/content/flashcat-monitor/nightingale/install/victoriametrics/ )。當(dāng)然,單機(jī)版本對(duì)絕大部分公司,夠用了,配合云盤保障數(shù)據(jù)可靠性,穩(wěn)。所以這里,我就演示單機(jī)版本的部署。
安裝 VictoriaMetrics
VictoriaMetrics 下載地址在?github releases(?https://github.com/VictoriaMetrics/VictoriaMetrics/releases )?上,作為技術(shù)人員,我想,你應(yīng)該可以下載的到。我的環(huán)境是 x86_64 的 linux,所以選擇下載:victoria-metrics-linux-amd64-v1.90.0.tar.gz (撰寫這個(gè)文檔的時(shí)候,最新版本是 v1.90.0)。
VictoriaMetrics 解壓縮之后,里邊就一個(gè)二進(jìn)制:
啟動(dòng)它:
通過(guò)上面的命令可以看出,單機(jī)版本的 VictoriaMetrics 監(jiān)聽(tīng)在 8428 端口。通過(guò)瀏覽器訪問(wèn) VictoriaMetrics 的 8428,理論上可以看到下面的頁(yè)面:

如上,就表示 VictoriaMetrics 安裝成功,當(dāng)然,我僅僅使用 nohup 簡(jiǎn)單啟動(dòng)的,如果生產(chǎn)環(huán)境,建議使用 systemd 托管并設(shè)置開(kāi)機(jī)自啟動(dòng)。
打通夜鶯和 VictoriaMetrics
分兩個(gè)步驟,首先就類似上面配置 Prometheus 數(shù)據(jù)源那種方式,在夜鶯里配置一個(gè) VictoriaMetrics 的數(shù)據(jù)源,比如我的配置:

其次,就需要修改配置文件了。打開(kāi)夜鶯的?etc/config.toml
?配置,找到?HTTP.Pushgw
?部分,默認(rèn)配置如下:
這個(gè)表示:開(kāi)啟夜鶯的監(jiān)控?cái)?shù)據(jù)接收類的 API,默認(rèn)就是開(kāi)啟的,所以,默認(rèn)配置就夠了,不用動(dòng)。那個(gè) HTTP.Pushgw.BasicAuth 表示 BasicAuth(不懂啥是 BasicAuth 請(qǐng)自行 Google 哈) 的配置,如果是內(nèi)網(wǎng)環(huán)境就維持注釋就可以了,不用開(kāi)啟 BasicAuth,如果要把夜鶯接收數(shù)據(jù)的接口暴露到公網(wǎng),為了安全考慮,就需要 HTTPS + BasicAuth 雙重保障了,這里的 HTTP.Pushgw.BasicAuth 相關(guān)的配置在公網(wǎng)環(huán)境下就應(yīng)該打開(kāi),而且,應(yīng)該修改這個(gè) password:ccc26da7b9aba533cbb263a36c07dcc5,不要使用默認(rèn)的 password。
另一個(gè)要修改的配置是 Pushgw.Writers 部分,把 VictoriaMetrics 的 remote write 地址配置上,我的環(huán)境的例子如下:
這里的?[[Pushgw.Writers]]
?是雙中括號(hào)擴(kuò)起來(lái)的,這在 toml 配置中表示數(shù)組,如果你想把數(shù)據(jù)轉(zhuǎn)發(fā)給后端多個(gè)時(shí)序庫(kù),就可以配置多個(gè)?[[Pushgw.Writers]]
,比如:
OK,這樣一來(lái),夜鶯接收到 categraf、telegraf、grafana-agent 等各類 agent 上報(bào)上來(lái)的監(jiān)控?cái)?shù)據(jù),都會(huì)轉(zhuǎn)發(fā)給后端的 VictoriaMetrics,完活。
部署 categraf 上報(bào)監(jiān)控?cái)?shù)據(jù)
Categraf 的安裝請(qǐng)?參考文檔(?https://flashcat.cloud/docs/content/flashcat-monitor/categraf/2-installation/? ),這個(gè)文檔已經(jīng)很詳細(xì)了就不再贅述了。重點(diǎn)關(guān)注配置文件 config.toml,一個(gè)是 heartbeat 的配置:
這個(gè)配置是 Categraf 向夜鶯心跳的地址,夜鶯 v5 的話沒(méi)有這個(gè)機(jī)制,需要把 Categraf heartbeat 的 enable 關(guān)掉。我這里演示的夜鶯 v6,所以 heartbeat 的 enable 要設(shè)置為 true,建議大家用高版本的 Categraf,我這里用的是 v0.3.4。
另一個(gè)配置是 writers 部分:
這表示:把數(shù)據(jù)推給夜鶯的 17000 端口,url path 是?/prometheus/v1/write
?這是夜鶯的 remote write 協(xié)議的數(shù)據(jù)接收地址。
上面我的例子中,夜鶯的地址都是:127.0.0.1:17000
,因?yàn)槲业?Categraf 和 夜鶯 在一臺(tái)機(jī)器上,如果你的 Categraf 和夜鶯在不同的機(jī)器,注意改成合適的 IP。
按照文檔中介紹的方法啟動(dòng) Categraf,我這只是臨時(shí)測(cè)試,所以,直接 nohup 啟動(dòng)得了:
驗(yàn)證結(jié)果
如果一切正常,Categraf 就會(huì)推數(shù)據(jù)給夜鶯,夜鶯轉(zhuǎn)發(fā)給 VictoriaMetrics,而 VictoriaMetrics 又是夜鶯的數(shù)據(jù)源,所以在夜鶯的即時(shí)查詢頁(yè)面,理論上可以查詢到 VictoriaMetrics 的數(shù)據(jù),驗(yàn)證一下:

cpu_usage_active
?這個(gè)指標(biāo)就是 Categraf 采集上報(bào)的,看起來(lái)一切正常。歐耶!
夜鶯高可用方案
這里服務(wù)端總共涉及到4個(gè)組件:時(shí)序庫(kù)、mysql、redis、夜鶯,其中時(shí)序庫(kù)、mysql、redis 的高可用,大家 Google 一下網(wǎng)上大堆資料,這里不展開(kāi)。關(guān)鍵是夜鶯如何做高可用?
其實(shí),很簡(jiǎn)單,多部署幾個(gè) n9e 實(shí)例就可以了。多個(gè) n9e 實(shí)例會(huì)自動(dòng)組成集群,分擔(dān)壓力。n9e 前面可以架設(shè)負(fù)載均衡,四層、七層都可以,某個(gè) n9e 實(shí)例掛掉,負(fù)載均衡會(huì)自動(dòng)剔除,用戶通過(guò)瀏覽器訪問(wèn)夜鶯的時(shí)候,訪問(wèn)負(fù)載均衡的地址,Categraf 的 writer 和 heartbeat 也配置成負(fù)載均衡的地址,就可以了。
如果夜鶯里配置了3千條告警規(guī)則,部署了3個(gè)n9e實(shí)例,這三個(gè)n9e實(shí)例就會(huì)自動(dòng)分配(通過(guò)一致性哈希算法)要處理的告警規(guī)則,確保每個(gè)n9e實(shí)例只處理大概1千條告警規(guī)則,分擔(dān)告警引擎處理壓力。如果某個(gè)n9e實(shí)例掛掉,其他實(shí)例會(huì)自動(dòng)感知(利用mysql做了一些心跳機(jī)制)自動(dòng)接管未被處理的告警規(guī)則,這也是把n9e集群化部署的好處。
高級(jí)玩法
如果,夜鶯部署在北京機(jī)房,某些機(jī)房和北京機(jī)房網(wǎng)絡(luò)鏈路較差,此時(shí),應(yīng)該把時(shí)序庫(kù)、告警引擎下沉部署,具體應(yīng)該如何做呢?看這里( https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/install/advance/ )
轉(zhuǎn)載自:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/install/intro/?