進入主題之前,先了解 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系列博文一共分為三篇:
不同的場景有不同的解決方案,按需(調研)適配spring、springboot、springcloud整合nacos。
此處主要以Linux(centos-stream-9)環境為主。如果非要在Windows平臺使用,也是可以的。本人也在Windows平臺測試過,同樣可以正常執行。只是官方目前並不推薦在Windows平臺使用,可能是還不夠穩定吧。
個人在測試環境下,用過三個版本:
目前,2.2.x 版本UI變化比較大,更加優美。
當你測試時,需要準備測試使用的環境。比如maven打包好的 jar 包,如何上傳部署?
上傳檔案方法:
如下是WinSCP介面,兩種方式:
必備環境
解壓JDK & 設定環境變數(如果僅僅為了測試可以不設定環境變數,採用指定服務路徑形式)
RHEL體系shell環境變數呼叫順序:
設定全域性環境變數:vim /etc/profile,設定當前使用者環境變數:vim .bash_profile 或者 .bashrc,加入設定全域性變數我所列出的內容即可。什麼時候設定全域性使用者,什麼時候設定當前使用者,各有各的應用場景。
比如設定當前使用者環境變數,我只在 test 使用者設定測試,就不給你 demo 使用者進行測試,我們互不干擾。
比如設定全域性使用者環境變數,我既要 test 使用者設定測試,我又要 demo 使用者進行測試,還要在 root 使用者下使用,我全都要。
如下分4步優化操作:
介紹設定全域性環境變數: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。
注意:帶參執行方式,開發或者測試時,可以運用上,便於偵錯。
引數一:--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 平臺還是 Windows 平臺,netstat 命令基本用法還是需要掌握的,對於開發、測試、運維都比較重要。
使用 netstat 監控如下服務:
關於 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 去查詢監聽服務。
引數含義:
上面圖片以及程式碼展示的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
引數含義:
更多引數使用,請檢視幫助命令:
netstat help
RHEL 系列檢視nacos、prometheus、grafana服務程序
ps命令監控服務三種方式:
如下使用引數 -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是一個開源的系統監控和報警系統,它可以從多個來源收集資料,並對資料進行多維度的資料模型分析,視覺化展現,及時報警。它已經加入到CNCF基金會,成為繼k8s之後第二個在CNCF託管的專案。
Prometheus的基本原理是通過HTTP協定週期性抓取被監控元件的狀態,任意元件只要提供對應的HTTP介面就可以接入監控。 不需要任何SDK或者其他的整合過程。 這樣做非常適合做虛擬化環境監控系統,比如VM、Docker、Kubernetes等。 輸出被監控元件資訊的HTTP介面被叫做exporter。
Prometheus支援多種資料來源,比如:
Prometheus支援多種資料模型,例如:
Prometheus有多種視覺化影象介面,例如:
Prometheus還支援高可用,可以對資料做異地備份,聯邦叢集,部署多套prometheus,pushgateway上報資料等功能。總的來說,Prometheus是一個功能強大、易於使用的系統監控和報警系統,可以廣泛應用於各種型別的系統監控和效能分析場景。
必備環境
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 &
引數含義:
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是一款開源的資料視覺化工具,它可以在Web瀏覽器中執行,提供了一個易於使用的介面,使使用者可以輕鬆地建立各種型別的圖表和儀表板。
Grafana擁有快速靈活的使用者端圖表,面板外掛有許多不同方式的視覺化指標和紀錄檔,官方庫中具有豐富的儀表盤外掛,比如熱圖、折線圖、圖表等多種展示方式,讓我們複雜的資料展示的美觀而優雅。它支援許多不同的時間序列資料(資料來源)儲存後端,每個資料來源都有一個特定查詢編輯器,官方支援以下資料來源:Graphite、infloxdb、opensdb、prometheus、elasticsearch、cloudwatch。每個資料來源的查詢語言和功能明顯不同,你可以將來自多個資料來源的資料組合到一個儀表板上,但每個面板都要繫結到屬於特定組織的特定資料來源。它還支援警報功能,允許使用者將規則附加到儀表板面板上,但目前只支援graph面板的報警。
總的來說,Grafana是一款功能強大的資料視覺化工具,可以幫助使用者輕鬆地建立漂亮的圖表和儀表板,同時也支援各種資料來源的組合和報警功能,是資料分析和視覺化的必備工具之一。
必備環境
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 展示效果
設定語言中文 & 時區
值得注意的是,在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
到此為止,是本篇的全部內容。感謝你的閱讀和建議,我們下期再見。
參考資料:
靜下心來,才發現原來不會的還有很多。
一分耕耘,一分收穫。
多總結,你會發現,自己的知識寶庫越來越豐富。