進入主題之前,先了解 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步最佳化操作:
- 解壓jdk :tar -zxvf jdk-17.0.4.1_linux-x64_bin.tar.gz
- 簡化應用名稱:mv jdk-17.0.4.1_linux-x64_bin jdk17
- 新建部署目錄:mkdir -p /usr/java
- 指定部署目錄: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命令監控服務三種方式:
- 使用 ps 命令引數 -aux:ps -aux | grep nacos| grep -v "grep"
- 使用 ps 命令引數 -ef:ps -ef | grep nacos| grep -v "grep"
- 使用 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支援多種資料來源,比如:
- 系統監控資料:例如cpu,記憶體,磁碟IO等。
- 網路資料:例如網路吞吐量,延遲等。
- 程式和執行緒資料:例如goroutines,processes,threads等。
- 儲存資料:例如資料庫的插入,更新,刪除等。
Prometheus支援多種資料模型,例如:
- 指標模型:可以對系統的指標進行建模。
- 時間模型:可以對系統的時間序列資料進行建模。
- 事件模型:可以對系統的事件進行建模。
- 圖模型:可以對系統的狀態或流程進行視覺化展現。
Prometheus有多種視覺化影像介面,例如:
- Grafana:一個開源的、基於Web的視覺化平臺。
- 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 &
引數含義:
- prometheus:普羅米修斯服務指令碼。
- --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
到此為止,是本篇的全部內容。感謝你的閱讀和建議,我們下期再見。
參考資料:
- nacos2.x官方文件:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
- prometheus官方文件:https://prometheus.io/docs/prometheus/2.37/getting_started/
- grafana官方文件:https://grafana.com/docs/grafana/latest/getting-started/
END----
靜下心來,才發現原來不會的還有很多。
一分耕耘,一分收穫。
多總結,你會發現,自己的知識寶庫越來越豐富。