天天看點

Prometheus+Grafana+AlertManager的搭建(一)

Prometheus 是一套開源的系統監控報警架構。

本文隻要講述如何部署:Prometheus+Grafana+AlertManager

簡介

Prometheus 特性:
  • 高次元資料模型
  • 自定義查詢語言
  • 可視化資料展示
  • 高效的存儲政策
  • 易于運維
  • 提供各種用戶端開發庫
  • 警告和報警
  • 資料導出
Prometheus 組成及架構
Prometheus+Grafana+AlertManager的搭建(一)

大緻過程:從各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+Grafana+AlertManager的搭建(一)
安裝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

選擇:配置資料源

Prometheus+Grafana+AlertManager的搭建(一)

選擇: Add data source-Prometheus

Prometheus+Grafana+AlertManager的搭建(一)

填寫URL

Prometheus+Grafana+AlertManager的搭建(一)

建立可視化監聽

Prometheus+Grafana+AlertManager的搭建(一)
Prometheus+Grafana+AlertManager的搭建(一)

監聽接口的配置:

Metrics:http_server_requests_seconds_count{instance=“192.168.84.47:15113”,status=“200”,uri!~"/actuator.*"}

Legend:

{{uri}}

繼續閱讀