目錄
Prometheus概述
部署Prometheus服務器
環(huán)境說明:
配置時間
安裝Prometheus服務器
添加被監(jiān)控端
部署通用的監(jiān)控exporter
Grafana
概述
部署Grafana
展示node1的監(jiān)控信息
監(jiān)控MySQL數(shù)據(jù)庫
配置MySQL
配置mysql exporter
配置mysql exporter
配置prometheus監(jiān)控mysql
自動發(fā)現(xiàn)機制
概述
基于文件自動發(fā)現(xiàn)
修改Prometheus使用自動發(fā)現(xiàn)
配置web2接受Prometheus監(jiān)控
Alertmanager
概述
Alertmanager特性
部署Alertmanager
部署
配置文件
Prometheus與Alertmanager對接
配置Alertmanager通過郵件發(fā)送告警
Prometheus概述
- Prometheus是一個開源系統(tǒng)監(jiān)控和警報工具包,最初由 SoundCloud構(gòu)建。
- 也是一款監(jiān)控軟件,也是一個時序數(shù)據(jù)庫。Prometheus 將其指標收集并存儲為時間序列數(shù)據(jù),即指標信息與記錄時的時間戳以及稱為標簽的可選鍵值對一起存儲。
- 主要用在容器監(jiān)控方面,也可以用于常規(guī)的主機監(jiān)控。
- 使用google公司開發(fā)的go語言編寫。
- Prometheus是一個框架,可以與其他組件完美結(jié)合。
部署Prometheus服務器
環(huán)境說明:
- Prometheus:192.168.88.5
- web1:192.168.88.100
配置時間
# 1. 查看時區(qū)
[root@prometheus ~]# timedatectl
Local time: Sun 2023-01-01 11:15:11 CST
Universal time: Sun 2023-01-01 03:15:11 UTC
RTC time: Sun 2023-01-01 03:15:11
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
# 2. 如果時區(qū)不正確,則改為正確的時區(qū)
[root@prometheus ~]# timedatectl set-timezone Asia/Shanghai
# 3. 查看時間
[root@prometheus ~]# date
# 4. 如果時間不正確,則改為正確的時間
[root@prometheus ~]# date -s "年月日 時:分:秒"
安裝Prometheus服務器
- 拷貝Prometheus相關(guān)軟件包到服務器
- 解壓即部署
[root@prometheus ~]# cd prometheus_soft/
[root@prometheus prometheus_soft]# tar xf prometheus-2.37.5.linux-amd64.tar.gz
[root@prometheus prometheus_soft]# mv prometheus-2.37.5.linux-amd64 /usr/local/prometheus
-
配置文件
- 配置文件中包含三個配置塊:
global
、rule_files
和scrape_configs
。 -
global
塊控制 Prometheus 服務器的全局配置。我們有兩個選擇。第一個,scrape_interval
控制 Prometheus 抓取目標的頻率。您可以為單個目標覆蓋它。在這種情況下,全局設(shè)置是每 15 秒抓取一次。該evaluation_interval
選項控制 Prometheus 評估規(guī)則的頻率。Prometheus 使用規(guī)則來創(chuàng)建新的時間序列并生成警報。 -
rule_files
塊指定我們希望 Prometheus 服務器加載的任何規(guī)則的位置?,F(xiàn)在我們還沒有規(guī)則。 - 最后一個塊,
scrape_configs
控制 Prometheus 監(jiān)控的資源。由于 Prometheus 還將有關(guān)自身的數(shù)據(jù)公開為 HTTP 端點,因此它可以抓取和監(jiān)控自身的健康狀況。在默認配置中,有一個名為 的作業(yè)prometheus
,用于抓取 Prometheus 服務器公開的時間序列數(shù)據(jù)。該作業(yè)包含一個單一的、靜態(tài)配置的目標,即localhost的9090
端口。Prometheus期望度量在/metrics路徑上的目標上可用,所以這個默認作業(yè)是通過 URL 抓取的:http://localhost:9090/metrics。
- 配置文件中包含三個配置塊:
-
編寫服務啟動文件并啟動服務
[root@prometheus ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
After=network.target
[Service]
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/
[Install]
WantedBy=multi-user.target
# 啟動服務
[root@prometheus prometheus_soft]# systemctl daemon-reload
[root@prometheus prometheus_soft]# systemctl enable prometheus.service --now
[root@prometheus prometheus_soft]# ss -tlnp | grep :9090
LISTEN 0 128 *:9090 *:* users:(("prometheus",pid=4396,fd=7))
- 訪問web頁面:http://192.168.88.5:9090/
- 查看監(jiān)控自身的數(shù)據(jù),如分配置給Prometheus運行的內(nèi)存數(shù)量
添加被監(jiān)控端
-
監(jiān)控方式:
- 拉?。簆ull。監(jiān)控端聯(lián)系被監(jiān)控端,采集數(shù)據(jù)
- 推送:push。被監(jiān)控端主動把數(shù)據(jù)發(fā)給監(jiān)控端。在prometheus中,push的方式需要額外的組件pushgateway
-
被監(jiān)控端根據(jù)自身運行的服務,可以運行不同的exporter(被監(jiān)控端安裝的、可以與Prometheus通信,實現(xiàn)數(shù)據(jù)傳遞的軟件)
-
exporter列表:Exporters and integrations | Prometheus
部署通用的監(jiān)控exporter
- node-exporter用于監(jiān)控硬件和系統(tǒng)的常用指標
- exporter運行于被監(jiān)控端,以服務的形式存在。每個exporter所使用的端口號都不一樣。
- 在web1[192.168.88.100]上部署node exporter
# 1. 拷貝node_exporter到web1
[root@prometheus ~]# scp prometheus_soft/node_exporter-1.5.0.linux-amd64.tar.gz 192.168.88.100:/root/
# 2. 解壓即部署
[root@web1 ~]# tar xf node_exporter-1.5.0.linux-amd64.tar.gz
[root@web1 ~]# mv node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter
# 3. 創(chuàng)建服務文件,并啟動服務
[root@web1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
[root@web1 ~]# systemctl daemon-reload
[root@web1 ~]# systemctl enable node_exporter.service --now
[root@web1 ~]# ss -tlnp | grep :9100
LISTEN 0 128 *:9100 *:* users:(("node_exporter",pid=7371,fd=3))
- 在Prometheus服務器上添加監(jiān)控節(jié)點
# 1. 修改配置文件,追加以下內(nèi)容。特別注意縮進
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...略...
- job_name: "web1"
static_configs:
- targets: ["192.168.88.100:9100"]
# 2. 重啟服務
[root@prometheus ~]# systemctl restart prometheus.service
- 查看添加結(jié)果
Grafana
概述
- Grafana是一款開源的、跨平臺的、基于web的可視化工具
- 展示方式:客戶端圖表、面板插件
- 數(shù)據(jù)源可以來自于各種源,如prometheus
部署Grafana
- 裝包、啟服務
[root@prometheus ~]# yum install -y prometheus_soft/grafana-enterprise-9.3.2-1.x86_64.rpm
[root@prometheus ~]# systemctl enable grafana-server.service --now
- 初始化。訪問http://192.168.88.5:3000。初始用戶名和密碼都是admin。第一次登陸時,要求改密碼,本例中密碼改為tedu.cn。如果登陸報錯,請更換其他瀏覽器。
- 修改主題
- 對接Prometheus
?添加儀表盤
?查看儀表盤
展示node1的監(jiān)控信息
- grafana模板下載:Dashboards | Grafana Labs
- 導入主機監(jiān)控模板。
?
監(jiān)控MySQL數(shù)據(jù)庫
配置MySQL
[root@web1 ~]# yum install -y mysql-server
[root@web1 ~]# systemctl enable mysqld --now
[root@web1 ~]# mysql
mysql> create user dbuser1@localhost identified by '123456';
mysql> grant all privileges on *.* to dbuser1@localhost;
mysql> quit
配置mysql exporter
配置mysql exporter
# 1. 安裝
[root@prometheus ~]# scp prometheus_soft/mysqld_exporter-0.14.0.linux-amd64.tar.gz 192.168.88.100:/root/
[root@web1 ~]# tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@web1 ~]# mv mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
# 2. 編寫用于連接mysql服務的配置文件
[root@web1 ~]# vim /usr/local/mysqld_exporter/.my.cnf
[client]
host=127.0.0.1
port=3306
user=dbuser1
password=123456
# 3. 創(chuàng)建service文件
[root@web1 ~]# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
[Install]
WantedBy=multi-user.target
[root@web1 ~]# systemctl daemon-reload
[root@web1 ~]# systemctl enable mysqld_exporter.service --now
配置prometheus監(jiān)控mysql
- 修改配置文件,啟動服務
# 1. 在配置文件中追加內(nèi)容
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...略...
- job_name: "mysql"
static_configs:
- targets: ["192.168.88.100:9104"]
# 2. 重啟服務
[root@prometheus ~]# systemctl restart prometheus.service
- 查看狀態(tài)
- 在Grafana中展示數(shù)據(jù)
?
??????
自動發(fā)現(xiàn)機制
概述
- 自動發(fā)現(xiàn)是指Prometheus自動對節(jié)點進行監(jiān)控,不需要手動一個一個去添加,和Zabbix的自動發(fā)現(xiàn)、自動注冊一個道理
- Prometheus有多種自動發(fā)現(xiàn)發(fā)現(xiàn),比如
file_sd_configs
基于文件自動發(fā)現(xiàn)、基于K8S自動發(fā)現(xiàn)、基于openstack自動發(fā)現(xiàn)、基于consul自動發(fā)現(xiàn)等。
基于文件自動發(fā)現(xiàn)
-
file_sd_configs
實現(xiàn)文件級別的自動發(fā)現(xiàn) - 使用文件自動發(fā)現(xiàn)功能后,Prometheus會定期檢查配置文件是否有更新
- 如果有更新的話就將新加入的節(jié)點接入監(jiān)控,服務端無需重啟服務
修改Prometheus使用自動發(fā)現(xiàn)
- 修改Prometheus
# 1. 備份現(xiàn)有配置文件
[root@prometheus ~]# cp /usr/local/prometheus/prometheus.yml ~
# 2. 修改配置文件,刪除靜態(tài)配置,添加自動發(fā)現(xiàn)配置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
# 將scrape_configs及以下內(nèi)容修改為:
21 scrape_configs:
22 - job_name: "prometheus"
23 file_sd_configs:
24 - refresh_interval: 120s
25 files:
26 - /usr/local/prometheus/sd_config/*.yml
# 3. 重啟服務
[root@prometheus ~]# systemctl restart prometheus.service
- web中將沒有任何監(jiān)控項目
- 創(chuàng)建自動發(fā)現(xiàn)規(guī)則文件
[root@prometheus ~]# mkdir /usr/local/prometheus/sd_config
[root@prometheus ~]# vim /usr/local/prometheus/sd_config/discovery.yml
- targets:
- 192.168.88.5:9090
- 192.168.88.100:9100
- 192.168.88.100:9104
- 大概2分鐘之后,刷新target web頁面
配置web2接受Prometheus監(jiān)控
- 將web1的node exporter拷貝到web2
[root@web1 ~]# scp -r /usr/local/node_exporter 192.168.88.200:/usr/local/
[root@web1 ~]# scp /usr/lib/systemd/system/node_exporter.service 192.168.88.200:/usr/lib/systemd/system/
- 啟服務
[root@web2 ~]# systemctl daemon-reload
[root@web2 ~]# systemctl enable node_exporter.service --now
- 修改自動發(fā)現(xiàn)文件
[root@prometheus ~]# vim /usr/local/prometheus/sd_config/discovery.yml
- targets:
- 192.168.88.5:9090
- 192.168.88.100:9100
- 192.168.88.100:9104
- 192.168.88.200:9100
- 大概2分鐘之后,刷新target web頁面
- 在Grafana上查看結(jié)果
Alertmanager
概述
- Prometheus服務器中的告警規(guī)則向Alertmanager發(fā)送告警。然后,Alertmanager管理這些告警,包括靜默、抑制、分組以及通過電子郵件、即時消息系統(tǒng)和聊天平臺等方法發(fā)出通知。
-
設(shè)置告警和通知的主要步驟是:
- 設(shè)置和配置Alertmanager
- 配置Prometheus與Alertmanager對接
- 在普羅米修斯中創(chuàng)建告警規(guī)則
-
在Prometheus中一條告警規(guī)則主要由以下幾部分組成:
- 告警名稱:用戶需要為告警規(guī)則命名
- 告警規(guī)則:告警規(guī)則實際上主要由PromQL進行定義,其實際意義是當表達式(PromQL)查詢結(jié)果持續(xù)多長時間(During)后出發(fā)告警
Alertmanager特性
- Alertmanager處理客戶端應用程序(如Prometheus服務器)發(fā)送的警報。它負責重復數(shù)據(jù)刪除、分組,并將其路由到正確的接收方集成
- 分組:分組將性質(zhì)相似的警報分類到單個通知中。這在較大的停機期間特別有用,此時許多系統(tǒng)同時發(fā)生故障,數(shù)百到數(shù)千個警報可能同時發(fā)出。
- 抑制:抑制是當某一告警發(fā)出后,可以停止重復發(fā)送由此告警引發(fā)的其它告警的機制。
- 靜默提供了一個簡單的機制可以快速根據(jù)標簽對告警進行靜默處理。如果接收到的告警符合靜默的配置, Alertmanager則不會發(fā)送告警通知。靜默設(shè)置需要在Alertmanager的Web頁面上進行設(shè)置。
部署Alertmanager
部署
- 解壓即部署
# 1. 解壓
[root@prometheus ~]# cd prometheus_soft/
[root@prometheus prometheus_soft]# tar xf alertmanager-0.25.0.linux-amd64.tar.gz
[root@prometheus prometheus_soft]# mv alertmanager-0.25.0.linux-amd64 /usr/local/alertmanager
# 2. 編寫服務文件并啟動
[root@prometheus prometheus_soft]# vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager System
[Service]
ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
[root@prometheus ~]# systemctl daemon-reload
[root@prometheus ~]# systemctl enable alertmanager.service --now
- 訪問http://192.168.88.5:9093可以訪問web配置頁面
配置文件
-
Alertmanager的配置主要包含兩個部分:路由(route)以及接收器(receivers)。所有的告警信息都會從配置中的頂級路由(route)進入路由樹,根據(jù)路由規(guī)則將告警信息發(fā)送給相應的接收器。
-
在Alertmanager中可以定義一組接收器,比如可以按照角色(比如系統(tǒng)運維,數(shù)據(jù)庫管理員)來劃分多個接收器。接收器可以關(guān)聯(lián)郵件,Slack以及其它方式接收告警信息。
-
目前配置文件中只設(shè)置了一個頂級路由route并且定義的接收器為default-receiver。因此,所有的告警都會發(fā)送給default-receiver。
-
因此在Alertmanager配置中一般會包含以下幾個主要部分:
- 全局配置(global):用于定義一些全局的公共參數(shù),如全局的SMTP配置
- 模板(templates):用于定義告警通知時的模板,如HTML模板,郵件模板等
- 告警路由(route):根據(jù)標簽匹配,確定當前告警應該如何處理
- 接收器(receivers):接收器是一個抽象的概念,它可以是一個郵箱也可以是微信,Slack或者Webhook 等,接收器一般配合告警路由使用
- 抑制規(guī)則(inhibit_rules):合理設(shè)置抑制規(guī)則可以減少垃圾告警的產(chǎn)生
Prometheus與Alertmanager對接
- 編輯Prometheus配置文件,修改alerting配置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...略...
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 - localhost:9093
...略...
[root@prometheus ~]# systemctl restart prometheus.service
- 訪問:http://192.168.88.5:9090/config,查看配置是否生效
配置Alertmanager通過郵件發(fā)送告警
# 1. 備份配置文件
[root@prometheus ~]# cp /usr/local/alertmanager/alertmanager.yml ~
# 2. 修改配置文件
[root@prometheus ~]# vim /usr/local/alertmanager/alertmanager.yml
global:
smtp_from: 'zzg@tedu.cn' # 發(fā)件人地址
smtp_smarthost: 'localhost:25' # 郵件服務器地址
smtp_require_tls: false # 是否使用TLS安全連接
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'default-receiver' # 接收器
receivers:
- name: 'default-receiver' # 配置接收器為郵件
email_configs:
- to: 'root@localhost.localdomain'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
# 3. 定義告警規(guī)則
[root@prometheus ~]# mkdir /usr/local/prometheus/rules
[root@prometheus ~]# vim /usr/local/prometheus/rules/hoststats-alert.rules
groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: warn
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
- alert: hostMemUsageAlert
expr: (node_memory_MemTotal - node_memory_MemAvailable)/node_memory_MemTotal > 0.85
for: 1m
labels:
severity: warn
annotations:
summary: "Instance {{ $labels.instance }} MEM usgae high"
# 4. 在Prometheus中聲明規(guī)則文件位置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...略...
15 rule_files:
16 - /usr/local/prometheus/rules/*.rules
...略...
# 5. 重啟服務
[root@prometheus ~]# systemctl restart alertmanager.service
[root@prometheus ~]# systemctl restart prometheus.service
# 6. 安裝并啟動郵件服務
[root@prometheus ~]# yum install -y postfix mailx
[root@prometheus ~]# systemctl enable postfix --now
- 查看加載的規(guī)則文件
- 測試告警。
# 1. 將web1關(guān)機
[root@web1 ~]# shutdown -h now
# 2. 查看郵件
[root@prometheus ~]# mail
>N 1 zzg@tedu.cn Sun Jan 1 18:59 227/10404 "[FIRING:1] InstanceDown (192.168.88.200:9100 prometheus warn)"
將告警郵件內(nèi)容從【<!DOCTYPE ...
】這一行到【</html>
】復制,粘貼到一個文件中,如文件名為alert.html
,用firefox打開,可以得到以下頁面:
文章來源:http://www.zghlxwxcb.cn/news/detail-831949.html
- 查看Alertmanager
文章來源地址http://www.zghlxwxcb.cn/news/detail-831949.html
到了這里,關(guān)于Prometheus服務器、Prometheus被監(jiān)控端、Grafana、監(jiān)控MySQL數(shù)據(jù)庫、自動發(fā)現(xiàn)概述、配置自動發(fā)現(xiàn)、Alertmanager的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!