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) 的相关文章

  • MySQL 获取时间优化

    o我有一个包含 200 万个寄存器的表 但它很快就会增长得更多 基本上 该表包含具有相应描述符的图像的兴趣点 当我尝试执行选择在空间上靠近查询点的点的查询时 总执行时间花费太长 更准确地说 持续时间 获取 0 484 秒 27 441 秒
  • 使用 cfchart 标签在单个饼图中显示多个查询的数据

    请考虑以下代码 现在我的代码中有以下代码 cfm页面内的 tag DataSource xx xx x xx Name of the database sgemail Name of the relevant column event vc
  • 使用 Hibernate 和 MySQL、全局和本地进行 Spring 事务管理

    我正在使用 MySQL Server 5 1 Spring 3 0 5 和 Hibernate 3 6 开发 Web 应用程序 我使用 Springs 事务管理 我是新手 所以如果我问一个容易回答的问题 请耐心等待 1 我读到了有关全局 x
  • mysql 在 sum() 函数上使用 concat,例如 concat(sum(col1),"%")

    我正在尝试合并多个查询 但其中一个查询使用 sum 当我尝试在此列上应用 concat 时 我得到不需要的 blob 结果 我如何在聚合列上应用 concat 和 union 我期待这个结果 SELECT row 1 col1 UNION
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 将矩阵与 SUM 相乘

    我想将一个指标与另一个指标之和的结果相乘 我想尝试做的事情 MeticOne SUM MetricTwo Thanks 假设你有MetricOne带标签id and name 你有MetricTwo还有标签id and name 然后你就得
  • MySQL中如何存储小数?

    我尝试过将 DECIMAL 与 2 2 一起使用 但它不允许我使用它 我只想存储一个数字 例如 7 50 或 10 50 我需要将这两个数字保留在小数点后 但是当我刷新数据库时 它会将值重置为 0 99 有什么建议么 第一个参数DECIMA
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • 使用数据库进行日志记录

    大多数日志似乎都是纯文本形式 而不是放入 MySQL 其他类型的数据库中 这是否有原因 在我看来 将它们放入数据库将使分析变得非常非常容易 但这会以牺牲速度还是其他什么为代价 我不太关心可移植性 显然你会有数据库连接的文本日志 我能想到两大
  • 通过Java从MySQL中获取大量记录

    有一个 MySQL 表 服务器上的用户 它有 28 行和 100 万条记录 也可能会增加 我想从这个表中获取所有行 对它们进行一些操作 然后将它们添加到 MongoDB 中 我知道通过简单的 从用户中选择 操作来检索这些记录将花费大量时间
  • MySQL 复制是双向的

    我们已经成功设置了 MySQL 文献中描述的主从复制 不过 我很好奇是否有人设置了双向复制 例如 如果安装了 Drupal 或 Wordpress 第一个 主 数据库服务器出现故障 第二个 从属 数据库服务器恢复正常 与此同时 用户不断进行
  • mysql 数据库正在复制,但在主服务器上创建的用户未在从服务器上复制

    在主从复制中 我们使用 mysql DB 在从服务器上复制少量数据库 我在主服务器上创建了一个用户 不幸的是它没有在从服务器上复制 Replicate Do DB app1 app2 mysql 用户创建命令 GRANT SELECT on
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • Postgresql 的 SQL_NO_CACHE?

    MySQL 关键字是否有等效的 postgresqlSQL NO CACHE 或 SQL Serverdbcc drop clean buffers 即您可以简单地将其包含在 SQL 语句中或作为脚本的一部分吗 UPDATE 这个问题 查看
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • 使用 Flot、html、PHP 和 MySql 查询绘制多个图表

    我正在尝试使用 Flot html PHP 和 MySql 查询绘制多个图表 但我陷入了困境 因为我找不到在同一个 html 页面中绘制多个 flot 的方法 为简单起见 在数据库 test db3 映像中包含以下字段 表1 用户名 发送邮
  • 删除重复的行并需要在mysql中保留所有行中的一个[重复]

    这个问题在这里已经有答案了 我想删除基于两列的重复行 但需要保留所有行 1 行 重复行可以多于两行 例如 ID NAME PHONE 1 NIL 1234 2 NIL 1234 3 NIL 1234 4 MES 5989 我想从上面 3 行
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码

随机推荐

  • 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