系統集成Prometheus+Grafana

根據產品需求在自己的系統中添加一個系統監控的頁面,其中有主機信息的顯示,也有一些業務信息的顯示。調研后的方案是 主機信息通過Prometheus采集和存儲,業務信息通過自己系統的調度任務統計后存儲在Mysql中,使用Grafana對接Prometheus和Mysql數據源來制作圖表,然后嵌入到自己系統的頁面中進行展示。

重點解決問題:

1)Prometheus和NodeExporter的安全認證問題

2)Grafana的安全認證問題

1. 部署Prometheus

Prometheus分為服務端和客戶端(xxxExporter),Prometheus采用服務端主動去客戶端拉取數據的方式。本次需求為采集linux服務器主機信息,因此客戶端使用NodeExporter。

1.1 部署NodeExporter

根據我們服務器的情況部署NodeExporter采用Docker和二進制包兩種方式。

1.1.1 Docker部署

考慮到nodeExporter訪問的安全,使用基礎的安全認證方式。

1.1.1.1 配置安全認證

創建文件/opt/node_exporter/web-config.yml,內容:

# Usernames and passwords required to connect.
# Passwords are hashed with bcrypt: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md#about-bcrypt.
basic_auth_users:{Username}: {Hashed password}

說明:

{Username}: {Hashed password}可以有多組,其中

{Username}是用戶名

{Hashed password}經過hash加密后的密碼,linux下可以使用以下命令對密碼加密:

htpasswd -nBC 10 "" | tr -d ':\n'

示例:

basic_auth_users:exporter-user: $2y$10$7dZ80a5HdLu2cpxjQehXdewVOPqygLlwMbbZUtGpKVxFDz7d8je3o
1.1.1.2 啟動容器
docker run -d \--name node-exporter \--restart=always \--net="host" \--pid="host" \-v "/:/host:ro,rslave" \-v "/opt/node_exporter/web-config.yml:/web-config.yml" \quay.io/prometheus/node-exporter:latest \--path.rootfs=/host --web.config.file=/web-config.yml --web.listen-address=:9100

說明:

--web.listen-address參數可以指定Exporter的端口號,默認為9100。

容器啟動后可以通過docker ps或者訪問http://主機IP:端口號 檢查服務是否啟動成功。

1.1.2?二進制包部署

1.1.2.1 下載文件

下載地址:Download | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.icon-default.png?t=N7T8https://prometheus.io/download/#node_exporter

將下載后文件解壓到/opt目錄下,并改名為node_exporter

tar -xzvf node_exporter-1.7.0.linux-amd64.tar.gz -C /opt
cd /opt
mv node_exporter-1.7.0.linux-amd64 node_exporter
1.1.2.2 配置安全認證

同1.1.1.1

1.1.2.3 啟動服務
nohup /opt/node_exporter/node_exporter --web.listen-address=:9100 --web.config.file=/opt/node_exporter/web-config.yml >/dev/null 2>&1 &

說明:

--web.listen-address參數可以指定Exporter的端口號,默認為9100。

?訪問http://主機IP:端口號 檢查服務是否啟動成功。

1.1.2.4?配置開機自啟

編輯/etc/rc.local文件,新起一行,添加啟動服務的命令,同1.1.2.3

1.2 部署Prometheus Server

本文使用docker-compose方式部署,其他方式類似。

1.2.1 配置安全認證

創建配置目錄:mkdir -p?/opt/prometheus/config

創建文件/opt/prometheus/config/web-config.yml

文件格式同1.1.1.1,但用戶和密碼用途是不一樣的,這個是訪問Prometheus數據源是需要的。

示例:

basic_auth_users:prometheus-user: $2y$10$A.vlBjkqhhI6BTrW2ubXK.rsoSW/gcHhCXNJJlmuRX.LC0k7dj48s

1.2.2 配置服務參數

創建文件/opt/prometheus/config/prometheus.yml

參考文檔:Configuration | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.icon-default.png?t=N7T8https://prometheus.io/docs/prometheus/latest/configuration/configuration/

示例:

global:scrape_interval:     15s # By default, scrape targets every 15 seconds.# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).external_labels:monitor: 'codelab'# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:- job_name: 'node-monitor'basic_auth:username: 'exporter-user'password: 'password'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['x.x.x.1:9100','x.x.x.2:9100']labels:group: 'test'

說明:

password為nodeExporter端配置的明文密碼。

targets 字段為監控的服務器列表,其內容為安裝了node exporter的主機ip及端口號,多個主機逗號分隔。

1.2.3 啟動服務

創建數據目錄:mkdir -p?/opt/prometheus/data

編寫docker-compose.yml文件,內容:

version: '3'
services:prometheus:image: prom/prometheuscontainer_name: prometheusrestart: alwaysuser: '0'ports:- 9090:9090volumes:- /opt/prometheus/config:/etc/prometheus- /opt/prometheus/data:/prometheuscommand: --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles --web.config.file=/etc/prometheus/web-config.yml

說明

如果端口沖突可以通過ports端口映射修改端口

啟動容器

docker-compose up -d

2. 部署Grafana

本文使用docker-compose方式部署,其他方式類似。

2.1 啟動服務

創建數據目錄mkdir -p /opt/grafana/data

編寫docker-compose.yml文件,如果與Prometheus在同一臺機器部署可以共用一個docker-compose文件,內容:

version: '3'
services:grafana:image: grafana/grafana:8.5.27container_name: grafanarestart: alwaysuser: '0'ports:- 3000:3000volumes:- /data/grafana/data:/var/lib/grafanaenvironment:- GF_SECURITY_ALLOW_EMBEDDING=true- GF_SECURITY_ADMIN_USER=admin- GF_SECURITY_ADMIN_PASSWORD=123@test- GF_AUTH_PROXY_ENABLED=true- GF_SERVER_ROOT_URL=http://localhost:8080/grafana/- GF_USERS_DEFAULT_THEME=light
#      - GF_SERVER_ROUTER_LOGGING=true

說明:

可以通過環境變量覆蓋grafana.ini中的配置,詳細配置參考:Configuration | Grafana documentationConfiguration documentationicon-default.png?t=N7T8https://grafana.com/docs/grafana/v8.3/administration/configuration/

GF_SECURITY_ALLOW_EMBEDDING 開啟允許嵌入頁面

GF_SECURITY_ADMIN_USER 設置默認管理員賬號

GF_SECURITY_ADMIN_PASSWORD 設置默認管理員密碼

GF_AUTH_PROXY_ENABLED 開啟代理認證,即在反向代理中進行用戶認證

GF_SERVER_ROOT_URL 通過反向代理的訪問地址

GF_USERS_DEFAULT_THEME 用戶默認主題配置為亮色

GF_SERVER_ROUTER_LOGGING 是否開啟路由日志,調試時使用,默認不開啟

2.2 初始配置

使用默認管理員賬號和密碼登錄Grafana http://主機IP:3000,

根據需要添加Prometheus數據源和Mysql數據源,注意Prometheus數據源要啟用basic auth,

導入或者新建Dashboard,編輯好圖表。

3. 系統集成Grafana

3.1 配置Grafana的反向代理和代理認證

本系統使用了SpringCloudGateway做微服務網關,在Gateway中添加路由配置,示例:

{"id": "grafana","order": 11,"predicates": [{"name": "Path","args": {"_genkey_0": "/grafana/**"}}],"filters": [{"name": "StripPrefix","args": {"_genkey_0": 1}},{"name": "RemoveRequestHeader","args": {"_genkey_0": "Origin"}},{"name": "AddRequestHeader","args": {"_genkey_0": "X-WEBAUTH-USER","_genkey_1": "system-user"}}],"uri": "http://x.x.x.x:3000"
}

說明:

predicates 通過路徑判斷是否需要代理的請求。

filters?StripPrefix?請求轉發給后端時去掉第一段路徑,即請求轉發給后端時路徑沒有/grafana,該參數可與Grafana的配置項server.serve_from_sub_path配合使用。

filters?RemoveRequestHeader 刪除請求頭中的Origin屬性,解決因源請求中Origin值和后端服務器不匹配問題,也可將其改寫成后端服務器地址。

filters?RemoveRequestHeader 請求頭中添加一個屬性X-WEBAUTH-USER,該名稱要與Grafana中的配置匹配,其默認為X-WEBAUTH-USER,其值system-user為通過該代理訪問Grafana所使用的用戶,默認不存在Grafana會自動注冊,詳細可參考Grafana文檔。

uri 為反向代理的后端服務地址,即Grafana服務的地址。

3.2 用戶認證

原系統(a.com)登錄后會將token寫在cookie中,并且在Gateway網關中做了用戶登錄認證,現在Grafana使用反向代理,所有通過訪問http://a.com/grafana/**的請求都會帶上a.com域名所屬的cookie,可以直接利用原來網關的認證邏輯進行用戶認證。

如果原系統沒有在網關中做用戶登錄認證,可以在后端服務中寫一個代理程序,并做用戶認證,可以參考:https://www.cnblogs.com/xiaoqi/p/grafana.html

3.3 前端嵌入Grafana組件

如果想將Dashboard中的某個圖表嵌入到自己系統的頁面中,可以在某Panel上的Share->Embed中獲取到圖表的url,注意使用代理的地址。

其他問題:

1. 在Grafana中自己創建或編輯后保存的Dashboard,保存為json文件,在其他環境中再導入使用時,會報數據源無法找到的問題。

解決辦法,編輯導出的json文件,在其文件的頭部加上數據源的變量定義,具體可參考:Grafana導入 json 文件的 dashboard 錯誤 Templating Failed to upgrade legacy queries Datasource xxx not found_failed to upgrade legacy queries datasource promet-CSDN博客文章瀏覽閱讀6.3k次,點贊5次,收藏11次。從一套環境導出 dashboard 為 json 文件,在另一套環境中導入,如果出現了標題中報錯, 怎么解決這個問題?文章給出了三種解決方案,按各自實際需要選擇_failed to upgrade legacy queries datasource prometheus was not foundhttps://blog.csdn.net/shaochenshuo/article/details/128735528

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711819.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java必須掌握的繼承的特點和繼承體系的設計(含面試大廠題和源碼)

Java繼承是面向對象編程的一個基本特性,它允許一個類繼承另一個類的屬性和方法。設計良好的繼承體系是高質量軟件開發的關鍵。在大廠面試中,面試官可能會詢問關于Java繼承特點及如何設計一個合理的繼承體系的問題,以評估你的面向對象設計能力…

ICLR 2024|ReLU激活函數的反擊,稀疏性仍然是提升LLM效率的利器

論文題目: ReLU Strikes Back: Exploiting Activation Sparsity in Large Language Models 論文鏈接: https://arxiv.org/abs/2310.04564 參數規模超過十億(1B)的大型語言模型(LLM)已經徹底改變了現階段人工…

gcc和g++的區別,如何看自己的編譯器支持的C++的版本

gcc和g的區別 用一句話來說,就是gcc將程序視為c語言的,g將程序視為C的 gcc和g的區別主要在于它們處理不同后綴的文件類型、編譯和連接階段的不同調用方式,以及它們對C特性的支持方式。以下是詳細介紹:123 文件類型。gcc將后綴為…

通過多線程并發方式實現服務器

與多進程實現對比來看。 示例來源于網絡視頻 #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> #include <ctype.h> #include <unistd.h> #include <fcntl.h>#include "wrap.h"#de…

【C++ 測試】

C 測試 一、二維數組二、私有成員三、function用法四、類里面創建另一個類五、lambda六、Map動態申請 一、二維數組 #include <iostream> #include<windows.h> #include <map> // SetConsoleOutputCP ( CP_UTF8 ) ; using namespace std;void test1() {map…

求最短路徑之迪杰斯特拉算法

對fill用法的介紹 1.用鄰接矩陣實現 const int maxn100; const int INF100000000;//無窮大&#xff0c;用來初始化邊 int G[maxn][maxn];//用鄰接矩陣存儲圖的信息 int isin[maxn]{false};//記錄是否已被訪問 int minDis[maxn];//記錄到頂點的最小距離void Dijkstra(int s,in…

網格圖的搜索

來自靈神網格圖題單。 1. 網格圖 1.1. LC 200 島嶼數量 這題我一開始想繁了&#xff0c;想維護并查集&#xff0c;然后看等價類個數。其實完全沒有必要。因為連通分量深搜到頭就可以直接給答案計數1。利用vis數組維護訪問過的點&#xff0c;然后碰到新連通分量重新深搜即可。…

Pinia使用

官方地址&#xff1a;Pinia | The intuitive store for Vue.js (vuejs.org)https://pinia.vuejs.org/ 1.安裝 npm install pinia npm install pinia-plugin-persistedstate Pinia是一個基于Vue 3的狀態管理庫&#xff0c;它使得管理Vue的全局狀態變得更加容易和直觀。 而…

自定義el-dialog的樣式

實現效果&#xff1a; 樣式代碼如下&#xff1a;&#xff08;可以寫在common.scss文件夾中&#xff09; .el-dialog__header {padding: 16px 20px;border-bottom: 1px solid #DCDFE6;display: flex;align-items: center;.el-dialog__title {font-size: 16px;position: relativ…

utniy urp shinyssrr插件使用

文章目錄 前言步驟1首先在URP的配置文件里添加SSR后處理2 修改RenderingPath為延遲渲染3 啟用深度紋理4 為物體添加腳本 插件下載 前言 用來實現屏幕空間反射效果 unity 版本為2021.3.8LTS&#xff0c;低版本的untiy URP的參數設置位置z可能會不同 步驟 1首先在URP的配置文件…

記錄阿里云換源失敗的慘痛教訓

聲明 首先我不是一個云服務器小白&#xff0c;但是之前一直在使用騰訊云和火山引擎的云服務器。從未見過阿里云這樣如此**的運營商。 問題 服務器到手&#xff0c;第一步在我進行sudo apt update的時候&#xff0c;也就是更新軟件包的時候&#xff0c;我發現&#xff0c;一直…

1028. 從先序遍歷還原二叉樹(三種方法:棧+遞歸+集合)

文章目錄 1028. 從先序遍歷還原二叉樹&#xff08;三種方法&#xff1a;棧遞歸集合&#xff09;一、棧 while迭代1.思路2.代碼 二、遞歸法1.思路2.代碼 三、集合存儲1.思路2.代碼 1028. 從先序遍歷還原二叉樹&#xff08;三種方法&#xff1a;棧遞歸集合&#xff09; 一、棧 wh…

hive報錯:FAILED: NullPointerException null

發現問題 起因是我虛擬機的hive不管執行什么命令都報空指針異常的錯誤 我也在網上找了很多相關問題的資料&#xff0c;發現都不是我這個問題的解決方法&#xff0c;后來在hive官網上與hive 3.1.3版本相匹配的hadoop版本是3.x的版本&#xff0c;而我的hadoop版本還是2.7.2的版本…

HTTPS的加密過程

文章目錄 前言一、為什么需要加密&#xff1f;二、只用對稱加密可以嗎&#xff1f;三、只使用非對稱加密四、雙方都使用非對稱加密五、使用非對稱加密對稱加密六、引入證書1.如何放防止數字證書被篡改&#xff1f;2.中間人有可能篡改該證書嗎&#xff1f;3.中間人有可能掉包該證…

開窗函數rank() over,dense_rank() over,row_number() over的區別

1.rank() over 查詢出指定的條件進行排名&#xff0c;條件相同排名相同的話&#xff0c;排名之間是不連續的 例如排名如 1 2 3 3 5 6 7 等&#xff0c;相同的排名會自動跳過 2.dense_rank() over 查詢出指定的條件后進行排名&#xff0c;條件相同&#xff0c;排名相同的話&…

【YOLO系列】YOLOv9論文超詳細解讀(翻譯 +學習筆記)

前言 時隔一年&#xff0c;YOLOv8還沒捂熱&#xff0c;YOLO系列最新版本——YOLOv9 終于閃亮登場&#xff01; YOLOv9的一作和v7一樣。v4也有他。 他于2017年獲得臺灣省National Central University計算機科學與信息工程博士學位&#xff0c;現在就職于該省Academia Sinica的…

【大數據】Flink SQL 語法篇(六):Temporal Join

《Flink SQL 語法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 語法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 語法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇&#xff08;三&…

機器視覺——硬件選型

1、相機選型 在選擇機器視覺相機時&#xff0c;通常需要考慮以下幾個方面&#xff1a; 1、分辨率&#xff1a;相機的分辨率決定了其拍攝圖像的清晰度和細節程度。根據具體的應用需求&#xff0c;可以選擇適當的分辨率范圍。 2、幀率&#xff1a;幀率表示相機每秒鐘能夠拍攝的…

2023年營養保健品線上電商市場行業分析(2024年營養保健行業未來趨勢分析)

近年來&#xff0c;受人口老齡化、養生年輕化等因素驅動&#xff0c;保健品行業增長強勁&#xff0c;加之越來越多的年輕人也加入養生大軍&#xff0c;成為保健品市場上的一股新力量&#xff0c;進一步帶動市場擴容。 鯨參謀數據顯示&#xff0c;2023年度&#xff0c;京東平臺…

[pdf]《軟件方法》2024版部分公開-共196頁

DDD領域驅動設計批評文集 做強化自測題獲得“軟件方法建模師”稱號 《軟件方法》各章合集 潘加宇《軟件方法》2024版部分公開pdf文件&#xff0c;共196頁&#xff0c;已上傳CSDN資源。 也可到以下地址下載&#xff1a; http://www.umlchina.com/url/softmeth2024.html 如果…