Prometheus部署(一)

Prometheus是最初在SoundCloud上構建的開源系統監視和警報工具包。自2012年成立以來,許多公司和組織都採用了Prometheus,該項目擁有很是活躍的開發人員和用戶社區。Prometheus 於2016年加入了 Cloud Native Computing Foundation,這是繼Kubernetes以後的第二個託管項目。html

官網:https://prometheus.io 最新版本: 2.19.2node

Exporter是一個採集監控數據並經過Prometheus監控規範對外提供數據的組件,能爲Prometheus提供監控的接口。linux

Exporter將監控數據採集的端點經過HTTP服務的形式暴露給Prometheus Server,Prometheus Server經過訪問該Exporter提供的Endpoint端點,便可獲取到須要採集的監控數據。不一樣的Exporter負責不一樣的業務。git

Prometheus              開源的系統監控和報警框架,靈感源自Google的Borgmon監控系統

AlertManager            處理由客戶端應用程序(如Prometheus server)發送的警報。它負責將重複數據刪除,分組和路由到正確的接收者集成,還負責沉默和抑制警報

Node_Exporter           用來監控各節點的資源信息的exporter,應部署到prometheus監控的全部節點

PushGateway             推送網關,用於接收各節點推送的數據並暴露給Prometheus server

文檔:https://prometheus.io/docs/introduction/overview/github

下載prometheus各組件:web

https://prometheus.io/download/正則表達式


環境準備

  • 主機說明:
系統 ip 角色 cpu 內存 hostname
CentOS 7.8 192.168.30.135 prometheus、node1 >=2 >=2G prometheus
CentOS 7.8 192.168.30.136 altermanager、node2 >=2 >=2G altermanager
CentOS 7.8 192.168.30.137 grafana、node3 >=2 >=2G grafana
  • 所有關閉防火牆和selinux:
systemctl stop firewalld && systemctl disable firewalldsed -i 's/=enforcing/=disabled/g' /etc/selinux/config  && setenforce 0


Prometheus介紹

  • prometheus的特色:
1. 多維的數據模型(基於時間序列的Key、Value鍵值對)

2. 靈活的查詢和聚合語言PromQL

3. 提供本地存儲和分佈式存儲

4. 經過基於HTTP的Pull模型採集時間序列數據

5. 可利用Pushgateway(Prometheus的可選中間件)實現Push模式

6. 可經過動態服務發現或靜態配置發現目標機器

7. 支持多種圖表和數據大盤

  • prometheus的組件:
1. Prometheus server,負責拉取、存儲時間序列數據

2. 客戶端庫(client library),插入應用程序代碼

3. 推送網關(push gateway),支持短暫的任務

4. 特殊類型的exporter,支持如HAProxy,StatsD,Graphite等服務

5. 一個alertmanager處理告警

6. 各類支持工具

  • prometheus的架構:

下圖說明了Prometheus的體系結構及其某些生態系統組件:數據庫

在這裏插入圖片描述

  • prometheus的使用場景:

prometheus很是適合記錄任何純數字時間序列。它既適合以機器爲中心的監視,也適合監視高度動態的面向服務的體系結構。在微服務世界中,它對多維數據收集和查詢的支持是一種特別的優點。vim

prometheus的設計旨在提升可靠性,使其成爲中斷期間要使用的系統,從而使您可以快速診斷問題。每一個prometheus服務器都是獨立的,而不依賴於網絡存儲或其餘遠程服務,當基礎設施部分出現問題時仍然可使用它。api


Prometheus概念

  • 數據模型:

prometheus將全部數據存儲爲時間序列:屬於相同 metric名稱和相同標籤組(鍵值對)的時間戳值流。

  • metric 和 標籤:

每個時間序列都是由其 metric名稱和一組標籤(鍵值對)組成惟一標識。

metric名稱表明了被監控系統的通常特徵(如 http_requests_total表明接收到的HTTP請求總數)。它可能包含ASCII字母和數字,以及下劃線和冒號,它必須匹配正則表達式[a-zA-Z_:][a-zA-Z0-9_:]*

注意:冒號是爲用戶定義的記錄規則保留的,不該該被exporter使用。

標籤給prometheus創建了多維度數據模型:對於相同的 metric名稱,標籤的任何組合均可以標識該 metric的特定維度實例(例如:全部使用POST方法到 /api/tracks 接口的HTTP請求)。查詢語言會基於這些維度進行過濾和聚合。更改任何標籤值,包括添加或刪除標籤,都會建立一個新的時間序列。

標籤名稱可能包含ASCII字母、數字和下劃線,它必須匹配正則表達式[a-zA-Z_][a-zA-Z0-9_]*。另外,以雙下劃線__開頭的標籤名稱僅供內部使用。

標籤值能夠包含任何Unicode字符。標籤值爲空的標籤被認爲是不存在的標籤。

  • 表示法:

給定 metric名稱和一組標籤,一般使用如下表示法標識時間序列:

{=, ...}

例如,一個時間序列的 metric名稱是 api_http_requests_total,標籤是 method="POST"handler="/messages"。能夠這樣寫:

api_http_requests_total{method="POST", handler="/messages"}

這和OpenTSDB的表示法是同樣的。

  • metric類型:
Counter             值只能單調增長或重啓時歸零,能夠用來表示處理的請求數、完成的任務數、出現的錯誤數量等

Gauge               值能夠任意增長或減小,能夠用來測量溫度、當前內存使用等

Histogram           取樣觀測結果,通常用來請求持續時間或響應大小,並在一個可配置的分佈區間(bucket)內計算這些結果,提供全部觀測結果的總和
                        
                        累加的 counter,表明觀測區間:_bucket{le=""}
                        全部觀測值的總數:_sum
                        觀測的事件數量:_count

Summary             取樣觀測結果,通常用來請求持續時間或響應大小,提供觀測次數及全部觀測結果的總和,還能夠經過一個滑動的時間窗口計算可分配的分位數
                        觀測的事件流φ-quantiles (0 ≤ φ ≤ 1):{quantile="φ"}
                        全部觀測值的總和:_sum
                        觀測的事件數量:_count

  • 實例與任務:

在prometheus中,一個能夠拉取數據的端點叫作實例(instance),通常等同於一個進程。一組有着一樣目標的實例(例如爲彈性或可用性而複製的進程副本)叫作任務(job)。

當prometheus拉取目標時,它會自動添加一些標籤到時間序列中,用於標識被拉取的目標:

job:目標所屬的任務名稱

instance:目標URL中的:部分

若是兩個標籤在被拉取的數據中已經存在,那麼就要看配置選項 honor_labels 的值來決定行爲了。

每次對實例的拉取,prometheus會在如下的時間序列中保存一個樣本(樣本指的是在一個時間序列中特定時間點的一個值):

up{job="", instance=""}:若是實例健康(可達),則爲 1 ,不然爲 0

scrape_duration_seconds{job="", instance=""}:拉取的時長

scrape_samples_post_metric_relabeling{job="", instance=""}:在 metric relabeling 以後,留存的樣本數量

scrape_samples_scraped{job="", instance=""}:目標暴露出的樣本數量

up 時間序列對於實例的可用性監控來講很是有用。


Prometheus部署

  • 下載prometheus:
mkdir /software && cd /softwarewget https://github.com/prometheus/prometheus/releases/download/v2.19.0/prometheus-2.19.0.linux-amd64.tar.gztar xf prometheus-2.19.0.linux-amd64.tar.gzmv prometheus-2.19.0.linux-amd64 /usr/local/prometheus

  • 安裝prometheus:
useradd -M -s /sbin/nologin prometheusmkdir -p /data/prometheuschown -R prometheus:prometheus /usr/local/prometheus /data/prometheus

vim /usr/lib/systemd/system/prometheus.service

[Unit]Description=Prometheus
After=network.target[Service]Type=simple
Environment="GOMAXPROCS=4"User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPIDExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --storage.tsdb.retention=30d \
  --web.console.libraries=/usr/local/prometheus/console_libraries \
  --web.console.templates=/usr/local/prometheus/consoles \
  --web.listen-address=0.0.0.0:9090 \
  --web.read-timeout=5m \
  --web.max-connections=10 \
  --query.max-concurrency=20 \
  --query.timeout=2m \
  --web.enable-lifecycle
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
NoNewPrivileges=true
LimitNOFILE=infinity
ReadWriteDirectories=/data/prometheus
ProtectSystem=full

SyslogIdentifier=prometheus
Restart=always[Install]WantedBy=multi-user.target

  • 啓動prometheus:
systemctl daemon-reload

systemctl enable prometheus && systemctl start prometheusnetstat -lntp | grep prometheus

tcp6       0      0 :::9090                 :::*                    LISTEN      43742/prometheus

訪問ip:9090

在這裏插入圖片描述

prometheus部署完成,接下來須要配置prometheus。


Prometheus配置

prometheus的配置文件prometheus.yml,它主要分如下幾個配置塊:

全局配置        global

告警配置        alerting

規則文件配置    rule_files

拉取配置        scrape_configs

遠程讀寫配置    remote_read、remote_write

  • 全局配置 global

global指定在全部其餘配置上下文中有效的參數。還可用做其餘配置部分的默認設置。

global:
  # 默認拉取頻率
  [ scrape_interval: <duration> | default = 1m ]

  # 拉取超時時間
  [ scrape_timeout: <duration> | default = 10s ]

  # 執行規則頻率
  [ evaluation_interval: <duration> | default = 1m ]

  # 通訊時添加到任什麼時候間序列或告警的標籤
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    [ : <labelvalue> ... ]

  # 記錄PromQL查詢的日誌文件
  [ query_log_file: <string> ]

  • 告警配置 alerting

alerting指定與Alertmanager相關的設置。

alerting:
  alert_relabel_configs:
    [ - <relabel_config> ... ]
  alertmanagers:
    [ - <alertmanager_config> ... ]

  • 規則文件配置 rule_files

rule_files指定prometheus加載的任何規則的位置,從全部匹配的文件中讀取規則和告警。目前沒有規則。

rule_files:
  [ - <filepath_glob> ... ]

  • 拉取配置 scrape_configs

scrape_configs指定prometheus監控哪些資源。默認會拉取prometheus自己的時間序列數據,經過http://localhost:9090/metrics進行拉取。

一個scrape_config指定一組目標和參數,描述如何拉取它們。在通常狀況下,一個拉取配置指定一個做業。在高級配置中,這可能會改變。

能夠經過static_configs參數靜態配置目標,也可使用支持的服務發現機制之一動態發現目標。

此外,relabel_configs在拉取以前,能夠對任何目標及其標籤進行修改。

scrape_configs:job_name: <job_name># 拉取頻率[ scrape_interval: <duration> | default =<global_config.scrape_interval> ]# 拉取超時時間[ scrape_timeout: <duration> | default =<global_config.scrape_timeout> ]# 拉取的http路徑[ metrics_path: <path> | default = /metrics ]# honor_labels 控制prometheus處理已存在於收集數據中的標籤與prometheus將附加在服務器端的標籤("做業"和"實例"標籤、手動配置的目標標籤和由服務發現實現生成的標籤)之間的衝突# 若是 honor_labels 設置爲 "true",則經過保持從拉取數據得到的標籤值並忽略衝突的服務器端標籤來解決標籤衝突# 若是 honor_labels 設置爲 "false",則經過將拉取數據中衝突的標籤重命名爲"exported_"來解決標籤衝突(例如"exported_instance"、"exported_job"),而後附加服務器端標籤# 注意,任何全局配置的 "external_labels"都不受此設置的影響。在與外部系統的通訊中,只有當時間序列尚未給定的標籤時,它們才被應用,不然就會被忽略[ honor_labels: <boolean> | default = false ]# honor_timestamps 控制prometheus是否遵照拉取數據中的時間戳# 若是 honor_timestamps 設置爲 "true",將使用目標公開的metrics的時間戳# 若是 honor_timestamps 設置爲 "false",目標公開的metrics的時間戳將被忽略[ honor_timestamps: <boolean> | default = true ]# 配置用於請求的協議[ scheme: <scheme> | default = http ]# 可選的http url參數params:
  [ : [<string>, ...] ]# 在每一個拉取請求上配置 username 和 password 來設置 Authorization 頭部,password 和 password_file 二選一basic_auth:
  [ username: <string> ]
  [ password: <secret> ]
  [ password_file: <string> ]# 在每一個拉取請求上配置 bearer token 來設置 Authorization 頭部,bearer_token 和 bearer_token_file 二選一[ bearer_token: <secret> ]# 在每一個拉取請求上配置 bearer_token_file 來設置 Authorization 頭部,bearer_token_file 和 bearer_token 二選一[ bearer_token_file: /path/to/bearer/token/file ]# 配置拉取請求的TLS設置tls_config:
  [ <tls_config> ]# 可選的代理URL[ proxy_url: <string> ]# Azure服務發現配置列表azure_sd_configs:
  [ - <azure_sd_config> ... ]# Consul服務發現配置列表consul_sd_configs:
  [ - <consul_sd_config> ... ]# DNS服務發現配置列表dns_sd_configs:
  [ - <dns_sd_config> ... ]# EC2服務發現配置列表ec2_sd_configs:
  [ - <ec2_sd_config> ... ]# OpenStack服務發現配置列表openstack_sd_configs:
  [ - <openstack_sd_config> ... ]# file服務發現配置列表file_sd_configs:
  [ - <file_sd_config> ... ]# GCE服務發現配置列表gce_sd_configs:
  [ - <gce_sd_config> ... ]# Kubernetes服務發現配置列表kubernetes_sd_configs:
  [ - <kubernetes_sd_config> ... ]# Marathon服務發現配置列表marathon_sd_configs:
  [ - <marathon_sd_config> ... ]# AirBnB's Nerve服務發現配置列表nerve_sd_configs:
  [ - <nerve_sd_config> ... ]# Zookeeper Serverset服務發現配置列表serverset_sd_configs:
  [ - <serverset_sd_config> ... ]# Triton服務發現配置列表triton_sd_configs:
  [ - <triton_sd_config> ... ]# 靜態配置目標列表static_configs:
  [ - <static_config> ... ]# 目標relabel配置列表relabel_configs:
  [ - <relabel_config> ... ]# metric relabel配置列表metric_relabel_configs:
  [ - <relabel_config> ... ]# 每次拉取樣品的數量限制# metric relabelling以後,若是有超過這個數量的樣品,整個拉取將被視爲失效。0表示沒有限制[ sample_limit: <int> | default = 0 ]

  • 遠程讀寫配置 remote_read/remote_write

remote_read/remote_write將數據源與prometheus分離,當前不作配置。

# 與遠程寫功能相關的設置remote_write:
  [ - <remote_write> ... ]# 與遠程讀功能相關的設置remote_read:
  [ - <remote_read> ... ]

  • 簡單配置示例:
vim /usr/local/prometheus/prometheus.yml

global:
  scrape_interval: 15s  evaluation_interval: 15salerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']


Node Exporter部署

  • 下載node_exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gztar xf node_exporter-1.0.1.linux-amd64.tar.gzmv node_exporter-1.0.1.linux-amd64 /usr/local/node_exporter

  • 安裝node_exporter:
useradd -M -s /sbin/nologin prometheus              #若已建立,可省略該步chown -R prometheus:prometheus /usr/local/node_exporter

vim /usr/lib/systemd/system/node_exporter.service

[Unit]Description=node_exporter
After=network.target[Service]Type=simple
User=prometheus
Group=prometheus
ExecStart=/usr/local/node_exporter/node_exporter \
  --web.listen-address=0.0.0.0:9100 \
  --web.telemetry-path=/metrics \
  --log.level=info \
  --log.format=logfmt
Restart=always[Install]WantedBy=multi-user.target

  • 啓動node_exporter:
systemctl daemon-reload

systemctl enable node_exporter && systemctl start node_exporternetstat -lntp | grep node_exporter

tcp6       0      0 :::9100                 :::*                    LISTEN      2725/node_exportercurl http://localhost:9100/metrics | head

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 64410    0 64410    0     0  5761k      0 --:--:-- --:--:-- --:--:-- 6290k# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.# TYPE go_gc_duration_seconds summarygo_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0
go_gc_duration_seconds{quantile="1"} 0
go_gc_duration_seconds_sum 0
go_gc_duration_seconds_count 0# HELP go_goroutines Number of goroutines that currently exist.

node exporter展現了prometheus能夠拉取的指標,包括在輸出中更下方的各類系統指標(帶有前綴node_)。要查看這些指標(以及幫助和類型信息):

curl http://localhost:9100/metrics | grep 'node_'

  • 配置scrape_configs

啓動好node_exporter後,還須要配置prometheus才能訪問node exporter指標。

vim /usr/local/prometheus/prometheus.yml                #修改 scrape_configs 內容

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['192.168.30.135:9090']

  - job_name: 'node'
    static_configs:
    - targets: ['192.168.30.135:9100','192.168.30.136:9100','192.168.30.137:9100']

systemctl restart prometheus

  • 查看node狀態:

訪問prometheus頁面,StatusTargets

在這裏插入圖片描述

能夠看到,以前部署的node exporter狀態是UP,說明運行正常。

經過部署的node_exporter能夠收集當前主機的系統基礎信息。如查看系統15分鐘平均負載,

在這裏插入圖片描述

node_exporter部署完成。


AlertManager部署

  • 下載alertmanager:
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gztar xf alertmanager-0.21.0.linux-amd64.tar.gzmv alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager

  • 安裝alertmanager:
useradd -M -s /sbin/nologin prometheus              #若已建立,可省略該步mkdir /usr/local/alertmanager/datachown -R prometheus:prometheus /usr/local/alertmanager

vim /usr/lib/systemd/system/alertmanager.service

[Unit]Description=Alertmanager
After=network.target[Service]Type=simple
User=prometheus
Group=prometheus
ExecStart=/usr/local/alertmanager/alertmanager \
  --config.file=/usr/local/alertmanager/alertmanager.yml \
  --storage.path=/usr/local/alertmanager/data \
  --web.listen-address=0.0.0.0:9093 \
  --cluster.listen-address=0.0.0.0:9094 \
  --log.level=info \
  --log.format=logfmt
Restart=always[Install]WantedBy=multi-user.target

  • 啓動alertmanager:
systemctl daemon-reload

systemctl enable alertmanager && systemctl start alertmanagernetstat -lntp | grep alertmanager

tcp6       0      0 :::9093                 :::*                    LISTEN      33654/alertmanager  
tcp6       0      0 :::9094                 :::*                    LISTEN      33654/alertmanagercurl localhost:9093/metrics | head

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0# HELP alertmanager_alerts How many alerts by state.# TYPE alertmanager_alerts gaugealertmanager_alerts{state="active"} 0
alertmanager_alerts{state="suppressed"} 0# HELP alertmanager_alerts_invalid_total The total number of received alerts that were invalid.# TYPE alertmanager_alerts_invalid_total counteralertmanager_alerts_invalid_total{version="v1"} 0
alertmanager_alerts_invalid_total{version="v2"} 0# HELP alertmanager_alerts_received_total The total number of received alerts.# TYPE alertmanager_alerts_received_total counter

  • 配置alerting

啓動好alertmanager後,還須要配置prometheus才能經過alertmanager告警。

vim /usr/local/prometheus/prometheus.yml                #更改 alerting 內容

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.30.136:9093
      scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['192.168.30.135:9090']

  - job_name: 'node'
    static_configs:
    - targets: ['192.168.30.135:9100','192.168.30.136:9100','192.168.30.137:9100']

  - job_name: 'alertmanager'
    static_configs:
    - targets: ['192.168.30.136:9093']

systemctl restart prometheus

訪問prometheus頁面,StatusTargets

在這裏插入圖片描述

能夠看到,以前部署的alertmanager狀態是UP,說明運行正常。

alertmanager部署完成。但alertmanager還須要進一步配置通知路由和通知接收者。


AlertManager配置

alertmanager經過命令行標誌和配置文件進行配置。命令行標誌配置不可變的系統參數時,配置文件定義禁止規則,通知路由和通知接收器。

alertmanager的配置文件alertmanager.yml,它主要分如下幾個配置塊:

全局配置        global

通知模板        templates

路由配置        route

接收器配置      receivers

抑制配置        inhibit_rules

  • 全局配置 global

global指定在全部其餘配置上下文中有效的參數。還用做其餘配置部分的默認設置。

global:
  # 默認的SMTP頭字段
  [ smtp_from: <tmpl_string> ]
  
  # 默認的SMTP smarthost用於發送電子郵件,包括端口號
  # 端口號一般是25,對於TLS上的SMTP,端口號爲587
  # Example: smtp.example.org:587
  [ smtp_smarthost: <string> ]
  
  # 要標識給SMTP服務器的默認主機名
  [ smtp_hello: <string> | default = "localhost" ]
  
  # SMTP認證使用CRAM-MD5,登陸和普通。若是爲空,Alertmanager不會對SMTP服務器進行身份驗證
  [ smtp_auth_username: <string> ]
  
  # SMTP Auth using LOGIN and PLAIN.
  [ smtp_auth_password: <secret> ]
  
  # SMTP Auth using PLAIN.
  [ smtp_auth_identity: <string> ]
  
  # SMTP Auth using CRAM-MD5.
  [ smtp_auth_secret: <secret> ]
  
  # 默認的SMTP TLS要求
  # 注意,Go不支持到遠程SMTP端點的未加密鏈接
  [ smtp_require_tls: <bool> | default = true ]

  # 用於Slack通知的API URL
  [ slack_api_url: <secret> ]
  [ victorops_api_key: <secret> ]
  [ victorops_api_url: <string> | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ]
  [ pagerduty_url: <string> | default = "https://events.pagerduty.com/v2/enqueue" ]
  [ opsgenie_api_key: <secret> ]
  [ opsgenie_api_url: <string> | default = "https://api.opsgenie.com/" ]
  [ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
  [ wechat_api_secret: <secret> ]
  [ wechat_api_corp_id: <string> ]

  # 默認HTTP客戶端配置
  [ http_config: <http_config> ]

  # 若是告警不包括EndsAt,則ResolveTimeout是alertmanager使用的默認值,在此時間事後,若是告警沒有更新,則能夠聲明警報已解除
  # 這對Prometheus的告警沒有影響,它們包括EndsAt
  [ resolve_timeout: <duration> | default = 5m ]

  • 通知模板 templates

templates指定了從其中讀取自定義通知模板定義的文件,最後一個文件可使用一個通配符匹配器,如templates/*.tmpl

templates:
  [ - <filepath> ... ]

  • 路由配置 route

route定義了路由樹中的節點及其子節點。若是未設置,則其可選配置參數將從其父節點繼承。

每一個告警都會在已配置的頂級路由處進入路由樹,該路由樹必須與全部告警匹配(即沒有任何已配置的匹配器),而後它會遍歷子節點。若是continue設置爲false,它將在第一個匹配的子項以後中止;若是continue設置爲true,則告警將繼續與後續的同級進行匹配。若是告警與節點的任何子節點都不匹配(不匹配的子節點或不存在子節點),則根據當前節點的配置參數來處理告警。

route:
  group_by: ['alertname']
  group_wait: 10s  group_interval: 10s  repeat_interval: 1h  receiver: 'web.hook'

  • 接收器配置 receivers

receivers是一個或多個通知集成的命名配置。建議經過webhook接收器實現自定義通知集成。

receivers:- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'

  • 抑制規則配置 inhibit_rules

當存在與另外一組匹配器匹配的告警(源)時,抑制規則會使與一組匹配器匹配的告警(目標)「靜音」。目標和源告警的equal列表中的標籤名稱都必須具備相同的標籤值。

在語義上,缺乏標籤和帶有空值的標籤是相同的。所以,若是equal源告警和目標告警都缺乏列出的全部標籤名稱,則將應用抑制規則。

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

  • 默認配置示例:
vim /usr/local/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5mroute:
  group_by: ['alertname']
  group_wait: 10s  group_interval: 10s  repeat_interval: 1h  receiver: 'web.hook'receivers:- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']


Grafana部署

grafana 是一款採用 go 語言編寫的開源應用,主要用於大規模指標數據的可視化展示,是網絡架構和應用分析中最流行的時序數據展現工具,目前已經支持絕大部分經常使用的時序數據庫。

官網:https://grafana.com

  • 安裝grafana:
vim /etc/yum.repos.d/grafana.repo

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

yum makecache fast

yum install -y grafana

systemctl daemon-reload

systemctl enable grafana-server && systemctl start grafana-servernetstat -lntp | grep 3000

訪問ip:3000,初始帳號密碼爲adminadmin,建議後面更改密碼。

在這裏插入圖片描述

在這裏插入圖片描述

grafana部署完成。grafana配置文件:/etc/grafana/grafana.ini

  • 導入prometheus數據源:

ConfigurationData SourcesPrometheusSelect,填入http://ip:9090,保存便可。

在這裏插入圖片描述

  • 導入dashboard:

官方dashboard模板:https://grafana.com/grafana/dashboards

選擇排行第一的中文模板:1 Node Exporter for Prometheus Dashboard CN v20200628,模板ID是8919。

ManageImport,填入模板ID,導入,

在這裏插入圖片描述

自定義dashboard名稱,選擇數據源Prometheus

在這裏插入圖片描述

在這裏插入圖片描述

至此,prometheus + grafana 部署完成。接下來詳細配置prometheus的監控與告警。

相關文章
相關標籤/搜索