前言
可觀測性是大部分中小公司比較頭疼的問題,主要表現以下幾個方面:
- 需要不同的開源軟件來組裝以實現不同的功能,比如使用 skywalking 實現鏈路監控,使用 elk 實現日志收集監控,使用 grafana+prometheus 來實現指標監控。
- 每個開源軟件背后都是獨立的一套體系,它們之前是相互獨立的(Grafana 全家桶已經實現組合)。
- 數據孤島,鏈路、日志、指標各玩各的,沒有建立聯系。目前市面上的解決方案要么是商業化產品,要么是自研。
本文的主角其實也沒有做大一統,目前階段依然是不同的開源組件實現不同的功能,只不過N9e可以在同一個主面板查看它們,但是數據之間的聯系依然沒有實現。
那為什么還要學習研究N9e呢?
因為它正在向這方面發展。
上面提到 Grafana 其實已經在做了,基于 Grafana+Loki+Tempo+Prometheus 組合可以實現監控、指標、鏈路的聯動,N9e 和 Grafana 有什么不同呢?
用秦總的話說:Grafana更擅長監控面板的管理,N9e更擅長告警規則的管理。
N9e 可以將不同的告警規則發送到不同的業務組,不同的群體,避免在一個群里產生大量的告警信息,久而久之就上演了狼來了的故事。
說了這么多,N9e到底長啥樣?
下面是我部署好的一套系統。
可以看到,在該面板上,我們可以實現:
- 告警管理
- 時序指標查詢
- 日志分析
- 鏈路追蹤
- 告警自愈
- 人員管理
- …..
這樣就不用幾個應用來回切了,方面快捷。
系統架構
說一千到一萬,架構不懂都白干。
現在我們來看看 N9e 的架構到底是什么樣的,只有從架構邏輯上理清楚 N9e 是怎么玩的,不論是對部署還是維護都大有裨益。
N9e 主要有中心匯聚式部署方案以及邊緣下沉式混雜部署方案,下面會分別做解釋。
中心匯聚式部署方案
先上圖:
這種方案就是建立一個 N9e 集群,其他 region 的監控數據都往這一個集群發送數據,這要求中心集群和其他 region 要有很好的網絡連接。
對于中心集群來說,主要包括以下組件:
- mysql:用于存放配置信息以及告警事件。
- redis:用于存儲 JWT Token,機器元信息等數據。
- TSDB:時序數據庫,存放監控指標。
- N9e:核心服務,處理 Web 請求、提供告警引擎
- LB:為多個 N9e 提供負載功能。
對于其他 Region,只需要部署 Categraf 即可,它會將本地的監控數據推送到中心集群。
這個架構的特點是簡單,維護成本比較低。前提是要求機房之間的網絡鏈路要比較好,如果網絡不好就要用下面的方案了。
邊緣下沉式混雜部署方案
這種架構是對中心式部署方案的補充,主要是針對網絡不好的情況:
- 把時序數據庫 TSDB、轉發網關、告警引擎都下沉到具體的 Region,由 Region 自己的來處理。不過 Region 依然需要和中心集群建立心跳連接,用戶還是可以通過中心集群的監控面板查看其他 Region 的監控信息。
- 對于已有 Prometheus 的情況,也可以直接將 Prometheus 作為數據源接入即可。
邊緣機房,下沉部署時序庫、告警引擎、轉發網關的時候,要注意,告警引擎需要依賴數據庫,因為要同步告警規則,轉發網關也要依賴數據庫,因為要注冊對象到數據庫里去,需要打通相關網絡。
!!?PS:對于這種方案,本身網絡不好,還要打通網絡,可能還是會受網絡問題影響。
單機部署
為什么這里要選擇單機部署呢?
其實我是想挨著部署各個組件,這樣對于理解整個 N9e 的運行模式有一定的幫助。
!!?Tips:我這里使用的是 ubuntu 22.04.1 系統
安裝 MySQL
!!?Tips:為了快速我安裝的是 mariadb
# 更新鏡像源 $ sudo apt-get update # 更新軟件 $ sudo apt-get upgrade # 安裝Mariabd $ sudo apt-get install mariadb-server-10.6
安裝完成后會自動啟動。然后為數據庫設置一個用戶密碼。
# 連接數據庫 $ sudo mysql # 設置權限和密碼 > GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '1234'; >flush privileges;
安裝 Redis
# 更新鏡像源 $ sudo apt-get update # 更新軟件 $ sudo apt-get upgrade # 安裝Redis $ sudo apt install redis-server
默認會自動啟動。
安裝 TSDB
N9e 的 TSDB 有多種選擇:
- Prometheus
- M3DB
- VictoriaMetrics
- InfluxDB
- Thanos
這里我選擇的是 VictoriaMetrics。
# 下載二進制包 $ wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.90.0/victoria-metrics-linux-amd64-v1.90.0.tar.gz # 解壓 $ tar xf victoria-metrics-linux-amd64-v1.90.0.tar.gz # 啟動 $ nohup ./victoria-metrics-prod &>victoria.log &
觀察8428是否啟動。
安裝 N9e
# 下載最新版本的二進制包 $ wget https://github.com/ccfos/nightingale/releases/download/v6.0.0-ga.3/n9e-v6.0.0-ga.3-linux-amd64.tar.gz # 解壓 $ mkdir n9e $ tar xf n9e-v6.0.0-ga.3-linux-amd64.tar.gz -C n9e/ # 檢驗目錄如下 $ ll total 35332 drwxrwxr-x7 jokerbai jokerbai 40964月 12 14:05 ./ drwxr-xr-x4 jokerbai jokerbai 40964月 12 14:05 ../ drwxrwxr-x3 jokerbai jokerbai 40964月 12 14:05 cli/ drwxrwxr-x 10 jokerbai jokerbai 40964月 12 14:05 docker/ drwxrwxr-x4 jokerbai jokerbai 40964月 12 14:09 etc/ drwxrwxr-x 20 jokerbai jokerbai 40964月 12 14:05 integrations/ -rwxr-xr-x1 jokerbai jokerbai 252805124月6 19:05 n9e* -rwxr-xr-x1 jokerbai jokerbai 108380164月6 19:05 n9e-cli* -rw-r--r--1 jokerbai jokerbai297844月6 19:04 n9e.sql drwxrwxr-x6 jokerbai jokerbai 40964月 12 14:05 pub/
然后導入 N9e 的數據庫。
# 導入數據庫 $ mysql -uroot -p <n9e.sql><p>修改 N9e 的配置文件,在當前目錄 etc/config.toml 文件中。</p> <pre class="brush:sql;toolbar:false;">[[Pushgw.Writers]] # Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write" Url = "http://127.0.0.1:8428/api/v1/write"
然后啟動 N9e 服務。
# 啟動服務 $ nohup ./n9e &>n9e.log & # 檢測17000端口是否啟動 $ ss -ntl | grep 17000 LISTEN 04096 *:17000*:*
在瀏覽器輸入http://127.0.0.1:17000,然后輸入用戶名root,密碼root.2020即可登錄系統。
安裝 Categraf
Categraf 是一個監控采集 Agent,會將采集到的信息推送到 TSDB。
# 下載 $ wget https://download.flashcat.cloud/categraf-v0.2.38-linux-amd64.tar.gz # 解壓 $ tar xf categraf-v0.2.38-linux-amd64.tar.gz # 進入目錄 $ cd categraf-v0.2.38-linux-amd64/
修改配置文件,在 conf/config.toml 中,修改的部分如下:
[[writers]] url = "http://127.0.0.1:17000/prometheus/v1/write" [heartbeat] enable = true
然后啟動 Categraf。
$ nohup ./categraf &>categraf.log &
然后就可以在主界面看到基礎信息。
添加數據源
現在如果去查看時序數據指標,是查詢不到的,因為沒有添加數據源。
在系統配置->數據源處添加數據源,如下:
然后就能看到對應的指標數據了。
也可以通過內置的儀表盤查看主機的監控數據,如下:
總結
這篇文章主要是帶搭建對夜鶯(Nightingale )有一個初步的印象,對它的整體架構做了簡單的介紹,然后帶大家從 0 到 1 安裝了一遍,旨在讓大家對夜鶯的組件有一個清晰的認識。
目前夜鶯已經更新迭代到 V6 版本,該版本有許多新的功能嘗試,比如接入 ELK,接入 Jaeger 等,后續會持續對這個系列進行更新。