工具介紹
注意:該部分介紹摘抄自:搭建高級的性能監控系統(Prometheus+Grafana+Node Exporter+Alertmanager) - 愛云
Prometheus、Grafana、Node Exporter 和Alertmanager是一組用于監控和可視化系統性能的開源工具。它們通常一起使用,形成一個強大的完整的監控和告警系統。 一般來說,這四個工具一起協作,形成了一個完整的監控和告警系統。Node Exporter用于收集主機級別的指標(本文暫未使用),Prometheus存儲和查詢這些指標,Grafana提供可視化界面,而Alertmanager則負責管理和發送告警。整個系統的目標是幫助管理員和開發人員實時了解系統的狀態、性能和健康狀況,并在必要時采取措施。
Prometheus
Prometheus 是一種開源的系統監控和警報工具。它最初由 SoundCloud 開發,并成為 Cloud Native Computing Foundation(CNCF)的一部分。Prometheus 支持多維度的數據模型和強大的查詢語言,使得用戶可以輕松地收集和查詢各種類型的監控數據。
Grafana
Grafana 是一個開源的數據可視化和監控平臺。它提供了豐富的圖表和儀表盤,可以將各種數據源的信息可視化展示。Grafana 支持多個數據源,包括 Prometheus、Graphite、InfluxDB 等,因此可以與各種監控系統集成,提供靈活且強大的可視化功能。
Alertmanager
Alertmanager 是 Prometheus 生態系統中的一個組件,負責處理和管理告警。當 Prometheus 檢測到異常或達到某個預定的閾值時,它將生成告警并將其發送到 Alertmanager。Alertmanager 可以進行靜默、分組、抑制和路由告警,并將它們發送到不同的接收端,如電子郵件、Slack 等
.NetCore項目準備
基于我的一個示例項目進行改造,項目地址:MyExample: 包含部分文章內的示例代碼?,為了演示一個基本的監控效果,監控的數據也只是請求,具體生產環境需要監控什么業務,這個看具體情況了,這里需要在原來的項目基礎上需要安裝以下nuget包
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.7.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0" />
然后就可以注入服務,這里只是舉例操作
services.AddOpenTelemetry().WithMetrics(builder =>{builder.AddPrometheusExporter();builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");});
最后記得要使用服務
app.MapPrometheusScrapingEndpoint();
啟動項目后訪問 ip+ metrics訪問頁面
然后將該示例項目使用docker部署到服務器上 ,如果要使用該示例項目,記得切換分支到develop,將項目拉取到服務器,然后進入項目目錄,執行命令去生成容器
sudo docker-compose up -d
部署成功截圖如下
訪問地址?http://192.168.82.163:8001/metrics
安裝監控和可視化程序
準備一個服務器,提前安裝好了docker以及docker-compose程序,版本示例如下
關于Prometheus和Grafana可以通過docker進行安裝到服務器中,可以參考倉庫:CommonDockerYaml: 公共常用的docker-compose yaml配置
安裝Prometheus
因為這里我只是用于做demo演示效果,所以我并沒有取考慮掛載的問題,生產環境使用記得掛載數據
version: '3'services:prometheus: # 訪問:http://localhost:9090/targetsimage: prom/prometheus:v2.37.6container_name: prometheus command:- '--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.external-url=http://localhost:9090/'- '--web.enable-lifecycle'- '--storage.tsdb.retention=15d'volumes:#- /etc/localtime:/etc/localtime:ro- ./config/prometheus/:/etc/prometheus/#- ./data/prometheus:/prometheusports:- 9090:9090links:- alertmanager:alertmanageralertmanager: # 告警服務image: prom/alertmanager:v0.25.0container_name: alertmanagerports:- 9093:9093volumes:# - /etc/localtime:/etc/localtime:ro- ./config/prometheus/:/etc/alertmanager/command:- '--config.file=/etc/alertmanager/alertmanager.yml'- '--storage.path=/alertmanager'
關于prometheus.yml內容如下
# 全局配置
global:scrape_interval: 15sevaluation_interval: 15s# scrape_timeout is set to the global default (10s).
# 告警配置
alerting:alertmanagers:- static_configs:- targets: ['localhost:9093']
# 加載一次規則,并根據全局“評估間隔”定期評估它們。
rule_files:- "/config/rules.yml"
# 控制Prometheus監視哪些資源
# 默認配置中,有一個名為prometheus的作業,它會收集Prometheus服務器公開的時間序列數據。
scrape_configs:# 作業名稱將作為標簽“job=<job_name>`添加到此配置中獲取的任何數據。- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'node' # .NetCore服務地址static_configs:- targets: ['localhost:9100']labels:env: devrole: docker
alertmanager.yml文件,我并沒有做配置,暫時搞了一個默認的
global:resolve_timeout: 5msmtp_smarthost: 'xxx@xxx:587'smtp_from: 'zhaoysz@xxx'smtp_auth_username: 'xxx@xxx'smtp_auth_password: 'xxxx'smtp_require_tls: true
route:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'test-mails'
receivers:
- name: 'test-mails'email_configs:- to: 'scottcho@qq.com'
rule.yml文件內容如下
groups:
- name: examplerules:# Alert for any instance that is unreachable for >5 minutes.- alert: InstanceDownexpr: up == 0for: 1mlabels:serverity: pageannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
然后就可以運行docker-compose命令去生成容器,示例如下
然后訪問Ip地址加端口訪問頁面,比如http://192.168.81.139:9090/
打開這個界面就說明安裝好了,這個時候我們看下?http://192.168.81.139:9090/targets?search=?頁面
這個node報錯是因為這個地址是無效了,那么修改為真是.NetCore的服務地址,修改配置文件然后重新啟動
重啟后界面顯示如下
安裝Granfana
這里直接使用docker來安裝grafana
sudo docker run --name grafana -d -p 8000:3000 grafana/grafana
然后訪問地址 ip+ 8000,默認賬號密碼為admin/admin
添加數據源
填寫prometheus地址
導入儀表盤
創建文件夾用來存放我們本地的要導入的文件
想要在Grafana中進行數據的展示,需要導入dashborards模板,本文的模板我是從微軟倉庫找到的,地址為:https://github.com/dotnet/aspire/tree/main/src/Grafana
分別點進去下載這兩個儀表盤對應的的json文件即可,也可以去我common-docker-yaml倉庫中下載
然后導入json文件
導入aspnetcore.json文件,并選擇我們的netcore文件夾以及選擇剛剛我們創建的Prometheus數據源
導入aspnetcore-endpoint.json文件
這個時候我們就看到了好看的儀表盤
當我點擊接口讓其報錯,那么就顯示到界面上
如果需要監控其他內容,也可以模仿著進行修改。
文章轉載自:AZRNG
原文鏈接:https://www.cnblogs.com/azrng/p/18048851
體驗地址:引邁 - JNPF快速開發平臺_低代碼開發平臺_零代碼開發平臺_流程設計器_表單引擎_工作流引擎_軟件架構