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

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

具體配置樣例如下:

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

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

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

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

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

cpu_usage_active
?這個指標就是 Categraf 采集上報的,看起來一切正常。歐耶!
夜鶯高可用方案
這里服務端總共涉及到4個組件:時序庫、mysql、redis、夜鶯,其中時序庫、mysql、redis 的高可用,大家 Google 一下網(wǎng)上大堆資料,這里不展開。關鍵是夜鶯如何做高可用?
其實,很簡單,多部署幾個 n9e 實例就可以了。多個 n9e 實例會自動組成集群,分擔壓力。n9e 前面可以架設負載均衡,四層、七層都可以,某個 n9e 實例掛掉,負載均衡會自動剔除,用戶通過瀏覽器訪問夜鶯的時候,訪問負載均衡的地址,Categraf 的 writer 和 heartbeat 也配置成負載均衡的地址,就可以了。
如果夜鶯里配置了3千條告警規(guī)則,部署了3個n9e實例,這三個n9e實例就會自動分配(通過一致性哈希算法)要處理的告警規(guī)則,確保每個n9e實例只處理大概1千條告警規(guī)則,分擔告警引擎處理壓力。如果某個n9e實例掛掉,其他實例會自動感知(利用mysql做了一些心跳機制)自動接管未被處理的告警規(guī)則,這也是把n9e集群化部署的好處。
高級玩法
如果,夜鶯部署在北京機房,某些機房和北京機房網(wǎ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/?