Prometheus+Grafana監(jiān)控安裝及配置JVM實(shí)現(xiàn)企業(yè)微信告警

背景

本人Java開(kāi)發(fā)工程師一枚,主攻后端,需要搭建一套Prometheus+Grafana的監(jiān)控系統(tǒng),采用企業(yè)微信告警通知。在網(wǎng)上各種查閱資料的同時(shí),發(fā)現(xiàn)很多資料都大致相通且不完整,踩坑無(wú)數(shù),經(jīng)過(guò)多日鉆研后,最終完成了整個(gè)搭建任務(wù),特此記錄下整個(gè)安裝操作過(guò)程,希望能幫助各位。同時(shí)也請(qǐng)各位大神指導(dǎo)并提出意見(jiàn),在此只能傻瓜式的記錄下操作過(guò)程,如果有幸有哪位運(yùn)維大神看到,還請(qǐng)指正不足之處,感激不盡[抱拳]

一、Prometheus下載安裝

Promethus官網(wǎng)下載地址:https://prometheus.io/download/

image.png

Xshell連接服務(wù)器依次執(zhí)行以下命令:

進(jìn)入local目錄下

cd /usr/local

上傳下載好的文件包prometheus-2.36.2.linux-amd64.tar.gz (輸入以下命令后回車)

rz

解壓文件

tar -zxvf prometheus-2.36.2.linux-amd64.tar.gz

將解壓后的文件夾重命名為prometheus

mv prometheus-2.36.2.linux-amd64 /usr/local/prometheus

進(jìn)入prometheus目錄下

cd prometheus/

編輯配置文件

vim prometheus.yml

追加以下配置 (注意格式、注意修改自己的ip)

- job_name: 'mysql'
  static_configs:
  - targets: ['自己的ip:9104']

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc → :wq! → 回車

校驗(yàn)修改后的配置文件格式是否正確

./promtool check config prometheus.yml

校驗(yàn)配置文件正常結(jié)果展示(非命令操作)

SUCCESS: prometheus.yml is valid prometheus config file syntax

封裝Prometheus啟動(dòng)文件(輸入以下命令后回車)

vim start.sh

輸入以下內(nèi)容

nohup ./prometheus --config.file=prometheus.yml &

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc → :wq! → 回車

給啟動(dòng)文件執(zhí)行權(quán)限(輸入以下命令后回車)

chmod +x start.sh 

啟動(dòng)Prometheus

./start.sh

二、mysqld_exporter下載安裝(mysql監(jiān)控插件)

mysqld_exporter插件官網(wǎng)下載地址:https://prometheus.io/download/

image.png

Xshell連接服務(wù)器依次執(zhí)行以下命令:
進(jìn)入local目錄下

cd /usr/local

上傳下載好的文件包mysqld_exporter-0.12.1.linux-amd64.tar.gz(輸入以下命令后回車)

rz

解壓文件

tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz

將解壓后的文件夾重命名為mysqld_exporter

mv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter

登錄mysql的root賬戶(回車后輸入密碼,此操作需在已安裝mysql的前提下執(zhí)行)

mysql -uroot -p

設(shè)置mysql密碼策略:密碼長(zhǎng)度為6

set global validate_password_length=6;

創(chuàng)建用戶名為my的賬戶 密碼為Abc@12 (此密碼必須根據(jù)上邊設(shè)置的策略長(zhǎng)度為6,否則重新設(shè)置策略)

CREATE USER 'my'@'%' IDENTIFIED BY 'Abc@12' WITH MAX_USER_CONNECTIONS 3;

設(shè)置my賬戶的權(quán)限

GRANT ALL PRIVILEGES ON *.* TO 'my'@'%' IDENTIFIED BY 'Abc@12';

刷新權(quán)限

flush privileges;

退出mysql數(shù)據(jù)庫(kù)編輯 (輸入exit后點(diǎn)擊回車)

exit → 回車

進(jìn)入mysqld_exporter目錄下

cd mysqld_exporter

創(chuàng)建配置文件my.cnf

vim my.cnf

輸入以下內(nèi)容 (注意修改自己的ip,host、port為mysql鏈接,user、password為mysql的賬號(hào)密碼 ) 復(fù)制粘貼命令為Shift+Insert

[client]
host=自己的ip
port=3306
user=root
password=root

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc -> :wq! -> 回車

進(jìn)入/usr/lib/systemd/system/目錄下

cd /usr/lib/systemd/system/

創(chuàng)建mysqld_exporter啟動(dòng)腳本

vi mysqld_exporter.service

輸入以下內(nèi)容

[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io
Wants=network-online.target
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local /mysqld_exporter/my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc -> :wq! -> 回車

重新加載配置文件

systemctl daemon-reload

啟動(dòng)mysqld_exporter服務(wù) (停止命令:systemctl stop mysqld_exporter.service)

systemctl start mysqld_exporter.service

查看mysqld_exporter服務(wù)狀態(tài)

systemctl status mysqld_exporter.service

設(shè)置開(kāi)機(jī)啟動(dòng)

systemctl enable mysqld_exporter.service

訪問(wèn) IP:9104 地址 (下方圖示)


image.png

點(diǎn)擊 Metrics (下方圖示為安裝成功)


image.png

訪問(wèn)http://ip:9090/targets (如下圖示mysql監(jiān)控成功)

1658287753917.png

注:如沒(méi)有任何展示可重啟Prometheus(查看9090端口進(jìn)程,kill干掉進(jìn)程后,進(jìn)入prometheus目錄下執(zhí)行./start.sh)

三、Grafana 安裝

Grafana官網(wǎng)(版本8.3.3):https://grafana.com/grafana/download/8.3.3?pg=get&plcmt=selfmanaged-box1-cta1

image.png

Xshell連接服務(wù)器依次執(zhí)行以下命令:
進(jìn)入local目錄下

cd /usr/local

執(zhí)行下載命令,等待下載完成

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.3-1.x86_64.rpm

執(zhí)行安裝

sudo yum install grafana-enterprise-8.3.3-1.x86_64.rpm

進(jìn)入/etc/grafana目錄下

cd /etc/grafana

編輯grafana.ini配置文件

vim grafana.ini

修改以下內(nèi)容

data目錄位置配置:
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = /opt/grafana/data

# Temporary files in `data` directory older than given duration will be removed
temp_data_lifetime = 240h

# Directory where grafana can store logs
logs = /opt/grafana/logs

database配置:
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.

# Either "mysql", "postgres" or "sqlite3", it's your choice
type = mysql
host = 自己的ip:3306
name = grafana
user = root
# If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
password = root

smpt配置:
[smtp]
;enabled = false
;host = smtphz.qiye.163.com
;user = 發(fā)送郵件賬號(hào)
# If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
;password = 發(fā)送郵件賬號(hào)密碼
;cert_file =
;key_file =
;skip_verify = false
;from_address = admin@grafana.localhost
;from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS

[emails]
;welcome_email_on_sign_up = false
;templates_pattern = emails/*.html, emails/*.txt
;content_types = text/html

啟動(dòng)Grafana服務(wù)

systemctl restart grafana-server.service

設(shè)置開(kāi)機(jī)啟動(dòng)grafana-server

systemctl enable grafana-server.service

瀏覽器訪問(wèn) IP:3000 默認(rèn)用戶密碼都為admin


image.png
image.png

配置prometheus 數(shù)據(jù)源

image.png
image.png
image.png
image.png

導(dǎo)入mysql dashboards

image.png

image.png

四、java項(xiàng)目監(jiān)控 & 企業(yè)微信告警

Prometheus官網(wǎng)下載alertmanager:https://prometheus.io/download/

image.png

Xshell連接服務(wù)器依次執(zhí)行以下命令:
進(jìn)入local目錄下

cd /usr/local

上傳下載好的安裝包alertmanager-0.24.0.linux-amd64.tar.gz(輸入以下命令后回車)

rz

解壓

tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz

將解壓后的文件夾更名為alertmanager

mv alertmanager-0.24.0.linux-amd64 alertmanager

進(jìn)入alertmanager目錄下

cd alertmanager

創(chuàng)建grafana.yml配置文件

vim grafana.yml

輸入以下內(nèi)容 (獲取corp_id、agent_id、api_secret、to_party信息方式:http://www.itdecent.cn/p/5704622052de

global:
  resolve_timeout: 5m

templates:
- '/usr/local/alertmanager/wechat.tmpl'  #微信模板,同級(jí)目錄下wechat.tmpl

route:
  group_by: ['alertname']
  group_wait: 5s
  #同一組內(nèi)警報(bào),等待group_interval時(shí)間后,再繼續(xù)等待repeat_interval時(shí)間
  group_interval: 1m
  #當(dāng)group_interval時(shí)間到后,再等待repeat_interval時(shí)間后,才進(jìn)行報(bào)警
  repeat_interval: 5m
  receiver: 'wechat'
receivers:
  - name: 'wechat'
    wechat_configs:
    - corp_id: 'xxxxxxxxxxxxx'  #企業(yè)微信ID
      agent_id: 'xxxxxxx'  #應(yīng)用ID
      api_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #應(yīng)用密碼
      to_party: 'xxxxxx' #部門id(部門所屬人員均可接收到)   單個(gè)賬號(hào)發(fā)送: to_user: 'xxxxx' #多人“,”逗號(hào)隔開(kāi)
      send_resolved: true

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc -> :wq! -> 回車

在/usr/local/alertmanager/創(chuàng)建上面配置文件中使用到的wechat.tmpl模板

vim wechat.tmpl

輸入以下內(nèi)容

{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========異常告警==========
告警類型: {{ $alert.Labels.alertname }}
告警級(jí)別: {{ $alert.Labels.severity }}
告警詳情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障時(shí)間: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
實(shí)例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空間: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
節(jié)點(diǎn)信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
實(shí)例名稱: {{ $alert.Labels.pod }}
{{- end }}
============END============
{{- end }}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========異?;謴?fù)==========
告警類型: {{ $alert.Labels.alertname }}
告警級(jí)別: {{ $alert.Labels.severity }}
告警詳情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障時(shí)間: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢復(fù)時(shí)間: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
實(shí)例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空間: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
節(jié)點(diǎn)信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
實(shí)例名稱: {{ $alert.Labels.pod }}
{{- end }}
============END============
{{- end }}
{{- end }}
{{- end }}
{{- end }}

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc -> :wq! -> 回車

在當(dāng)前目錄下(/usr/local/alertmanager/)封裝Grafana啟動(dòng)文件(輸入以下命令后回車)

vim start.sh

輸入以下內(nèi)容

nohup ./alertmanager --config.file=grafana.yml --storage.path=data/ --log.level=debug &

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc → :wq! → 回車

給啟動(dòng)文件執(zhí)行權(quán)限(輸入以下命令后回車)

chmod +x start.sh 

啟動(dòng)Grafana

./start.sh

訪問(wèn) IP:9093/#/status 以下圖示為成功


1.png

五、node_exporter下載安裝(CPU監(jiān)控插件)

Prometheus官網(wǎng)下載node_exporter:https://prometheus.io/download/

image.png

Xshell連接服務(wù)器依次執(zhí)行以下命令:
進(jìn)入local目錄下

cd /usr/local

上傳下載好的安裝包node_exporter-1.3.1.linux-amd64.tar.gz(輸入以下命令后回車)

rz

解壓

tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz

將解壓后的文件夾更名為node_exporter

mv node_exporter-1.3.1.linux-amd64.tar.gz node_exporter

進(jìn)入node_exporter目錄下

cd node_exporter

在當(dāng)前目錄下(/usr/local/node_exporter/)封裝node_exporter啟動(dòng)文件(輸入以下命令后回車)

vim start.sh

輸入以下內(nèi)容

nohup ./node_exporter & > node.log

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc → :wq! → 回車

給啟動(dòng)文件執(zhí)行權(quán)限(輸入以下命令后回車)

chmod +x start.sh 

啟動(dòng)node_exporter

./start.sh

訪問(wèn) IP:9100/metrics 以下圖示為成功


image.png

六、添加JMX配置,并修改項(xiàng)目啟動(dòng)方式添加JMX(所有服務(wù)器運(yùn)行;端口可變,這里使用3010)

Xshell連接服務(wù)器依次執(zhí)行以下命令:
進(jìn)入local目錄下

cd /usr/local

創(chuàng)建jmx文件夾

mkdir jmx

進(jìn)入jmx文件夾下

cd jmx

下載jmx_prometheus_javaagent-0.12.0.jar文件包

wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar

創(chuàng)建配置文件(輸入以下命令后回車)

vim config.yml

輸入以下內(nèi)容

lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:
  - pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
    name: os_$1_bytes
    type: GAUGE
    attrNameSnakeCase: true
  - pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
    name: os_$1
    type: GAUGE

強(qiáng)制保存并退出(點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc -> :wq! -> 回車

創(chuàng)建java文件夾

mkdir java

進(jìn)入java文件夾

cd java

上傳要運(yùn)行的java項(xiàng)目jar包(輸入以下命令后回車,需先安裝java環(huán)境jdk)

rz

在當(dāng)前目錄下( /usr/local/jmx/java/)封裝java項(xiàng)目啟動(dòng)文件(輸入以下命令后回車)

vim start.sh

輸入以下內(nèi)容(注意修改jar包名稱, 注意3010為jmx_prometheus_javaagent端口號(hào),非項(xiàng)目端口號(hào))

nohup java -javaagent:/usr/local/jmx/jmx_prometheus_javaagent-0.12.0.jar=3010:/usr/local/jmx/config.yml -Xms100m -Xmx1024m -Dfile.encoding=utf-8 -jar /usr/local/jmx/java/上傳的java項(xiàng)目包名稱.jar

強(qiáng)制保存并退出 (點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc → :wq! → 回車

給啟動(dòng)文件執(zhí)行權(quán)限(輸入以下命令后回車)

chmod +x start.sh 

啟動(dòng)項(xiàng)目

./start.sh

訪問(wèn) IP::3010 以下圖示為成功


image.png

七、配置node_exporter和jmx到Prometheus并啟動(dòng)

進(jìn)入到prometheus目錄下

cd /usr/local/prometheus

編輯配置文件

vim prometheus.yml

追加以下內(nèi)容(注意修改自己的ip)

- job_name: 'node'
  static_configs:
  - targets: ['自己的ip:9100']

- job_name: 'java'
  static_configs:
  - targets: ['自己的ip:3010']

強(qiáng)制保存并退出(點(diǎn)擊鍵盤Esc按鍵 → 輸入命令 :wq! → 點(diǎn)擊回車)

Esc -> :wq! -> 回車

查看prometheus進(jìn)程(回車后可查看進(jìn)程的PID。lsof命令可能需要安裝,百度查看下怎樣安裝很簡(jiǎn)單。)

lsof -i:9090

干掉進(jìn)程(注意修改進(jìn)程的PID)

kill 進(jìn)程的PID

在當(dāng)前目錄下(/usr/local/prometheus)啟動(dòng)Prometheus

./start.sh

訪問(wèn) IP:9090 以下圖示為node_exporter和jmx配置成功(輸入 JVM 和 node查看)


image.png
image.png

八、Grafana配置企業(yè)微信報(bào)警

1658298122929.png
1658298027911.png
2.png
3.png
1658298232710.png
image.png
image.png
image.png

九、測(cè)試消息接收

在企業(yè)微信【應(yīng)用管理 → 引用】添加信任ip地址


1.jpg

查看運(yùn)行的java進(jìn)程(上邊設(shè)置的端口是3010) 記錄進(jìn)程PID

lsof -i:3010

干掉進(jìn)程

kill 進(jìn)程PID

企業(yè)微信接收消息下方圖示(可能會(huì)有延遲,幾分鐘或十幾分鐘不等)


1658299868964.png

進(jìn)入jar目錄下

cd /usr/local/jmx/java/

再次啟動(dòng)項(xiàng)目

./start.sh

企業(yè)微信收到以下信息


1658300487042.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容