Prometheus + Grafana,開源監(jiān)控神器!
Prometheus介紹
Prometheus是一個(gè)開源系統(tǒng)監(jiān)控和警報(bào)工具包,用于收集和聚合指標(biāo)作為時(shí)間序列數(shù)據(jù),即將指標(biāo)信息、記錄的時(shí)間戳以及稱為標(biāo)簽的可選鍵值對(duì)一起存儲(chǔ),詳細(xì)介紹請(qǐng)查看官方文檔
Prometheus及其組件安裝
因Prometheus組件基本都是用Go編寫的,所以更易于構(gòu)建和部署,解壓文件后,進(jìn)入相應(yīng)目錄運(yùn)行二進(jìn)制文件即可
Prometheus安裝
下載并解壓prometheus到監(jiān)控服務(wù)器
wget https://github.com/prometheus/prometheus/releases/download/v2.32.1/prometheus-2.32.1.linux-amd64.tar.gz # 在線下載資源包,也可直接訪問地址在瀏覽器下載后上傳至服務(wù)器
tar -xzvf prometheus-2.32.1.linux-amd64.tar.gz -C Program # 解壓到指定目錄
mv Program/prometheus-2.32.1.linux-amd64 Program/prometheus-2.32.1 # 重命名
運(yùn)行prometheus
# 運(yùn)行prometheus
cd prometheus-2.32.1 # 進(jìn)入解壓并重命名后的目錄
./prometheus # 運(yùn)行prometheus
./prometheus --config.file=prometheus.yml # 或者指定配置文件運(yùn)行
# 以上兩種都是前臺(tái)運(yùn)行,要想執(zhí)行其它操作需先結(jié)束prometheus,所以可以使用nohup命令使其后臺(tái)運(yùn)行
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &
也可以配置service文件,使用systemctl命令管理應(yīng)用,執(zhí)行命令vim /usr/lib/systemd/system/prometheus.service,復(fù)制并修改以下信息,寫入prometheus.service文件中
[Unit]
Description=Prometheus
# 先啟動(dòng)network.target
After=network.target
[Service]
# 定義啟動(dòng)默認(rèn)進(jìn)程,即主進(jìn)程
Type=simple
# 以root用戶啟動(dòng)
User=root
# 啟動(dòng)當(dāng)前服務(wù)的命令,注意修改路徑和參數(shù)
ExecStart=/root/Program/prometheus-2.32.1/prometheus --config.file=/root/Program/prometheus-2.32.1/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
重新加載配置文件systemctl daemon-reload,最后啟動(dòng)程序systemctl start prometheus.service,查看是否啟動(dòng)成功systemctl status prometheus.service,若未關(guān)閉SELinux使用service文件方式會(huì)啟動(dòng)失敗,具體失敗原因請(qǐng)查看日志報(bào)錯(cuò)信息,查看日志命令:journalctl -xe
配置正確則瀏覽器可成功訪問到9090端口的地址,訪問http://192.166.66.24:9090/出現(xiàn)下圖界面,點(diǎn)擊【Status】→【Targets】,prometheus應(yīng)處于UP狀態(tài)

PromQL介紹
PromQL是Prometheus內(nèi)置的數(shù)據(jù)查詢語言,支持對(duì)時(shí)間序列數(shù)據(jù)豐富的查詢,聚合以及邏輯運(yùn)算能力。廣泛應(yīng)用在Prometheus的日常應(yīng)用當(dāng)中,包括對(duì)數(shù)據(jù)查詢、可視化、告警處理當(dāng)中,下文介紹告警、Grafana都會(huì)用到PromQL語句。

mysqld_exporter組件安裝
mysqld_exporter是用于監(jiān)控MySQL服務(wù)器指標(biāo)的,比如:連接數(shù)、QPS等信息,同樣安裝在被監(jiān)控服務(wù)器上,前提肯定是被監(jiān)控服務(wù)器上已安裝MySQL,然后開始運(yùn)行mysqld_exporter,步驟如下:
1.下載并解壓mysqld_exporter到被監(jiān)控服務(wù)器
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz # 在線下載資源包,也可直接訪問地址在瀏覽器下載后上傳至被測服務(wù)器
tar -xzvf mysqld_exporter-0.13.0.linux-amd64.tar.gz # 解壓壓縮包
mv mysqld_exporter-0.13.0.linux-amd64 mysqld_exporter-0.13.0 # 重命名
2.創(chuàng)建文件vim .my.cnf,保存已安裝MySQL的賬號(hào)密碼,格式如下:
[client]
user=root
password=123456
3.進(jìn)入prometheus-2.32.1目錄,在prometheus.yml文件中添加MySQL相關(guān)信息
# 在prometheus.yml文件中添加如下信息,指明監(jiān)控目標(biāo)
- job_name: mysqld_exporter
static_configs:
- targets: ["192.166.66.22:9104"]
4.運(yùn)行mysqld_exporter
# 進(jìn)入pushgateway-1.4.2目錄,啟動(dòng)mysqld_exporter
./pushgateway --config.my-cnf=/root/mysqld_exporter-0.13.0/.my.cnf # ←前臺(tái)運(yùn)行,↓或者后臺(tái)運(yùn)行
nohup ./mysqld_exporter --config.my-cnf=/root/mysqld_exporter-0.13.0/.my.cnf > mysqld_exporter.log 2>&1 &
# 也可以使用service文件啟動(dòng),參考上文service文件配置
還可以使用supervisor管理進(jìn)程的方式,有關(guān)supervisor的使用網(wǎng)上有很多資料,請(qǐng)自行查找,此處不做過多介紹,步驟如下:
安裝supervisor:yum install supervisor -y
啟動(dòng)并設(shè)為開機(jī)自啟:systemctl start supervisord.service && systemctl enable supervisord.service
配置啟動(dòng)文件,自建配置文件通常放在/etc/supervisord.d/目錄,創(chuàng)建ini格式的文件vim mysqld_exporter.ini,填寫如下信息
# 名稱
[program:mysqld_exporter]
# 以root用戶啟動(dòng)
user=root
# 啟動(dòng)mysqld_exporter的命令
command=/root/mysqld_exporter-0.13.0/mysqld_exporter --config.my-cnf=/root/mysqld_exporter-0.13.0/.my.cnf
# 設(shè)為自啟,隨supervisor啟動(dòng),后續(xù)只需關(guān)心supervisor的狀態(tài)
autostart=true
# 設(shè)為自動(dòng)重啟,隨supervisor而重啟
autorestart=true
# 日志保存路徑
stdout_logfile=/root/mysqld_exporter-0.13.0/mysqld_exporter.log
# 日志文件保留個(gè)數(shù),等于0則不備份
stdout_logfile_backups=10
最后重啟supervisor:systemctl restart supervisord.service,查看mysqld_exporter的狀態(tài),應(yīng)處于UP狀態(tài),訪問http://192.166.66.22:9104/metrics也能獲取MySQL的指標(biāo),數(shù)據(jù)中有如下查詢語句相關(guān)的數(shù)據(jù)才是正確的

node_exporter組件安裝
node_exporter是用來收集服務(wù)器系統(tǒng)數(shù)據(jù)的,監(jiān)控服務(wù)器CPU、內(nèi)存、磁盤、等信息,安裝在被監(jiān)控服務(wù)器上,以監(jiān)控兩臺(tái)服務(wù)器為例,將node_exporter壓縮包上傳至兩臺(tái)服務(wù)器后解壓并重命名為node_exporter-1.3.1
1.下載并解壓node_exporter到被監(jiān)控服務(wù)器,多臺(tái)服務(wù)器則都要下載安裝
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz # 在線下載資源包,也可直接訪問地址在瀏覽器下載后上傳至被測服務(wù)器
tar -xzvf node_exporter-1.3.1.linux-amd64.tar.gz -C Program # 解壓到指定目錄
mv Program/node_exporter-1.3.1.linux-amd64 Program/node_exporter-1.3.1 # 重命名
2.進(jìn)入prometheus-2.32.1目錄,在prometheus.yml文件中添加node相關(guān)信息
# 在prometheus.yml文件中添加如下信息,指明監(jiān)控目標(biāo)
- job_name: node_exporter
static_configs:
- targets: ["localhost:9100"]
labels: # 添加標(biāo)簽
nodename: node_24 # 為服務(wù)器添加標(biāo)簽名稱
- targets: ["192.166.66.22:9100"]
labels:
nodename: node_22
# 兩個(gè)服務(wù)器節(jié)點(diǎn)可以也寫一起,如下所示:
- job_name: node_exporter
static_configs:
- targets: ["localhost:9100","192.166.66.22:9100"]
3.運(yùn)行node_exporter
# 進(jìn)入node_exporter-1.3.1目錄,啟動(dòng)node_exporter
./node_exporter # 前臺(tái)運(yùn)行
nohup ./node_exporter --web.listen-address=":9100" > node_exporter.log 2>&1 & # 使用nohup命令后臺(tái)運(yùn)行
# 也可以使用service文件和supervisor方式啟動(dòng),具體參考上文配置
瀏覽器訪問Prometheus地址http://192.166.66.24:9090/,點(diǎn)擊【Status】→【Targets】,查看服務(wù)狀態(tài),全部處于UP狀態(tài)

alertmanager組件安裝
Alertmanager是一個(gè)告警管理組件,Prometheus發(fā)出告警分為兩步,首先,Prometheus按告警規(guī)則向Alertmanager發(fā)送警告,所以告警規(guī)則是在Prometheus上定義的,然后,由Alertmanager負(fù)責(zé)管理這些告警,比如把告警去重、分組、聚合等操作后通過郵件等方式將告警通知給對(duì)應(yīng)的負(fù)責(zé)人。簡單介紹一下,步驟如下:
1.下載并解壓alertmanager到監(jiān)控服務(wù)器
wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz # 在線下載資源包,也可直接訪問地址在瀏覽器下載后上傳至服務(wù)器
tar -xzvf alertmanager-0.23.0.linux-amd64.tar.gz -C Program # 解壓到指定目錄
mv alertmanager-0.23.0.linux-amd64 alertmanager-0.23.0 # 重命名
2.進(jìn)入alertmanager-0.23.0目錄,編輯alertmanager.yml文件,修改如下信息
global: # 全局配置,配置發(fā)送郵件的信息
smtp_smarthost: smtp.qq.com:465 # 騰訊郵箱服務(wù)器及端口
smtp_from: 1234567890@qq.com # 用于發(fā)送告警的郵箱
smtp_auth_username: 1234567890@qq.com # 登錄的郵箱名
smtp_auth_password: dydiacuvduanyqdi # 郵箱授權(quán)碼,請(qǐng)登錄用于發(fā)送的郵箱在設(shè)置→賬戶中開啟
smtp_require_tls: false # 不啟用TLS
route: # 路由組配置
group_by: ['alertname'] # 分組依據(jù),可分多個(gè)組
group_wait: 30s # 第一次滿足告警條件后等待多久發(fā)送郵件
group_interval: 50s # 出現(xiàn)新告警后等待多久發(fā)送郵件
repeat_interval: 2h # 若已經(jīng)成功發(fā)送郵件等待多久后再次發(fā)送
receiver: 'email' # 定義收件組名稱
receivers: # 收件組配置
- name: 'email'
email_configs:
- to: 987654321@qq.com # 收件人郵箱,可添加多個(gè)郵箱
……
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3.運(yùn)行alertmanager
# 進(jìn)入alertmanager-0.23.0目錄,啟動(dòng)node_exporter
./alertmanager --config.file=/root/Program/alertmanager-0.23.0/alertmanager.yml # 前臺(tái)運(yùn)行
nohup ./alertmanager --config.file=/root/Program/alertmanager-0.23.0/alertmanager.yml --cluster.advertise-address="0.0.0.0:9093" > alertmanager.yml.log 2>&1 & # 后臺(tái)運(yùn)行
# 同樣也可使用service文件和supervisor方式啟動(dòng),具體參考上文配置
在Prometheus的Web頁面,點(diǎn)擊【Status】→【Targets】,可以看到新增alertmanager服務(wù)并處于up狀態(tài)

4.修改prometheus-2.32.1目錄中的prometheus.yml文件
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # 取消注釋,將alertmanager改為IP或主機(jī)名
rule_files:
- "first_rules.yml" # 取消注釋
- "second_rules.yml" # 取消注釋,可直接把規(guī)則寫在一個(gè)yml文件中,此處分了兩個(gè),second調(diào)用first中的信息
scrape_configs:
………………忽略之前的配置信息,追加以下信息……………………
- job_name: alertmanager
static_configs:
- targets: ["localhost:9093"]
5.配置規(guī)則,在prometheus-2.32.1目錄下創(chuàng)建規(guī)則文件,若在其它目錄創(chuàng)建,則注意修改prometheus.yml中rules.yml路徑
創(chuàng)建first_rules.yml文件,vim first_rules.yml,添加一條規(guī)則,如下
groups:
- name: node_rules
rules:
- record: instance:node_load
expr: node_load1
創(chuàng)建second_rules.yml文件,vim second_rules.yml,添加如下信息
groups:
- name: node_alerts
rules:
- alert: system_load
expr: instance:node_load > 5
for: 2m
labels:
severity: warning
annotations:
summary: 主機(jī)【{{$labels.nodename}}】的2分鐘負(fù)載超出閾值,當(dāng)前為{{$value}}%
執(zhí)行命令./promtool check config prometheus.yml或./promtool check rules first_rules.yml檢查規(guī)則配置是否正確

重啟prometheus服務(wù)后,在Prometheus的Web頁面,點(diǎn)擊【Status】→【Rules】,可以看到配置的規(guī)則

6.使用Stress工具或其它壓測工具進(jìn)行負(fù)載測試,在Prometheus的Web告警頁面可看到狀態(tài)變化,滿足規(guī)則要求就會(huì)收到告警郵件

7.可自定義郵件格式,若郵件格式配置有誤則無法收到郵件,使用默認(rèn)郵件請(qǐng)忽略此步驟,步驟如下:
定義郵件格式及內(nèi)容,創(chuàng)建并進(jìn)入目錄mkdir template;cd template,創(chuàng)建文件vim mytemp.tmpl,填寫如下信息
{{ define "mytemp.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
********** <span style=color:red;font-size:36px;font-weight:bold;> 監(jiān)控告警 </span>**********<br>
<span style=font-size:20px;font-weight:bold;> 告警類型:</span> {{ $alert.Labels.alertname }} <br>
<span style=font-size:20px;font-weight:bold;> 告警級(jí)別:</span> {{ $alert.Labels.severity }} 級(jí) <br>
<span style=font-size:20px;font-weight:bold;> 故障主機(jī):</span> {{ $alert.Labels.instance }} <br>
<span style=font-size:20px;font-weight:bold;> 主機(jī)標(biāo)簽:</span> {{ $alert.Labels.nodename }} <br>
<span style=font-size:20px;font-weight:bold;> 告警內(nèi)容:</span> {{ $alert.Annotations.summary }} <br>
<span style=font-size:20px;font-weight:bold;> 故障時(shí)間:</span> {{ $alert.StartsAt.Local }}<br>
********** ~ 結(jié)束 ~ **********<br>
<br>
<br>
{{- end }}
{{- end }}
{{- end }}
使用自定義的郵件格式,編輯alertmanager.yml文件,添加如下信息
templates: # 配置自定義告警郵件格式地址
- '/root/Program/alertmanager-0.23.0/template/mytemp.tmpl'
receivers:
……忽略已配置信息……
html: '{{ template "mytemp.html" . }}' # 自定義使用的郵件模板和郵件標(biāo)題
headers: { Subject: "告警郵件:{{ .GroupLabels.SortedPairs.Values}}[{{.Status | toUpper}}:{{ .Alerts.Firing | len }}]" }
在alertmanager-0.23.0目錄,執(zhí)行命令./amtool check-config alertmanager.yml檢查配置是否正確

8.再次使用壓測工具,對(duì)系統(tǒng)進(jìn)行負(fù)載測試,滿足設(shè)定規(guī)則后就會(huì)收到自定義格式的告警郵件啦

Grafana介紹
Grafana 是一個(gè)開源的可視化分析平臺(tái),能夠?qū)?shù)據(jù)以非常美觀的圖形化方式展示出來,支持對(duì)來自多種數(shù)據(jù)源的數(shù)據(jù)進(jìn)行查詢、分析和可視化處理,詳細(xì)介紹請(qǐng)查看官方文檔
Grafana安裝
支持多平臺(tái)安裝,也可使用Docker安裝,以安裝到Centos8.3為例
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.3-1.x86_64.rpm # 下載Grafana
yum install grafana-enterprise-8.3.3-1.x86_64.rpm -y # 安裝Grafana
systemctl start grafana-server && systemctl enable grafana-server # 啟動(dòng)并設(shè)為開機(jī)自啟
Grafana默認(rèn)端口是3000,啟動(dòng)Grafana后瀏覽器訪問http://192.166.66.24:3000,默認(rèn)賬號(hào)密碼都是admin,首次登錄會(huì)讓修改密碼
Grafana使用方法
1.添加數(shù)據(jù)源
登錄成功后點(diǎn)擊設(shè)置圖標(biāo),默認(rèn)進(jìn)入數(shù)據(jù)源管理頁面,點(diǎn)擊【ADD data source】,選擇數(shù)據(jù)源Prometheus,填寫URL地址,其它項(xiàng)都可以默認(rèn),點(diǎn)擊【Save&test】

2.創(chuàng)建DashBoard
添加數(shù)據(jù)源之后,創(chuàng)建DashBoard,可自定義,官方也提供了很多的漂亮的儀表盤供選擇,所以直接導(dǎo)入即可使用,通過儀表盤ID或下載文件后導(dǎo)入
點(diǎn)擊進(jìn)入官方Dashboard,根據(jù)安裝的prometheus組件搜索關(guān)鍵字,比如:node、mysql,選擇喜歡的模板復(fù)制ID或下載文件
點(diǎn)擊加號(hào)圖標(biāo)→點(diǎn)擊【Import】→填寫模板ID→點(diǎn)擊【Load】→選擇數(shù)據(jù)源,其它項(xiàng)都可默認(rèn)→點(diǎn)擊【Imp