Prometheus+Grafana监控安装及配置JVM实现企业微信告警

背景

本人Java开发工程师一枚,主攻后端,需要搭建一套Prometheus+Grafana的监控系统,采用企业微信告警通知。在网上各种查阅资料的同时,发现很多资料都大致相通且不完整,踩坑无数,经过多日钻研后,最终完成了整个搭建任务,特此记录下整个安装操作过程,希望能帮助各位。同时也请各位大神指导并提出意见,在此只能傻瓜式的记录下操作过程,如果有幸有哪位运维大神看到,还请指正不足之处,感激不尽[抱拳]

一、Prometheus下载安装

Promethus官网下载地址:https://prometheus.io/download/

image.png

Xshell连接服务器依次执行以下命令:

进入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

进入prometheus目录下

cd prometheus/

编辑配置文件

vim prometheus.yml

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

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

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc → :wq! → 回车

校验修改后的配置文件格式是否正确

./promtool check config prometheus.yml

校验配置文件正常结果展示(非命令操作)

SUCCESS: prometheus.yml is valid prometheus config file syntax

封装Prometheus启动文件(输入以下命令后回车)

vim start.sh

输入以下内容

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

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc → :wq! → 回车

给启动文件执行权限(输入以下命令后回车)

chmod +x start.sh 

启动Prometheus

./start.sh

二、mysqld_exporter下载安装(mysql监控插件)

mysqld_exporter插件官网下载地址:https://prometheus.io/download/

image.png

Xshell连接服务器依次执行以下命令:
进入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的前提下执行)

mysql -uroot -p

设置mysql密码策略:密码长度为6

set global validate_password_length=6;

创建用户名为my的账户 密码为Abc@12 (此密码必须根据上边设置的策略长度为6,否则重新设置策略)

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

设置my账户的权限

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

刷新权限

flush privileges;

退出mysql数据库编辑 (输入exit后点击回车)

exit → 回车

进入mysqld_exporter目录下

cd mysqld_exporter

创建配置文件my.cnf

vim my.cnf

输入以下内容 (注意修改自己的ip,host、port为mysql链接,user、password为mysql的账号密码 ) 复制粘贴命令为Shift+Insert

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

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc -> :wq! -> 回车

进入/usr/lib/systemd/system/目录下

cd /usr/lib/systemd/system/

创建mysqld_exporter启动脚本

vi mysqld_exporter.service

输入以下内容

[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

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc -> :wq! -> 回车

重新加载配置文件

systemctl daemon-reload

启动mysqld_exporter服务 (停止命令:systemctl stop mysqld_exporter.service)

systemctl start mysqld_exporter.service

查看mysqld_exporter服务状态

systemctl status mysqld_exporter.service

设置开机启动

systemctl enable mysqld_exporter.service

访问 IP:9104 地址 (下方图示)


image.png

点击 Metrics (下方图示为安装成功)


image.png

访问http://ip:9090/targets (如下图示mysql监控成功)

1658287753917.png

注:如没有任何展示可重启Prometheus(查看9090端口进程,kill干掉进程后,进入prometheus目录下执行./start.sh)

三、Grafana 安装

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

image.png

Xshell连接服务器依次执行以下命令:
进入local目录下

cd /usr/local

执行下载命令,等待下载完成

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

执行安装

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

进入/etc/grafana目录下

cd /etc/grafana

编辑grafana.ini配置文件

vim grafana.ini

修改以下内容

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 = 发送邮件账号
# If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
;password = 发送邮件账号密码
;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

启动Grafana服务

systemctl restart grafana-server.service

设置开机启动grafana-server

systemctl enable grafana-server.service

浏览器访问 IP:3000 默认用户密码都为admin


image.png
image.png

配置prometheus 数据源

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

导入mysql dashboards

image.png

image.png

四、java项目监控 & 企业微信告警

Prometheus官网下载alertmanager:https://prometheus.io/download/

image.png

Xshell连接服务器依次执行以下命令:
进入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

进入alertmanager目录下

cd alertmanager

创建grafana.yml配置文件

vim grafana.yml

输入以下内容 (获取corp_id、agent_id、api_secret、to_party信息方式:https://www.jianshu.com/p/5704622052de

global:
  resolve_timeout: 5m

templates:
- '/usr/local/alertmanager/wechat.tmpl'  #微信模板,同级目录下wechat.tmpl

route:
  group_by: ['alertname']
  group_wait: 5s
  #同一组内警报,等待group_interval时间后,再继续等待repeat_interval时间
  group_interval: 1m
  #当group_interval时间到后,再等待repeat_interval时间后,才进行报警
  repeat_interval: 5m
  receiver: 'wechat'
receivers:
  - name: 'wechat'
    wechat_configs:
    - corp_id: 'xxxxxxxxxxxxx'  #企业微信ID
      agent_id: 'xxxxxxx'  #应用ID
      api_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #应用密码
      to_party: 'xxxxxx' #部门id(部门所属人员均可接收到)   单个账号发送: to_user: 'xxxxx' #多人“,”逗号隔开
      send_resolved: true

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc -> :wq! -> 回车

在/usr/local/alertmanager/创建上面配置文件中使用到的wechat.tmpl模板

vim wechat.tmpl

输入以下内容

{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========异常告警==========
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
实例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空间: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
节点信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
实例名称: {{ $alert.Labels.pod }}
{{- end }}
============END============
{{- end }}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========异常恢复==========
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
实例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空间: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
节点信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
实例名称: {{ $alert.Labels.pod }}
{{- end }}
============END============
{{- end }}
{{- end }}
{{- end }}
{{- end }}

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc -> :wq! -> 回车

在当前目录下(/usr/local/alertmanager/)封装Grafana启动文件(输入以下命令后回车)

vim start.sh

输入以下内容

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

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc → :wq! → 回车

给启动文件执行权限(输入以下命令后回车)

chmod +x start.sh 

启动Grafana

./start.sh

访问 IP:9093/#/status 以下图示为成功


1.png

五、node_exporter下载安装(CPU监控插件)

Prometheus官网下载node_exporter:https://prometheus.io/download/

image.png

Xshell连接服务器依次执行以下命令:
进入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

进入node_exporter目录下

cd node_exporter

在当前目录下(/usr/local/node_exporter/)封装node_exporter启动文件(输入以下命令后回车)

vim start.sh

输入以下内容

nohup ./node_exporter & > node.log

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc → :wq! → 回车

给启动文件执行权限(输入以下命令后回车)

chmod +x start.sh 

启动node_exporter

./start.sh

访问 IP:9100/metrics 以下图示为成功


image.png

六、添加JMX配置,并修改项目启动方式添加JMX(所有服务器运行;端口可变,这里使用3010)

Xshell连接服务器依次执行以下命令:
进入local目录下

cd /usr/local

创建jmx文件夹

mkdir jmx

进入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

创建配置文件(输入以下命令后回车)

vim config.yml

输入以下内容

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

强制保存并退出(点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc -> :wq! -> 回车

创建java文件夹

mkdir java

进入java文件夹

cd java

上传要运行的java项目jar包(输入以下命令后回车,需先安装java环境jdk)

rz

在当前目录下( /usr/local/jmx/java/)封装java项目启动文件(输入以下命令后回车)

vim start.sh

输入以下内容(注意修改jar包名称, 注意3010为jmx_prometheus_javaagent端口号,非项目端口号)

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项目包名称.jar

强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc → :wq! → 回车

给启动文件执行权限(输入以下命令后回车)

chmod +x start.sh 

启动项目

./start.sh

访问 IP::3010 以下图示为成功


image.png

七、配置node_exporter和jmx到Prometheus并启动

进入到prometheus目录下

cd /usr/local/prometheus

编辑配置文件

vim prometheus.yml

追加以下内容(注意修改自己的ip)

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

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

强制保存并退出(点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

Esc -> :wq! -> 回车

查看prometheus进程(回车后可查看进程的PID。lsof命令可能需要安装,百度查看下怎样安装很简单。)

lsof -i:9090

干掉进程(注意修改进程的PID)

kill 进程的PID

在当前目录下(/usr/local/prometheus)启动Prometheus

./start.sh

访问 IP:9090 以下图示为node_exporter和jmx配置成功(输入 JVM 和 node查看)


image.png
image.png

八、Grafana配置企业微信报警

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

九、测试消息接收

在企业微信【应用管理 → 引用】添加信任ip地址


1.jpg

查看运行的java进程(上边设置的端口是3010) 记录进程PID

lsof -i:3010

干掉进程

kill 进程PID

企业微信接收消息下方图示(可能会有延迟,几分钟或十几分钟不等)


1658299868964.png

进入jar目录下

cd /usr/local/jmx/java/

再次启动项目

./start.sh

企业微信收到以下信息


1658300487042.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容