Nacos Prometheus Grafana

2023-04-21 21:01:31

進入主題之前,先了解 Nacos prometheus grafana。

nacos 是什麼?

一個更易於構建雲原生應用的動態服務發現、設定管理和服務管理平臺。

nacos 最新穩定版本更新到了 2.2.2 ,官方推薦使用 nacos 2.1.1 。

prometheus 是什麼

From metrics to insight
Power your metrics and alerting with the leading
open-source monitoring solution.

大意是,從監控到洞察力。利用領先的開源監控解決方案,讓你的監控和警報發揮作用。

prometheus 最新穩定版本更新到了 2.4.3,你可以選擇使用長期支援版本 2.3.7(LTS).

grafana 是什麼

Operational dashboards for your data here, there, or anywhere

大意是,在任何位置將你的資料以儀表板(控制面板)形式展現出來。

grafana 最新穩定版本更新到了 9.4.7 。

nacos系列文章第三篇:《運維篇:Nacos prometheus grafana

當你再次看到這張流程圖時,第三篇運維相關知識終於磨出來了:

整體思路,個人nacos系列博文一共分為三篇

  • 基礎篇:《MySQL資料庫與Nacos搭建監控服務》,Nacos與MySQL基本介紹。
  • 開發篇:《開發篇:springboot與微服務元件nacos》,從程式碼開始構建,整合微服務元件。
  • 運維篇:《運維篇:nacos prometheus grafana》,服務監控篇,主要以Linux發行版為主。

不同的場景有不同的解決方案,按需(調研)適配spring、springboot、springcloud整合nacos。

運維篇:springboot與微服務元件nacos

此處主要以Linux(centos-stream-9)環境為主。如果非要在Windows平臺使用,也是可以的。本人也在Windows平臺測試過,同樣可以正常執行。只是官方目前並不推薦在Windows平臺使用,可能是還不夠穩定吧。

個人在測試環境下,用過三個版本:

  • nacos 2.0.3
  • nacos 2.1.1
  • nacos 2.2.0

目前,2.2.x 版本UI變化比較大,更加優美。

Linux伺服器部署springboot專案

當你測試時,需要準備測試使用的環境。比如maven打包好的 jar 包,如何上傳部署?

上傳檔案方法

  • 方式一:已知伺服器使用者名稱和密碼(具有相關許可權),可以使用 scp 命令上傳。
  • 方式二:已知伺服器使用者名稱和密碼(具有相關許可權),可以使用工具 WinSCP、FileZilla等工具上傳檔案。

如下是WinSCP介面,兩種方式:

  • 左右方式,Windows視窗在左邊,Linux伺服器視窗在右邊,支援拖拽和複製貼上。
  • 只顯示遠端目錄形式,支援拖拽。

必備環境

  • Linux(centos-stream-9)
  • JDK17:支撐springboot服務啟動
  • Nacos 2.1.1 :監控發現springboot服務

解壓JDK & 設定環境變數(如果僅僅為了測試可以不設定環境變數,採用指定服務路徑形式)

RHEL體系shell環境變數呼叫順序:

設定全域性環境變數:vim /etc/profile,設定當前使用者環境變數:vim .bash_profile 或者 .bashrc,加入設定全域性變數我所列出的內容即可。什麼時候設定全域性使用者,什麼時候設定當前使用者,各有各的應用場景。

比如設定當前使用者環境變數,我只在 test 使用者設定測試,就不給你 demo 使用者進行測試,我們互不干擾。

比如設定全域性使用者環境變數,我既要 test 使用者設定測試,我又要 demo 使用者進行測試,還要在 root 使用者下使用,我全都要。

如下分4步優化操作

  1. 解壓jdk :tar -zxvf jdk-17.0.4.1_linux-x64_bin.tar.gz
  2. 簡化應用名稱:mv jdk-17.0.4.1_linux-x64_bin jdk17
  3. 新建部署目錄:mkdir -p /usr/java
  4. 指定部署目錄:mv jdk17 /usr/java/

介紹設定全域性環境變數:vim /etc/profile

JAVA_HOME=/usr/java/jdk17
CLASS_PATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASS_PATH PATH

執行 source 命令立即生效

source /etc/profile

關於環境變數更多設定可參考個人公眾號關於JDK17的介紹。

驗證Java版本

設定了環境變數:

java -version

未設定環境變數:

/usr/java/jdk-17.0.4.1/bin/java -version

解壓Nacos Server 並剪下到 /usr/local/ 目錄

tar -zxvf nacos-server-2.1.1.tar.gz
mv nacos /usr/local/

啟動nacos服務(非叢集模式)

cd /usr/local/nacos/bin/
sh startup.sh -m standalone

新建測試目錄

mkdir -p /opt/test  /opt/sh

執行命令脫離終端執行,並輸出紀錄檔到指定檔案 /opt/test/springboot.log

[root@Centos9-Stream ~]# nohup /usr/java/jdk-17.0.4.1/bin/java -jar /opt/test/springboot-test-0.0.1-SNAPSHOT.jar  >> /opt/test/springboot.log 2>&1 &

編輯指令碼

vim /opt/sh/start_springboot_demo.sh

寫入到指令碼

#!/bin/bash
nohup /usr/java/jdk-17.0.4.1/bin/java -jar /opt/test/springboot-test-0.0.1-SNAPSHOT.jar  >> /opt/test/springboot.log 2>&1 &

curl命令測試介面

PS D:\work> curl http://192.168.245.132:8081/demo/getStu
{"code":0,"msg":"成功","data":{"id":"d5e52f71-67f0-499a-acf9-574ec14ffbe6","name":"夢夢","sex":"女","age":16}}

使用 cat 命令檢視紀錄檔

cat  /opt/test/springboot.log 

使用 vim 檢視

vim  /opt/test/springboot.log

使用 tail 命令檢視

tail -f /opt/test/springboot.log
tail -n 5 /opt/test/springboot.log

tail 引數:-n代表檢視多少條紀錄檔資訊,我只想檢視最近的5條資料,使用 tail -n 5。

Springboot啟動服務指定引數

注意:帶參執行方式,開發或者測試時,可以運用上,便於偵錯。

引數一:--server.port=9999 代表指定伺服器埠執行,不新增則使用預設設定伺服器埠
引數二:-Dspring.profiles.active=prod 指定環境(eg:dev:開發環境、prod:生產環境、test:測試環境)

Windows平臺

指定服務API埠:--server.port=9999

java -jar springboot-test-nacos.jar --server.port=9999

指定服務執行(生產)環境:-Dspring.profiles.active=prod

java -jar "-Dspring.profiles.active=prod" demo-0.0.1-SNAPSHOT.jar

Linux(RHEL系列)平臺

採用預設形式指定執行(生產)環境,輸出紀錄檔到 test.log 檔案:

nouhup java -jar -Dspring.profiles.active=prod demo-0.0.1-SNAPSHOT.jar > test.log 2>&1 & 

採用預設形式執行服務並指定伺服器埠,輸出紀錄檔到 test.log 檔案:

nouhup java -jar springboot-test-nacos.jar --server.port=9999 > test.log 2>&1 & 

採用指定 jdk 路徑,指定執行(生產)環境,輸出紀錄檔到 test.log 檔案:

nohup /usr/java/jdk-17.0.4.1/bin/java -jar /opt/test/springboot-test-0.0.1-SNAPSHOT.jar  > /opt/test/springboot.log 2>&1 &

Linux & Win 監控執行中的服務

無論是 Linux 平臺還是 Windows 平臺,netstat 命令基本用法還是需要掌握的,對於開發、測試、運維都比較重要。

使用 netstat 監控如下服務:

  • nacos:監控springboot服務
  • prometheus:採集資料 ,個人使用的版本為 2.37.1
  • grafana:圖形化(儀表板)展示資料 ,個人使用版本為 9.3.0,目前9.3.x版本已經更新到 9.3.11

關於 nacos 服務部署以及設定MySQL資料來源,此篇不再贅述。可以參考前兩篇博文,有介紹,可在公眾號內搜尋到。

Linux (REHL系列) 平臺查詢執行中的nacos服務

netstat -tlunp | grep 8848;netstat -tlunp | grep 9848;netstat -tlunp | grep 9849

Windows 平臺查詢執行中的nacos服務

通過Windows terminal開啟powershell或者CMD,使用netstat命令配合findstr查詢nacos使用到的埠:

netstat -ano | findstr 8848;netstat -ano | findstr 9848;netstat -ano | findstr 9849

查閱官方檔案,發現Nacos2.0版本相比1.X新增了gRPC的通訊方式,因此需要增加2個埠。新增埠是在設定的主埠(server.port)基礎上,進行一定偏移量自動生成。偏移量分別為:+1000,+1001,所以監控到埠多出了9848和9849。

友情提示:通常著重關注 ESTABLISHED ,表示已經確立聯絡。

通過查詢到的PID,以圖片上PID值8220為範例,使用命令tasklist去查詢使用服務以及佔用記憶體

tasklist | findstr 8220
java.exe                      8220 Console                    1    449,472 K

Linux (RHEL系列)檢視執行中的springboot服務,已經引入微服務元件 nacos

[root@Centos9-Stream test]# netstat -tlunp | grep 8081; netstat -tlunp | grep 8082;netstat -tlunp | grep 8083;
tcp6       0      0 :::8081                 :::*                    LISTEN      2690/java
tcp6       0      0 :::8082                 :::*                    LISTEN      3104/java
tcp6       0      0 :::8083                 :::*                    LISTEN      3213/java

在Linux平臺我習慣使用引數 -tlunp 去查詢監聽服務。

引數含義

  • -t:--tcp,顯示監聽tcp協定。
  • -l:--listening ,用於展示監聽服務的sockets。
  • -u:--udp,顯示監聽udp協定。
  • -n:--numeric,不解析服務(主機、埠、使用者)名稱。
  • -p:--programs,顯示使用了sockets 應用程式的PID號。

上面圖片以及程式碼展示的tcp6(tcp協定),8081 表示ip繫結埠號,LISTEN 代表正在監聽,2690/java 表示監聽到java程序pid號是2690。通常我們比較關心的是埠(port),監聽狀態,服務名程序號。

更多引數使用,請檢視幫助命令::

netstat -h

Windows 平臺檢視執行中的springboot服務

netstat -ano | findstr 8081;netstat -ano | findstr 8082;netstat -ano | findstr 8083

引數含義

  • -a: 顯示所有連線和偵聽埠。
  • -n:以數位形式顯示地址和埠號。
  • -o:顯示擁有的與每個連線關聯的程序 ID。

更多引數使用,請檢視幫助命令:

netstat help

RHEL 系列檢視nacos、prometheus、grafana服務程序

ps命令監控服務三種方式:

  1. 使用 ps 命令引數 -aux:ps -aux | grep nacos| grep -v "grep"
  2. 使用 ps 命令引數 -ef:ps -ef | grep nacos| grep -v "grep"
  3. 使用 ps 命令引數 -le:ps -le | grep nacos| grep -v "grep"

如下使用引數 -aux 進行監控 nacos、prometheus、grafana 服務

[root@Centos9-Stream prometheus-2.37.1]# ps -aux | grep nacos;ps -aux | grep prometheus;ps -aux | grep grafana

可以看到,監控服務命令將 nacos、prometheus、grafana 以紅色字型標記出來了。將當前使用使用者root、nacos 程序(pid)號2334、服務所在路徑、組態檔指定路徑等等展現在螢幕上。

這裡教大家一個小技巧,如果你不想看到 grep --color=auto 這一行,可以通過 grep 取反命令過濾。

範例 grep 取反過濾:

ps -aux | grep nacos| grep -v "grep"

Windows 平臺檢視nacos、prometheus、grafana服務程序

tasklist | findstr nacos;tasklist | findstr prometheus;tasklist | findstr grafana;

RHEL 系列檢視nacos、prometheus、grafana伺服器埠

[root@Centos9-Stream prometheus-2.37.1]# netstat -tlunp | grep 3000;netstat -tlunp | grep 8848;netstat -tlunp | grep 9090
tcp6       0      0 :::3000                 :::*                    LISTEN      2194/grafana-server
tcp6       0      0 :::8848                 :::*                    LISTEN      2234/java
tcp6       0      0 :::9090                 :::*                    LISTEN      2509/prometheus

Windows 平臺檢視nacos、prometheus、grafana伺服器埠

netstat -ano | findstr 3000;netstat -ano | findstr 8848;netstat -ano | findstr 9090

Prometheus採集資料

簡單科普

Prometheus是一個開源的系統監控和報警系統,它可以從多個來源收集資料,並對資料進行多維度的資料模型分析,視覺化展現,及時報警。它已經加入到CNCF基金會,成為繼k8s之後第二個在CNCF託管的專案。

Prometheus的基本原理是通過HTTP協定週期性抓取被監控元件的狀態,任意元件只要提供對應的HTTP介面就可以接入監控。 不需要任何SDK或者其他的整合過程。 這樣做非常適合做虛擬化環境監控系統,比如VM、Docker、Kubernetes等。 輸出被監控元件資訊的HTTP介面被叫做exporter。

Prometheus支援多種資料來源,比如:

  1. 系統監控資料:例如cpu,記憶體,磁碟IO等。
  2. 網路資料:例如網路吞吐量,延遲等。
  3. 程序和執行緒資料:例如goroutines,processes,threads等。
  4. 儲存資料:例如資料庫的插入,更新,刪除等。

Prometheus支援多種資料模型,例如:

  1. 指標模型:可以對系統的指標進行建模。
  2. 時間模型:可以對系統的時間序列資料進行建模。
  3. 事件模型:可以對系統的事件進行建模。
  4. 圖模型:可以對系統的狀態或流程進行視覺化展現。

Prometheus有多種視覺化影象介面,例如:

  1. Grafana:一個開源的、基於Web的視覺化平臺。
  2. VTiger:一個開源的、基於Web的儀表盤系統。

Prometheus還支援高可用,可以對資料做異地備份,聯邦叢集,部署多套prometheus,pushgateway上報資料等功能。總的來說,Prometheus是一個功能強大、易於使用的系統監控和報警系統,可以廣泛應用於各種型別的系統監控和效能分析場景。

必備環境

  • prometheus:採集資料
  • nacos:監控發現服務
  • JDK:支撐服務啟動

prometheus 官方檔案地址:https://prometheus.io/docs/prometheus/2.37/getting_started/

prometheus 下載地址:https://prometheus.io/download/

1、安裝prometheus

請前往上面列出的下載地址準備好安裝包,簡化安裝步驟如下。

tar -zxvf prometheus-2.37.1.linux-amd64.tar.gz
mv prometheus-2.37.1.linux-amd64 prometheus-2.37.1
mv prometheus-2.37.1 /usr/local/

2、啟動prometheus服務

指定組態檔路徑,執行prometheus指令碼。範例:

/usr/local/prometheus-2.37.1/prometheus --config=/usr/local/prometheus-2.37.1/prometheus.yml 

如果想脫離終端在後臺執行,需要在行首加上 nohup 命令,在行尾加上& 符號。範例:

nohup /usr/local/prometheus-2.37.1/prometheus --config=/usr/local/prometheus-2.37.1/prometheus.yml &

引數含義

  1. prometheus:普羅米修斯服務指令碼。
  2. --config:用於指定普羅米修斯指令碼 yml 格式組態檔。

3、修改組態檔,監控nacos暴露的metrics資料
說明:metrics_path和static_configs不要設定多個,否則檢測會出現語法錯誤,提示已存在

# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
#監控nacos服務
    metrics_path: '/nacos/actuator/prometheus'
    static_configs:
#設定監控nacos遠端服務地址
      - targets: ['192.168.245.132:8848']

4、檢測組態檔

[root@Centos9-Stream nacos]# /usr/local/prometheus-2.37.1/promtool check config /usr/local/prometheus-2.37.1/prometheus.yml
Checking /usr/local/prometheus-2.37.1/prometheus.yml
 SUCCESS: /usr/local/prometheus-2.37.1/prometheus.yml is valid prometheus config file syntax

通過 kill 命令暴力停掉程序,再次啟動 prometheus 服務:

netstat -tlunp | grep 9090
kill -9 程序號
nohup /usr/local/prometheus-2.37.1/prometheus --config=/usr/local/prometheus-2.37.1/prometheus.yml &

關於 netstat 命令上面有簡單介紹過,不再贅述。

5、存取prometheus服務

prometheus 執行預設埠是9090:http://192.168.245.132:9090/

tips:需要將埠9090開放,或者通過防火牆管理工具firewalld臨時關閉防火牆服務進行測試。

Linux(RHEL系列):

# 開放9090埠
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload

# 臨時關閉
systemctl stop firewalld.service

6、檢視prometheus監控status
依次選擇status---> Targets---> show more

7、驗證資料

搜尋nacos_monitor,得到如下結果(擷取部分):

nacos_monitor{instance="192.168.245.132:8848", job="prometheus", module="config", name="configCount"}
1
nacos_monitor{instance="192.168.245.132:8848", job="prometheus", module="config", name="dumpTask"}
0
nacos_monitor{instance="192.168.245.132:8848", job="prometheus", module="config", name="getConfig"}
9
...
nacos_monitor{instance="192.168.245.132:8848", job="prometheus", module="naming", name="ipCount"}
2

Grafana圖形化展示資料

簡單科普

Grafana是一款開源的資料視覺化工具,它可以在Web瀏覽器中執行,提供了一個易於使用的介面,使使用者可以輕鬆地建立各種型別的圖表和儀表板。

Grafana擁有快速靈活的使用者端圖表,面板外掛有許多不同方式的視覺化指標和紀錄檔,官方庫中具有豐富的儀表盤外掛,比如熱圖、折線圖、圖表等多種展示方式,讓我們複雜的資料展示的美觀而優雅。它支援許多不同的時間序列資料(資料來源)儲存後端,每個資料來源都有一個特定查詢編輯器,官方支援以下資料來源:Graphite、infloxdb、opensdb、prometheus、elasticsearch、cloudwatch。每個資料來源的查詢語言和功能明顯不同,你可以將來自多個資料來源的資料組合到一個儀表板上,但每個面板都要繫結到屬於特定組織的特定資料來源。它還支援警報功能,允許使用者將規則附加到儀表板面板上,但目前只支援graph面板的報警。

總的來說,Grafana是一款功能強大的資料視覺化工具,可以幫助使用者輕鬆地建立漂亮的圖表和儀表板,同時也支援各種資料來源的組合和報警功能,是資料分析和視覺化的必備工具之一。

必備環境

  • grafana:圖形化(儀表板)展示資料。
  • prometheus:採集資料
  • nacos:監控發現服務
  • JDK:支撐服務啟動

tips:初次登入,使用者名稱:admin,密碼:admin。

grafana下載地址:https://grafana.com/grafana/download

1、搭建grafana,圖形化展示metrics資料

RHEL 系列快速安裝grafana:

sudo yum install grafana

在RHEL7以及以上使用yum或者dnf命令安裝完後,可以使用如下命令啟動或者檢視服務狀態。

啟動grafana服務:

systemctl start grafana-server.service

檢視grafana服務:

systemctl status grafana-server.service

詳細grafana安裝指南,請參考官方檔案
https://grafana.com/docs/grafana/v9.3/setup-grafana/installation/

Linux平臺安裝grafana服務
Standalone Linux Binaries(64 Bit)

oss版本獲取地址,基於AGPLv3 開源協定。

wget https://dl.grafana.com/oss/release/grafana-9.3.0.linux-amd64.tar.gz
tar -zxvf grafana-9.3.0.linux-amd64.tar.gz

企業版enterprise獲取地址

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.0.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-9.3.0.linux-amd64.tar.gz

Red Hat, CentOS, RHEL, and Fedora(64 Bit)

可以根據自己的需求選擇 oss 版本或者 enterprise 企業版本。企業版本包含oss版本所有功能,同時也是免費使用,擁有更多外掛功能。

wget https://dl.grafana.com/oss/release/grafana-9.3.0-1.x86_64.rpm
sudo yum install grafana-9.3.0-1.x86_64.rpm

Ubuntu and Debian(64 Bit)

sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_9.3.0_amd64.deb
sudo dpkg -i grafana_9.3.0_amd64.deb

grafana組態檔

如果使用yum或者dnf命令安裝,安裝後的grafana組態檔路徑。主要組態檔在/etc/grafana/目錄下,檔案收集以及報警資訊相關在/var/lib/grafana/目錄下。

[root@Centos9-Stream local]# ls /etc/grafana/
grafana.ini  ldap.toml  provisioning
[root@Centos9-Stream local]# ls /var/lib/grafana/
alerting  csv  file-collections  grafana.db  png
[root@Centos9-Stream local]# du -sk -h /var/run/grafana/grafana-server.pid
4.0K    /var/run/grafana/grafana-server.pid

使用du命令檢視grafana-server服務所佔儲存空間

[root@Centos9-Stream local]# du -sk -h /usr/sbin/grafana-*
4.0K    /usr/sbin/grafana-cli
102M    /usr/sbin/grafana-server

以上這些資訊,在RHEL7以上環境中,你可以使用systemctl命令檢視到所在路徑

[root@Centos9-Stream local]# systemctl status grafana-server.service
● grafana-server.service - Grafana instance
	...
     CGroup: /system.slice/grafana-server.service
             └─2821 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini 
             --pidfile=/var/run/grafana/grafana-server.pid

2、設定資料來源prometheus
獲取nacos json模板:https://github.com/nacos-group/nacos-template/blob/master/nacos-grafana.json

加入http地址:http://192.168.245.132:9090/

注意:將ip地址替換成你自己的。

如果遇到問題(注意排查匯入json檔案設定以及grafana資料來源名稱設定)

Failed to upgrade legacy queries Datasource prometheus was not found

檢查設定json檔案資料來源名稱:

"datasource": "prometheus",
"format": "none",
"gauge": {
   "maxValue": 100,
   "minValue": 0,
   "show": false,
   "thresholdLabels": false,
   "thresholdMarkers": true

可以看到預設設定的datasource是:prometheus

解決方法:修改預設資料來源名稱Prometheus為prometheus,注意匹配名稱。

設定prometheus資料來源

grafana執行預設埠是3000,存取:http://192.168.245.132:3000/

同樣需要開放相應埠,參考上面介紹prometheus使用的方法。

引入nacos json template

注意:熟悉的情況下,這個設定模板,可以根據自己的需求去修改,不一定要照搬,可以靈活運用。

引入nacos json組態檔,看到如下三項代表設定成功

  • nacos monitor:展示nacos服務監控資訊,包含上線服務、IP個數、cpu、記憶體、執行緒負載等等。
  • nacos detail:展示nacos服務詳細資訊。
  • nacos alert:展示nacos服務報警相關資訊。

nacos monitor 展示效果

設定語言中文 & 時區
值得注意的是,在9.3.x之前還沒實裝設定語言這一項功能。

如果不出意外,設定完成,可以正常存取設定的nacos監控服務。

3、存取grafana服務

存取地址,預設埠3000,可以根據你的工作場景進行調整:http://192.168.245.132:3000/,如果在本地搭建,將ip替換為 127.0.0.1 或者 localhost。

如果在伺服器搭建,將ip替換為你的解析域名或者遠端ip地址。

如果想深入學習nacos,可以參考官方使用者指南、運維指南和《Nacos架構&原理》

《Nacos架構&原理》: https://developer.aliyun.com/ebook/36?spm=a2c6h.20345107.ebook-index.18.152c2984fsi5ST

到此為止,是本篇的全部內容。感謝你的閱讀和建議,我們下期再見。

參考資料

END----

靜下心來,才發現原來不會的還有很多。

一分耕耘,一分收穫。

多總結,你會發現,自己的知識寶庫越來越豐富。