Prometheus 是一套開源的系統監控報警架構。
本文隻要講述如何部署:Prometheus+Grafana+AlertManager
簡介
Prometheus 特性:
- 高次元資料模型
- 自定義查詢語言
- 可視化資料展示
- 高效的存儲政策
- 易于運維
- 提供各種用戶端開發庫
- 警告和報警
- 資料導出
Prometheus 組成及架構
大緻過程:從各job中擷取metrics,或者接收metrics,将收集到的metrics存儲到本地,并根據定義好的alert.rule來進行處理,向Alertmanager 推送警報。Alertmanager接收到警報侯發送郵件等資訊。
Springboot內建Prometheus
pom.xml中引入
<!--pom.xml中引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
application.yml中配置
server:
port: 15113
servlet:
context-path: /communtiy/
spring:
application:
name: prometheus-test-server
management:
endpoints:
web:
exposure:
include: 'prometheus'
metrics:
tags:
application: ${spring.application.name}
編寫一個測試接口
@RestController
public class GetQxController {
@Resource
Test1Mapper test1Mapper;
@RequestMapping("/getQxByUser")
public Object getQxByUser(){
return test1Mapper.getAll();
}
}
測試內建成功
http://localhost:15113/communtiy/actuator/prometheus
安裝Prometheus
高速下載下傳位址 Prometheus+Grafana+AlertManager.zip
官方下載下傳位址 prometheus-2.19.2.darwin-amd64.tar.gz
安裝prometheus步驟
解壓
tar xvfz prometheus-*.tar.gz
cd prometheus-*
修改Prometheus的配置檔案prometheus.yml
alerting: #配置Alertmanager相關資訊
alertmanagers:
- static_configs:
- targets: ["118.24.167.82:9093"]
rule_files:
- "../rule/*.yml" # 警告的規則
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090'] # prometheus的預設端口為9090
- job_name: 'test_15113' #自定義job名稱
scrape_interval: 5s # 多久抓取一次資訊
metrics_path: '/communtiy/actuator/prometheus' # 擷取監控資訊的接口
static_configs:
- targets: ['192.168.84.47:15113'] # 需要監聽的項目ip+port
建立告警規則檔案…/rule/84_47_15113.yml
cd ..
mkdir rule
touch 84_47_15113.yml
vim 84_47_15113.yml
84_47_15113.yml内容
groups:
- name: node_status #自定義
rules:
- alert: serverDown # alertName
expr: up{job="test_15113"} == 0 # job名稱test_15113當機
# expr: up == 0 # job當機
for: 30s
labels:
severity: warning
annotations: # 警告内容
description: "{{$labels.instance}} down!"
summary: "{{$labels.instance}} of job {{$labels.job}} down!"
啟動Prometheus
背景運作,将日志列印到log.txt中
通路Prometheus
http://ip:9090
安裝AlertManager步驟
解壓
tar xvfz alertmanager-*.tar.gz
cd alertmanager-*
修改Alertmanager的配置檔案AlertManager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.exmail.qq.com:465' # 發送郵箱的smtp,騰訊企業郵箱端口465
smtp_from: 'xxxxx.com' # 發送郵箱賬号
smtp_auth_username: 'xxxxx.com' # 發送郵箱賬号
smtp_auth_password: 'xxxxxx' # 發送郵箱密碼
smtp_require_tls: false # 關閉tls
wechat_api_url: "https://qyapi.weixin.qq.com/cgi-bin/" #發送企業微信的接口
wechat_api_secret: '*********************' #企業微信擷取
wechat_api_corp_id: '**************' #企業微信擷取
templates:
- '/usr/local/listen_ip/alertmanager-0.21.0/temp/*.tmpl' #模闆位址
route:
group_by: ['alertname']# 采用哪個标簽來作為分組依據
group_wait: 30s # 組告警等待時間。也就是告警産生後等待30s,如果有同組告警一起發出
group_interval: 3m # 兩組告警的間隔時間
repeat_interval: 4h # 重複告警的間隔時間,減少相同郵件的發送頻率
receiver: 'email' #預設發送email
routes:
- receiver: 'wechat' # 如果是error 發送微信
match:
severity: error
receivers:
- name: 'email'
email_configs:
- to: '**************@qq.com'
html: '{{template "email.to.html" . }}' #郵件模闆
headers: { Subject: "[WARN] 報警郵件"}
# - to: '*************@qq.com,*****************@qq.com' 發送多個人
- name: 'wechat'
wechat_configs:
- send_resolved: true
to_user: "@all" # 發送所有人
to_party: '1' # 微信擷取
agent_id: '1000002' # 微信擷取
corp_id: '********' # 微信擷取
message: '{{template "wechat.to.message" . }}' #微信模闆
email.tmpl模闆
{{ define "email.to.html" }}
{{ range .Alerts }}
=============start=============<br>
告警等級:{{ .Labels.severity }}<br>
告警類型:{{ .Labels.alertname }}<br>
告警主機:{{ .Labels.instance }}<br>
告警主題:{{ .Annotations.summary }}<br>
告警備注:{{ .Annotations.description }}<br>
觸發時間:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
==============end================
{{ end }}
{{ end }}
wechat.tmpl
{{ define "wechat.to.message" }}
{{ if gt (len .Alerts.Firing) 0}}
{{ range $i, $alert := .Alerts }}
===start===
@警報
告警等級:{{ .Labels.severity }}
告警類型:{{ .Labels.alertname }}
告警主機:{{ .Labels.instance }}
告警主題:{{ .Annotations.summary }}
告警備注:{{ .Annotations.description }}
觸發時間:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
===end===
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
{{ range $i, $alert := .Alerts }}
===start===
@恢複
告警等級:{{ .Labels.severity }}
告警類型:{{ .Labels.alertname }}
告警項目:{{ .Labels.instance }}
觸發時間:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢複時間:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
===end===
{{ end }}
{{ end }}
{{ end }}
啟動Alertmanager
背景運作,将日志列印到log.txt中
通路Alertmanager
http://ip:9093
安裝Grafana步驟
解壓
tar xvfz grafana-*.tar.gz
cd grafana-*
cd bin
啟動Grafana
背景運作,将日志列印到log.txt中
通路Alertmanager
http://ip:3000
注:伺服器需要将9090,9093,3000等端口打開
注:建議将三個服務都配置完畢後逐一運作
Grafana的使用
預設username/pwd:admin/admin
選擇:配置資料源
選擇: Add data source-Prometheus
填寫URL
建立可視化監聽
監聽接口的配置:
Metrics:http_server_requests_seconds_count{instance=“192.168.84.47:15113”,status=“200”,uri!~"/actuator.*"}
Legend:
{{uri}}