centos7下部署主机监控,mysql指标监控,(prometheus+grafana+node_exporter+mysqld_exporter+alertmanager)

2023-05-16

先解释一下这些组件都是干什么用的,

  1. 组件说明
  2. prometheus server 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以 及查询。
  3. exporter 简单说是采集端,通过 http 服务的形式保留一个 url 地址,prometheus server 通过 访问该 exporter 提供的 endpoint 端点,即可获取到需要采集的监控数据。
  4. AlertManager 在 prometheus 中,支持基于 PromQL 创建告警规则,如果满足定义的规则,则会产生一条 告警信息,进入 AlertManager 进行处理。可以集成邮件,微信或者通过 webhook 自定义报 警。
  5. (这里没用到pushgateway,但是做一个普及) Pushgateway 由于 Prometheus 数据采集采用 pull 方式进行设置的, 内置必须保证 prometheus server 和 对应的 exporter 必须通信,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转, 可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去,而 prometheus 采用 pull 方式拉取 pushgateway 中数据。

一、主机说明:

主机mysql120(后期做mysql从库现在不用管)
host:192.168.251.120
安装:prometheus,grafana,alertmanager,node_exporter,mysql,mysqld_exporter
主机mysql121(后期做mysql主库现在不用管)
host:192.168.251.121
安装:node_exporter,mysql,mysqld_exporter
接下来,先去mysql120安装prometheus和grafana
需要安装的软件,以及版本号
以上软件包,除了mysql要求5.7.29以外,其他都可以上最新版。当然和我一样的版本一定不会出错

二、解压安装prometheus软件

tar -zxvf prometheus-2.34.0-rc.0.linux-amd64.tar.gz -C /usr/local/

解压prometheus
设置软连接,创建data目录

cd /usr/local/
ln -s /usr/local/prometheus-2.34.0-rc.0.linux-amd64/ /usr/local/prometheus
mkdir /usr/local/prometheus/data

设置软连接,创建data目录
添加到系统服务(prometheus)

添加到系统服务(prometheus)
vim /usr/lib/systemd/system/prometheus.service

[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus \
--storage.tsdb.path=/usr/local/prometheus/data \
--config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target

下面的命令开启服务并且开机自启
systemctl start prometheus
systemctl enable prometheus
systemctl status prometheus

反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符。
保存退出prometheus.service文件
接下来执行:开启prometheus服务,使其开机启动,查看其运行状态,如果是绿色的active(running)表示启动成功
服务开启成功
打开网页,地址:主机+端口
比如我的:192.168.251.120:9090
说明prometheus部署成功

三、安装grafana

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.5-1.x86_64.rpm
sudo yum install grafana-enterprise-8.4.5-1.x86_64.rpm
这个是在线安装,不用配置太多文件,安装成功之后设置启动和开机自启
systemctl restart grafana-server
systemctl enable grafana-server

安装成功

然后点击网页:192.168.251.120:3000
输入账户密码:默认都是admin,回车之后会让你重新设置账号密码,再输入一遍admin,这是为了让你修改账户密码,你再设置一样的就行。
grafana页面
链接prometheus数据源,点击左边列表小齿轮,datasource,进去,
在这里插入图片描述

点击add data source,再点击prometheus,
在这里插入图片描述

然后开始配置参数,主要就一个,url填写你的localhost:9090,比如我的就是192.168.251.120:9090,在这里插入图片描述

然后点击最下面,点击 save & test 这步必须通过,如果显示绿色提示框框,说明通过,(注意是两个绿色,左下角和右上角绿色对钩框框)
在这里插入图片描述

然后不要退出,点击最上面setting旁边的,dashboard,然后点击import,最上面得prometheus stats。
在这里插入图片描述
在这里插入图片描述

然后grafana部署暂时告一段落。
接下来

四、安装node_exporter

安装node_exporter,创造软连接,配置service文件,修改prometheus.yml文件,添加监控端口
tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local/
ln -s /usr/local/node_exporter-1.3.1.linux-amd64/ /usr/local/node_exporter
vim /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=Prometheus node_exporter
[Service]
User=nobody
ExecStart=/usr/local/node_exporter/node_exporter --log.level=error
ExecStop=/usr/bin/killall node_exporter
[Install]
WantedBy=default.target

启动node_exporter并查看状态,设置开机自启
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter

在这里插入图片描述
在这里插入图片描述
去prometheus.yml 文件中添加监控端口,打开prometheus.yml添加如下代码

vim /usr/local/prometheus/prometheus.yml

  - job_name: 'host_monitor'
    scrape_interval: 5s
    static_configs:
    - targets: ['192.168.251.120:9100']
      labels:
        instance: localhost:9100    

下图是打开的prometheus.yml文件
在这里插入图片描述
下图是添加代码过后的prometheus.yml文件,注意缩进,缩进有问题,运行会出错!!!
在这里插入图片描述
检查看到success就说明格式正确,重启prometheus吧.

检查配置文件
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
重启prometheus
systemctl restart prometheus

在这里插入图片描述
这个时候去prometheus网页查看,点击status,然后选择target,可以看到监控到的主机信息
页面:192.168.251.120:9090 你可以参考你的host地址

在这里插入图片描述
下面进入到grafana页面,地址:192.168.251.120:3000,你可以参考你的host地址
点击左边的小加号,点击import
在这里插入图片描述
输入8919,点击右边的load,到最下面一行选择数据源prometheus然后点击import
在这里插入图片描述
这就是你监控到的数据,主机192.168.251.120中的主机各个指标参数,比如cpu负载,网络负载,内存负载之类的。这里做一个简要说明,node_exporter是部署在你需要监控的主机上,比如我们在192.168.251.120上部署,所以监控的就是这台主机,prometheus是将node_exporter上的数据pull过来,保存起来,所有的数据都是在prometheus上面,如果有多台主机需要监控,那么每台主机都装上node_exporter ,并且在安装prometheus的主机中配置prometheus.yml文件,在其中加入主机号:端口号,如同前面的操作,只不过碰巧这次prometheus和node_exporter都安装到了一台机子,后面再添加一台主机,还要安装node_exporter,大家可以自己体会一下,另外,grafana这次也碰巧安装在主机192.168.251.120上面,其实它也可以安装在别的主机上,但是当配置URL数据源的时候,只要地址协商prometheus的主机地址就行了,url前面配置过了,就是http://192.168.251.120:9090,往前翻看看,在grafana页面配置的。
在这里插入图片描述
以上就完成了基于prometheus+node_exporter+grafana架构的对主机资源进行监控的部署

五、安装alertmanager,告警组件

上面的组件其实安装没有要求,但是alertmanager需要安装道prometheus安装的主机上,也就是192.168.251.120
开整:

tar -zxvf alertmanager-0.23.0.linux-amd64.tar.gz -C /usr/local/
ln -s /usr/local/alertmanager-0.23.0.linux-amd64/ /usr/local/alertmanager

在这里插入图片描述

配置service文件,方便开机启动
vim /usr/lib/systemd/system/alertmanager.service

[Unit]
Description=alertmanager System
Documentation=alertmanager System
[Service]
ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target

检查配置文件语法
./amtool check-config alertmanager.yml
开启alertmanager,并配置开机自启,检查启动状态
systemctl start alertmanager
systemctl enable alertmanager
systemctl status alertmanager

在这里插入图片描述
接下来配置alertmanager.yml文件,这个文件是设置告警的,可以设置告警级别,出现告警分发给谁,微信告警还是邮件告警,等一系列设置,直接删除alertmanager.yml原文件内容,填充下面代码,当然有些内容需要改:凡是后面带##的描述性信息的语句都要注意,要改成自己的信息
做一个简要说明:
修改配置文件alertmanager.yml,注意,下面的smtp_smarthost:是说明用的是网易邮箱,不用变,需要改动参数的是smtp_from:用自己的邮箱,smtp_auth_username: 也是自己的邮箱,这两个都是163邮箱,一样就行,smtp_auth_password:这个参数需要配置的是自己的邮箱的授权码,不懂得自己去百度。不是密码,是授权码,可以去邮箱网站里面的设置里获取。下面有一个-to:参数,我换了126的邮箱。注意##后面的描述性信息,!!!
企业微信需要自己注册,3分钟完事,需要获取三个信息:
corp_id: 企业微信账号唯一 ID, 可以在我的企业中查看。
agent_id: 第三方企业应用的 ID
api_secret: 第三方企业应用的密钥

vim /usr/local/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'##这条内容引号里的意思是用163邮箱,不用管
  smtp_from: 'shitouym182@163.com'##这条内容引号里的意思是发送邮箱,改成你的163
  smtp_auth_username: 'shitouym182@163.com'##同上
  smtp_auth_password: 'DPUVGIOIPMEKTAAH'##这个是授权码,写成自己的
  smtp_require_tls: false

templates:
  - '/usr/local/alertmanager/*.tmpl'##这个是告警模板,

route:
  group_by: ['severity']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 3m
  receiver: 'email'
  routes:
  - match:
      severity: critical
    receiver: 'leader'
    continue: true
  - match_re:
      severity: ^(warning|critical)$
    receiver: 'devops'
    continue: true

receivers:
- name: 'email'
  email_configs:
  - to: 'shitouym182@126.com'##改成自己的126邮箱,这个作为接受告警信息的邮箱
    html: '{{ template "email.to.html" . }}'
    send_resolved: true

- name: 'leader'
  email_configs:
  - to: 'shitouym182@163.com'##同理,改成163邮箱,自己的
    html: '{{ template "email.to.html" . }}'
    send_resolved: true

- name: 'devops'
  wechat_configs:
  - corp_id: 'wwcfeb65c298e4f553'##这个是企业微信的公司id,可以再我的企业里查看
    to_user: 'LiAnFu'##这个是企业微信的管理员,建议注册时用真名,这里就用拼音了。
    agent_id: '1000002'##第三方企业应用的id
    api_secret: 'x5JXxD0Xqd_K-e9WqsRV6iJEpuMPxJXTWzHimSNmnPM'##第三方企业秘钥
    send_resolved: true
    message: '{{ template "wechat.tmpl" . }}'

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

配置完成之后记得检查语法

/usr/local/alertmanager/amtool check-config alertmanager.yml
如若报错,根据报错内容,修改,上述格式没有问题,但是提示的部分需要修改自己的信息。
重启告警模块
systemctl restart alertmanager

在这里插入图片描述
接下来修改prometheus的文件

vim /usr/local/prometheus/prometheus.yml

修改 prometheus.yml 的 alerting 部分,注意,地址写自己的ip地址,我的主机ip:- 192.168.251.120:9093

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 192.168.251.120:9093

2、定义告警文件:
rule_files:
  - "rules/*.yml"

在这里插入图片描述
在这里插入图片描述
检查修改之后是否正确,每次修改完配置文件,都需要检查语法

/usr/local/prometheus/promtool check config prometheus.yml

在这里插入图片描述
接下来进入prometheus目录,创建一个rules目录,这里要放置告警规则,首先写一个告警规则host_monitor.yml

cd /usr/local/prometheus
mkdir rules
cd rules/
vim host_monitor.yml

groups: 
- name: node-up
  rules: 
  - alert: node-up
    expr: up == 0
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{{$labels.instance}}Instance has been down for more than 15 seconds"

配置完成同样需要检查语法:

/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
如果没有报错,那么重启prometheus
systemctl restart prometheus

在这里插入图片描述
此时,可以打开prometheus网页,查看,alertmanager正在监控相关指标
地址:192.168.251.120:9090
在这里插入图片描述
尝试告警:

这里先重启一下alertmanager和prometheus,保证所有参数变更生效
systemctl restart alertmanager
systemctl restart prometheus
然后关掉node_exporter
systemctl stop node_exporter

这个时候可以打开prometheus网页,地址:192.168.251.120:9090,进入Alerts页面可以看到监控节点变黄了,等一会就马上会变红,报错
在这里插入图片描述
再刷新一下,变红了
在这里插入图片描述
然后打开你的126邮箱,你会发现告警邮件发来了,
在这里插入图片描述
再把node_exporter打开,还会收到恢复的邮件,这里不再演示

systemctl start node_exporter

但是邮件显示内容不够有友好,我们修改告警信息显示模板,

邮件模板:
vim /usr/local/alertmanager/email.tmpl

{{ define "email.to.html" }}
{{ range .Alerts }} =========start==========<br>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt }} <br>
=========end==========<br>
{{ end }}
{{ end }}

修改完告警模板之后需要检查语法并重启alertmanager服务

 /usr/local/alertmanager/amtool check-config alertmanager.yml
 systemctl restart alertmanager
 然后再尝试停滞node_exporter
 systemctl stop node_exporter

在这里插入图片描述
这个时候告警邮件描述信息非常友好
在这里插入图片描述
添加cpu监控告警规则
进入rules目录

cd /usr/local/prometheus/rules

groups:
- name: cpu_load
  rules:
  - alert: cpu_load
    expr: node_load5 / (count without (cpu, mode) (node_cpu_seconds_total{mode="system"})) > 10
    for: 5s
    labels:
      severity: 'warning'
      team: cpu
    annotations:
      summary: "CPU load (5m) avg is high\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"

完事之后检查一下语法规则,这个其实配不配之都无所谓,多了一个监控CPU的节点而已
/usr/local/prometheus/promtool check config prometheus.yml
如果没报错,重启prometheus服务,毕竟修改了配置文件,生效需要重启
systemctl restart prometheus

在这里插入图片描述
可以看到,cpu节点也监控到了。
以上就是基于prometheus+grafana+node_exporter+alertmanager架构的主机指标信息采集监控以及异常告警,邮件告警,(前面还配置了的企业微信告警,后面会用到)。

六、安装mysql

国内镜像网站可以找到,一般企业里面5.7是主流,我安装的就是5.7.29
下载安装包,
解压到目标路径,
创建软连接。
创建用户名,
配置环境变量,
重新加载环境变量
查看mysql和mysqld版本号

tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64/ /usr/local/mysql
ln -s /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64/ /usr/local/mysql
useradd -s /sbin/nologin mysql120
echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
source /etc/profile
mysql -V
mysqld -V

安装成功
在这里插入图片描述

创建目录及设定权限
mkdir /data/mysql/mysql3306/{data,logs,binlog} -p
chown -R mysql120.mysql120 /usr/local/mysql/ /data/

my3306.cnf配置文件简易版本mysql配置

vim /data/mysql/mysql3306/my3306.cnf

[mysql]
prompt="\u@\h [\d]>"
[mysqld]
user = mysql120
basedir = /usr/local/mysql
datadir = /data/mysql/mysql3306/data
log-error=/data/mysql/mysql3306/data/error_3306.log
server_id = 120
port = 3306
log_bin=/data/mysql/mysql3306/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
socket = /tmp/mysql3306.sock

初始化数据库
授权
启动数据库

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --initialize-insecure
chown -R mysql120.mysql120 /usr/local/mysql* /data/
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

打开退出mysql:

mysql -S /tmp/mysql3306.sock
quit

在这里插入图片描述

七、安装mysql_exporter

解压文件到指定目录
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/
创建软连接
ln -s /usr/local/mysqld_exporter-0.12.1.linux-amd64/ /usr/local/mysqld_exporter
配置文件mysqld_exporter.service:
vim /usr/lib/systemd/system/mysqld_exporter.service

[Unit]
Description=mysql Monitoring SystemDocumentation=mysql Monitoring System
[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--collect.info_schema.processlist \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_metrics \
--collect.perf_schema.tableiowaits \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.tablelocks \
--collect.engine_innodb_status \
--collect.perf_schema.file_events \
--collect.binlog_size \
--collect.info_schema.clientstats \
--collect.perf_schema.eventswaits \
--config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
[Install]
WantedBy=multi-user.target
配置文件.my.cnf:
vim /usr/local/mysqld_exporter/.my.cnf

[client]
host=localhost
user=exporter
password=123456
socket=/tmp/mysql3306.sock
将mysql暴露给mysql_exporter
打开mysql:
mysql -S /tmp/mysql3306.sock
输入:
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'exporter'@'localhost' IDENTIFIED BY '123456';

刷新权限,输入
flush privileges;

在这里插入图片描述
此时数据库配置完毕,准备启动mysqld_exporter 服务,并设置开机自启

quit退出mysql
systemctl start mysqld_exporter
systemctl enable mysqld_exporter

在这里插入图片描述
这个时候mysql部署完成,既然要监控它,则需要在prometheus.yml文件中去监听它的地址端口,下面进行配置:

进入prometheus目录
cd /usr/local/prometheus
打开prometheus.yml文件,最下面添加代码,注意缩进,地址写你安装mysql和mysqld_exporter的主机地址,这里碰巧安装prometheus和mysql是一台机器,地址就是192.168.251.120:9104
vim prometheus.yml

  - job_name: "mysql_monitor"
    static_configs:
      - targets: ["192.168.251.120:9104"]

在这里插入图片描述
后面还会去另一台主机上安装mysql,到时候还要在这台主机的prometheus.yml文件中监听那台的地址端口,后面细说。
检查无误重启prometheus,配置完文件需要重启服务生效

/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
systemctl restart prometheus

在这里插入图片描述
这个时候去prometheus网页上,点击status,点击targets,可以看到mysql_monitor的监控数据,
在这里插入图片描述
去grafana网页:192.168.251.120:3000,可以点击左边小加号,点击import,输入7362,点击右边load
在这里插入图片描述
最下面选择一个复选框,点击下拉菜单选择prometheus数据源,点击import,可以看到mysql的一些指标已经被监控到了,如果没有数据,就等一会儿。(具体监控的指标都在页面里,至于监控哪些数据一开始写到了mysqld_exporter.service文件里)
在这里插入图片描述
到此为止,基于prometheus+grafana+mysql+mysqld_exporter架构的mysql指标监控就已经完成了,后面开始建立mysql数据告警和mysql主从监控告警。
接下来上第二胎机器,在主机192.168.251.121上面进行部署mysql、mysqld_exporter、node_exporter这三个组件,还需要在192.168.251.120上面进行prometheus.yml 文件添加监听端口,添加mysql.yml告警规则等。

八、在192.168.251.121上部署mysql及其它组件

这里我再详细得带大家从头走一遍mysql和mysqld_exporter以及node_exporter的安装,有局部细节参数需要修改,仔细体会。

解压软件到指定目录:
tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
创建软连接:
ln -s /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64/ /usr/local/mysql
创建用户,这里是mysql121
useradd -s /sbin/nologin mysql121
添加全局变量:
echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
source一下,让环境变量生效,其实再开一个窗口,那个窗口会失效的,最好的办法是重启一下系统。
source /etc/profile
创建目录及设定权限
mkdir /data/mysql/mysql3306/{data,logs,binlog} -p
chown -R mysql121.mysql121 /usr/local/mysql/ /data/
my3306.cnf配置文件,这里注意,用户是mysql121,server_id是121,和前面那台主机不一样。
vim /data/mysql/mysql3306/my3306.cnf

[mysql]
prompt="\u@\h [\d]>"
[mysqld]
user = mysql121
basedir = /usr/local/mysql
datadir = /data/mysql/mysql3306/data
log-error=/data/mysql/mysql3306/data/error_3306.log
server_id = 121
port = 3306
log_bin=/data/mysql/mysql3306/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
socket = /tmp/mysql3306.sock
初始化数据库:
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --initialize-insecure
授权,启动mysql
chown -R mysql121.mysql121 /usr/local/mysql* /data/
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

如若想打开mysql:
mysql -S /tmp/mysql3306.sock
退出就是:quit
mysql没有设置自启,如果想关闭需要在mysql下输入 shutdown; 然后quit
接下来安装mysqld_exporter,
这个和前面一致,为了节省大家时间,我带大家再走一遍

解压文件到指定目录
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/
创建软连接
ln -s /usr/local/mysqld_exporter-0.12.1.linux-amd64/ /usr/local/mysqld_exporter

mysqd_exporter.service配置文件:
vim /usr/lib/systemd/system/mysqld_exporter.service

[Unit]
Description=mysql Monitoring SystemDocumentation=mysql Monitoring System
[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--collect.info_schema.processlist \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_metrics \
--collect.perf_schema.tableiowaits \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.tablelocks \
--collect.engine_innodb_status \
--collect.perf_schema.file_events \
--collect.binlog_size \
--collect.info_schema.clientstats \
--collect.perf_schema.eventswaits \
--config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
[Install]
WantedBy=multi-user.target

.my.cnf配置文件:
vim /usr/local/mysqld_exporter/.my.cnf

[client]
host=localhost
user=exporter
password=123456
socket=/tmp/mysql3306.sock

在这里插入图片描述

将mysql暴露给mysql_exporter
打开mysql:
mysql -S /tmp/mysql3306.sock
输入下列内容:
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'exporter'@'localhost' IDENTIFIED BY '123456';

刷新权限:
flush privileges;
退出mysql:
quit
到此为止,客户端数据库配置完毕,启动mysqld_exporter并设置开机自启
systemctl start mysqld_exporter
systemctl enable mysqld_exporter

在这里插入图片描述
接下来安装node_exporter 这个前面也有,为了节省大家时间,我这里带大家再走一遍

安装node_exporter,创造软连接,配置service文件,修改prometheus.yml文件,添加监控端口:
tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local/
ln -s /usr/local/node_exporter-1.3.1.linux-amd64/ /usr/local/node_exporter
vim /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=Prometheus node_exporter
[Service]
User=nobody
ExecStart=/usr/local/node_exporter/node_exporter --log.level=error
ExecStop=/usr/bin/killall node_exporter
[Install]
WantedBy=default.target

systemctl start node_exporter
systemctl enable node_exporter
systemctl status node_exporter

在这里插入图片描述

这个时候注意:需要回到prometheus安装的主机,去配置prometheus.yml文件,在里面添加监听此台主机的地址端口,现在打开192.168.251.120主机,去配置文件
这是打开的原prometheus.yml文件最后面的内容

在这里插入图片描述

vim /usr/local/prometheus/prometheus.yml 

添加如下内容:
在host_monitor的target中添加下面地址端口,监听node_exporter:
192.168.251.121:9100
在mysql_monitor的target中添加下面地址端口,监听mysqld_exporter:
192.168.251.121:9104
添加完之后如下图:

在这里插入图片描述

配置完检查一下语法,没有错就重启prometheus服务:
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
systemctl restart prometheus

在这里插入图片描述
这个时候再去prometheus网页中,注意,是192.168.251.120:9090,点击status,点击target可以看到监控到的主机参数,有主机信息,和mysql信息
在这里插入图片描述
回到grafana网页,网址:192.168.251.120:3000,可以看到mysql(模板7362)的数据和主机的数据(模板8919)
在这里插入图片描述
在这里插入图片描述
下面编写微信告警模板

修改告警模板,这个是在主机192.168.251.120上操作,因为alertmanager安装在这儿
tmpl文件是告警的模板,信息以什么样的形式呈现出来:
vim /usr/local/alertmanager/wechat.tmpl

{{ define "wechat.tmpl" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
@警报
实例: {{ .Labels.instance }}
信息: {{ .Annotations.summary }}
详情: {{ .Annotations.description }}
时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
@恢复
实例: {{ .Labels.instance }}
信息: {{ .Annotations.summary }}
时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
恢复: {{ .EndsAt.Format "2006-01-02 15:04:05" }}
{{ end }}{{ end -}}
{{- end }}

检查语法有没有问题:
./amtool check-config alertmanager.yml
重启alertmanager服务,修改配置文件,需要重启相关服务
systemctl restart alertmanager

在这里插入图片描述
进入prometheus文件包下的rules目录,添加mysql告警规则文件

mysql的监控规则:
vim /usr/local/prometheus/rules/mysql.yml

groups:
- name: MySQL-rules
  rules:
  - alert: MySQL Status
    expr: mysql_up == 0
    for: 5s
    labels:
      severity: 'warning'
    annotations:
      summary: "{{$labels.instance}}: MySQL has stop "
      description: "MySQL 数据库挂了,请检查"

  - alert: MySQL Slave IO Thread Status
    expr: mysql_slave_status_slave_io_running == 0
    for: 5s
    labels:
      severity: 'warning'
    annotations:
      summary: "{{$labels.instance}}: MySQL Slave IO Thread has stop "
      description: "检测 MySQL 主从 IO 线程运行状态"

  - alert: MySQL Slave SQL Thread Status
    expr: mysql_slave_status_slave_sql_running == 0
    for: 5s
    labels:
      severity: 'warning'
    annotations:
      summary: "{{$labels.instance}}: MySQL Slave SQL Thread has stop "
      description: "检测 MySQL 主从 SQL 线程运行状态"

保存并检查语法错误:
./promtool check config prometheus.yml
重启prometheus服务
systemctl restart prometheus

在这里插入图片描述
到此为止,监控告警基本完成,下面进行最后一步,将两台主机分别设置为mysql主库和mysql从库

九、设置mysql主库、从库

我们设置192.168.251.121为主库,192.168.251.120为从库,现在进入主库主机

打开mysql
mysql -S /tmp/mysql3306.sock
输入下面的语句,设置主库
grant replication slave on *.* to repl@'192.168.251.%' identified by '123456';
去从库:192.168.251.120主机:打开mysql
mysql -S /tmp/mysql3306.sock
输入下列命令,这里整段赋值,整段粘贴:
CHANGE MASTER TO MASTER_HOST='192.168.251.121',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;

在这里插入图片描述

在这里插入图片描述
在主库继续输入:

start slave;
show slave status\G
可以看到两个指标,都是yes,说明主从库设置成功

在这里插入图片描述
在这里插入图片描述
此时全部监控告警体系搭建完毕,
进入prometheus网页:192.168.251.120:9090
可以看到在Alert页面下监控到的mysql指标和主机指标
在这里插入图片描述
去grafana网页:192.168.251.120:3000,点击加号,import,加载7371模板,选择prometheus数据源,可以看到如下页面,说明主库从库配置成功
在这里插入图片描述

我们做一个测试,打开企业微信,打开126邮箱,然后进入主机192.168.251.120的mysql环境下,输入指令:

stop slave sql_thread;

很快看到prometheus网页中Alert下的sql线程监控报错,企业微信收到告警,与此同时,因为在mysql.yml告警规则文件中,这三个监控指标的安全级别都是warning,而我在alertmanager.yml文件中设置凡是warning级别只发微信,如果是critical级别,会发邮件。所以此时邮件收不到告警。在这里插入图片描述在这里插入图片描述
下面我们再关掉一个线程

stop slave io_thread;

在这里插入图片描述
这是prometheus页面可以看到挂了两个线程,
在这里插入图片描述
grafana页面也显示挂掉了
在这里插入图片描述
企业微信开始疯狂发告警信息给我
在这里插入图片描述
好了,我们现在挂掉mysql服务和node_exporter服务,感受怒火吧!!!
在这里插入图片描述
prometheus页面显示了两个挂了
在这里插入图片描述
grafana页面也显示192.168.251.120的node_exporter挂掉
在这里插入图片描述
这个时候邮件来了!(因为我在host_monitor.yml告警规则里设置的告警级别是:critical)所以发邮件
host_monitor.yml
在这里插入图片描述
好了,我们逐步恢复刚才的哪些关掉的服务,恢复邮件和企业微信信息也会发回来,是因为在alertmanager.yml里面有一个参数:send_resolved: true,这里是TRUE,所以恢复的时候也会返回信息,我这里不上图了。。。

祝大家学业有成,身体健康!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centos7下部署主机监控,mysql指标监控,(prometheus+grafana+node_exporter+mysqld_exporter+alertmanager) 的相关文章

  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • db:schema:load 与 db:migrate 使用 capistrano

    我有一个 Rails 应用程序 我正在将其移动到另一台服务器 我认为我应该使用 db schema load 来创建 mysql 数据库 因为这是推荐的 我的问题是我正在使用 capistrano 进行部署 并且它似乎默认为 rake db
  • MySQL“LIKE”搜索不起作用

    我通过 LOAD DATA INFILE 在 MySQL 中导入了一个 txt 数据库 一切似乎都正常 唯一的问题是 如果我使用以下查询在数据库上搜索记录 SELECT FROM hobby WHERE name LIKE Beading
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • MySQL 排序顺序 - 排序规则?

    我在对 MySQL 中的 char 字段进行排序时遇到困难 问题是重音字符与非重音字符混淆 例如 Abc bd Acc 我认为这可能与整理有关 所以我将表格的排序规则更改为utf8 ut8 bin 看完之后这个帖子 https stacko
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • 将庞大数据库从亚马逊RDS导出到本地mysql

    我在 Amazon RDS 上有一个 mysql 数据库 大约 600GB 数据 我需要将其移回本地专用服务器 但我不知道从哪里开始 每次我尝试初始化 sqldump 时它都会冻结 有没有办法将其移至 S3 甚至可能在开始下载之前将其分成更
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • MYSQL - 使用逗号分隔字符串作为变量输入的存储过程

    我希望有人能够提供帮助 我已经创建了我的第一个存储过程 没什么花哨的 但是我遇到了问题 我想给它一个字符串输入 例如 1 2 3 4 5 然后它执行一个简单的操作SELECT FROM TABLE WHERE EAN IN VAR 所以存储
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v

随机推荐

  • Docker中使用ROS-GUI

    Docker中使用ROS GUI比较麻烦 xff0c 好在有国外的大神解决了这个难题 下面 xff0c 我就教大家如何在Docker中使用ROS GUI 1拉取大神编写的镜像 docker pull ct2034 vnc ros kinet
  • Linux环境下搭建git服务器和TortoiseGit客户端 ssh key测试

    Linux环境下搭建git服务器和TortoiseGit客户端 ssh key测试 1 git的安装2 用户和 ssh目录创建3 本地创建公钥私钥4 在服务器端导入本地公钥5 开启服务器中的RSA认证6 创建仓库7 本地克隆 1 git的安
  • RealSense技术在SR300摄像头上的应用

    RealSense技术在SR300摄像头上的应用 一 实感摄像头 1 RealSense技术 在计算机的发展过程中我们始终没有抛弃键盘和鼠标 xff0c 前几年win8和触屏的配合形成 了一种新的电脑使用模式 xff0c 但是依然没有打破传
  • 自动控制理论(2)——控制系统的数学模型(微分方程、传递函数)

    系列文章目录 自动控制理论 xff08 1 xff09 自动控制理论概述 自动控制理论 xff08 3 xff09 控制系统的数学模型 xff08 系统框图和信号流图 xff09 文章目录 系列文章目录一 线性系统的微分方程1 微分方程的建
  • Android 8.1共享系统代理中的热点(LineageOS15.1)

    https github com Mygod VPNHotspot 下载安装这个软件 xff0c 需要ROOT 开发者选项 xff1a 关闭WLAN硬件加速 该软件设置 xff1a 关闭IPV6 打开 修复DHCP 开启手机自带的热点 该软
  • 浏览器页面滚动条美化(样式)

    浏览器页面滚动条美化 xff08 样式 xff09 最近测试反应我们的产品在浏览器中当页面宽高出现溢出的情况下页面滚动条太丑了 xff01 让我们美化一下 xff01 然后花了一点时间专研了一下关于滚动条样式的相关知识 xff0c 今天就在
  • Android串口工具

    参考Android系统实现方式 xff0c 串口操作采用native实现 xff0c 比java层用文件流的方式更高效 xff0c 不需要延时和睡眠处理 xff0c 大量自测不会出现读取不到数据等问题 特点 xff1a 1 提供基本的串口操
  • 【VINS-Fusion入门之一】让系统跑起来

    文章目录 简介配置执行单目 43 IMU双目 43 IMU双目相机双目 43 GPS 落地备注 xff1a 简介 VINS xff0c 英文缩写Visual Inertial Systems 是一个实时视觉SLAM框架 xff0c 2017
  • 【VINS-Fusion入门之二】基于优化的多传感器融合

    文章目录 简介特征参考论文 解读系统框图相机模型 xff1a 配置文件全局优化闭环优化状态估计 简介 VINS Fusion is an optimization based multi sensor state estimator whi
  • RealSense T265使用教程

    RealSense ROS 安装 https github com IntelRealSense realsense ros 安装教程 https www intelrealsense com get started tracking ca
  • c++面试宝典

    目录 一 多线程 二 指针 三 字符串 四 面向对象 五 基本用法 六 c 43 43 11 七 算法 c 43 43 面试必考多线程 xff0c 内存 xff08 智能指针 xff09 xff0c 常见算法 xff0c 设计模式 一 多线
  • 音视频编解码之傅里叶变换和小波变换

    傅里叶变换的核心是从时域到频域的变换 xff0c 而这种变换是通过一组特殊的正交基来实现的 傅立叶变换使我们能通过频率成分来分析一个函数 任何信号 xff08 如图像信号 xff09 都可以表示成一系列正弦信号的叠加 傅立叶变换在实际中有非
  • CMakeLists.txt生成makefile

    本CMakeLists txt的project名称 会自动创建两个变量 xff0c PROJECT SOURCE DIR和PROJECT NAME PROJECT SOURCE DIR xff1a 本CMakeLists txt所在的文件夹
  • 编程之禅-程序员的哲学

    编程之道 xff0c 一个酷爱东方哲学和练太极拳的老外写的书 作者是一位资深的程序设计师 xff0c 从他的爱好和著作中 可以看得出作者的文化底蕴 而他现在从事的工作 xff0c 是如何把最好的管理技术和高科技企业联系起来 xff0c 而这
  • Pixhawk-开篇

    Pixhawk 开篇 互联网上关于介绍Pixhawk的文章特别多 有心人自己去网上查看吧 本篇文章未完 可能会有更新 不足请指出 QQ 4862879 说重点 Pixhawk指的是一款开源的硬件 下图的那个 是把原来的PX4FMU 43 P
  • Pixhawk_bootloader简介

    Pixhawk Bootloader引导过程简介 自己结合网络上的资源总结的内容 有不对的地方请及时指出 有侵权的请指出 QQ 4862879 Pixhawk硬件使用STM32的芯片 Cortex M3的内核有三种启动方式 xff0c 其分
  • 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)

    在前一节中 xff0c 简单介绍了移动机器人的3D建模 xff0c 并在gazebo三维仿真环境中实现了简单的移动 这一节采用gmapping包实现机器人的SLAM xff08 同时定位与地图建立 xff09 使用上一节构建的机器人3D模型
  • Git 远程推送被拒绝的一种解决方案

    Git 远程推送被拒绝的一种解决方案 参考文章 xff1a xff08 1 xff09 Git 远程推送被拒绝的一种解决方案 xff08 2 xff09 https www cnblogs com wf skylark p 9315463
  • 关于putty连接服务器提示server unexpectedly closed connection解决方法

    关于putty连接服务器提示server unexpectedly closed connection解决方法 参考文章 xff1a xff08 1 xff09 关于putty连接服务器提示server unexpectedly close
  • centos7下部署主机监控,mysql指标监控,(prometheus+grafana+node_exporter+mysqld_exporter+alertmanager)

    先解释一下这些组件都是干什么用的 xff0c 组件说明prometheus server 是 Prometheus 组件中的核心部分 xff0c 负责实现对监控数据的获取 xff0c 存储以 及查询 exporter 简单说是采集端 xff