这套集群监控系统真心不错……
2023-6-7 08:1:33 Author: Docker中文社区(查看原文) 阅读量:22 收藏

Prometheus 介绍

Prometheus 是一个开源系统监控和警报工具包,用于收集和聚合指标作为时间序列数据,即将指标信息、记录的时间戳以及称为标签的可选键值对一起存储,详细介绍请查看官方文档。

Prometheus 及其组件安装

因Prometheus组件基本都是用Go编写的,所以更易于构建和部署,解压文件后,进入相应目录运行二进制文件即可。

Prometheus 安装

下载并解压prometheus到监控服务器

wget https://github.com/prometheus/prometheus/releases/download/v2.32.1/prometheus-2.32.1.linux-amd64.tar.gz 
# 在线下载资源包,也可直接访问地址在浏览器下载后上传至服务器
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 
#重命名

运行prometheus

cd prometheus-2.32.1 #进入解压并重命名后的目录
./prometheus   #运行prometheus
./prometheus --config.file=prometheus.yml #或者指定配置文件运行
#以上两种都是前台运行,要想执行其它操作需先结束prometheus,所以可以使用nohup命令使其后台运行
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

也可以配置service文件,使用systemctl命令管理应用,执行命令vim /usr/lib/systemd/system/prometheus.service,复制并修改以下信息,写入prometheus.service文件中。

[Unit]  
Description=Prometheus  
#先启动network.target  
After=network.target  
[Service]  
#定义启动默认进程,即主进程  
Type=simple  
#以root用户启动  
User=root  
#启动当前服务的命令,注意修改路径和参数  
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,最后启动程序systemctl start prometheus.service,查看是否启动成功systemctl status prometheus.service,若未关闭SELinux使用service文件方式会启动失败,具体失败原因请查看日志报错信息,查看日志命令:journalctl -xe

配置正确则浏览器可成功访问到9090端口的地址,访问http://192.166.66.24:9090/出现下图界面,点击【Status】→【Targets】,prometheus应处于UP状态。

PromQL 介绍

PromQL是Prometheus内置的数据查询语言,支持对时间序列数据丰富的查询,聚合以及逻辑运算能力。广泛应用在Prometheus的日常应用当中,包括对数据查询、可视化、告警处理当中,下文介绍告警、Grafana都会用到PromQL语句。

mysqld_exporter 组件安装

mysqld_exporter是用于监控MySQL服务器指标的,比如:连接数、QPS等信息,同样安装在被监控服务器上,前提肯定是被监控服务器上已安装MySQL,然后开始运行mysqld_exporter,步骤如下:

下载并解压mysqld_exporter到被监控服务器
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz 
# 在线下载资源包,也可直接访问地址在浏览器下载后上传至被测服务器  
tar -xzvf mysqld_exporter-0.13.0.linux-amd64.tar.gz    
# 解压压缩包  
mv mysqld_exporter-0.13.0.linux-amd64 mysqld_exporter-0.13.0 
# 重命名  
创建文件vim .my.cnf,保存已安装MySQL的账号密码,格式如下:
[client]  
user=root  
password=123456  
进入prometheus-2.32.1目录,在prometheus.yml文件中添加MySQL相关信息
# 在prometheus.yml文件中添加如下信息,指明监控目标  
  - job_name: mysqld_exporter  
    static_configs:  
      - targets: ["192.166.66.22:9104"]  
运行mysqld_exporter
#进入pushgateway-1.4.2目录,启动mysqld_exporter  
./pushgateway --config.my-cnf=/root/mysqld_exporter-0.13.0/.my.cnf # ←前台运行,↓或者后台运行  
nohup ./mysqld_exporter --config.my-cnf=/root/mysqld_exporter-0.13.0/.my.cnf > mysqld_exporter.log 2>&1 &  
#也可以使用service文件启动,参考上文service文件配置  

还可以使用supervisor管理进程的方式,有关supervisor的使用网上有很多资料,请自行查找,此处不做过多介绍,步骤如下:

安装supervisor:

yum install supervisor -y

启动并设为开机自启:

systemctl start supervisord.service && systemctl enable supervisord.service

配置启动文件,自建配置文件通常放在/etc/supervisord.d/目录,创建ini格式的文件vim mysqld_exporter.ini,填写如下信息。

# 名称  
[program:mysqld_exporter]  
# 以root用户启动  
user=root  
# 启动mysqld_exporter的命令  
command=/root/mysqld_exporter-0.13.0/mysqld_exporter --config.my-cnf=/root/mysqld_exporter-0.13.0/.my.cnf  
# 设为自启,随supervisor启动,后续只需关心supervisor的状态  
autostart=true  
# 设为自动重启,随supervisor而重启  
autorestart=true  
# 日志保存路径  
stdout_logfile=/root/mysqld_exporter-0.13.0/mysqld_exporter.log  
# 日志文件保留个数,等于0则不备份  
stdout_logfile_backups=10  

最后重启supervisor:systemctl restart supervisord.service,查看mysqld_exporter的状态,应处于UP状态,访问http://192.166.66.22:9104/metrics也能获取MySQL的指标,数据中有如下查询语句相关的数据才是正确的。

node_exporter 组件安装

node_exporter是用来收集服务器系统数据的,监控服务器CPU、内存、磁盘、等信息,安装在被监控服务器上,以监控两台服务器为例,将node_exporter压缩包上传至两台服务器后解压并重命名为node_exporter-1.3.1

下载并解压node_exporter到被监控服务器,多台服务器则都要下载安装

wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz 
#在线下载资源包,也可直接访问地址在浏览器下载后上传至被测服务器  
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 
#重命名  

进入prometheus-2.32.1目录,在prometheus.yml文件中添加node相关信息

# 在prometheus.yml文件中添加如下信息,指明监控目标  
  - job_name: node_exporter  
    static_configs:  
      - targets: ["localhost:9100"]  
        labels: # 添加标签  
          nodename: node_24 # 为服务器添加标签名称  
      - targets: ["192.166.66.22:9100"]  
        labels:  
          nodename: node_22  
# 两个服务器节点可以也写一起,如下所示:  
  - job_name: node_exporter  
    static_configs:  
      - targets: ["localhost:9100","192.166.66.22:9100"]

运行node_exporter

# 进入node_exporter-1.3.1目录,启动node_exporter  
./node_exporter # 前台运行  
nohup ./node_exporter --web.listen-address=":9100" > node_exporter.log 2>&1 & # 使用nohup命令后台运行  
# 也可以使用service文件和supervisor方式启动,具体参考上文配置  

浏览器访问Prometheus地址http://192.166.66.24:9090/,点击【Status】→【Targets】,查看服务状态,全部处于UP状态。

alertmanager 组件安装

Alertmanager是一个告警管理组件,Prometheus发出告警分为两步,首先,Prometheus按告警规则向Alertmanager发送警告,所以告警规则是在Prometheus上定义的,然后,由Alertmanager负责管理这些告警,比如把告警去重、分组、聚合等操作后通过邮件等方式将告警通知给对应的负责人。简单介绍一下,步骤如下:

下载并解压alertmanager到监控服务器

wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz 
# 在线下载资源包,也可直接访问地址在浏览器下载后上传至服务器  
tar -xzvf alertmanager-0.23.0.linux-amd64.tar.gz -C Program 
# 解压到指定目录  
mv alertmanager-0.23.0.linux-amd64 alertmanager-0.23.0  
# 重命名  

进入alertmanager-0.23.0目录,编辑alertmanager.yml文件,修改如下信息

global: # 全局配置,配置发送邮件的信息  
  smtp_smarthost: smtp.qq.com:465       # 腾讯邮箱服务器及端口  
  smtp_from: 1234567890@qq.com    # 用于发送告警的邮箱  
  smtp_auth_username: 1234567890@qq.com # 登录的邮箱名  
  smtp_auth_password: dydiacuvduanyqdi  # 邮箱授权码,请登录用于发送的邮箱在设置→账户中开启  
  smtp_require_tls: false          # 不启用TLS  
  
route:  # 路由组配置  
  group_by: ['alertname'] # 分组依据,可分多个组  
  group_wait: 30s        # 第一次满足告警条件后等待多久发送邮件  
  group_interval: 50s    # 出现新告警后等待多久发送邮件  
  repeat_interval: 2h    # 若已经成功发送邮件等待多久后再次发送  
  receiver: 'email'      # 定义收件组名称  
receivers: # 收件组配置  
- name: 'email'  
  email_configs:  
  - to: 987654321@qq.com # 收件人邮箱,可添加多个邮箱  
 ……  
inhibit_rules:  
  - source_match:  
      severity: 'critical'  
    target_match:  
      severity: 'warning'  
    equal: ['alertname', 'dev', 'instance']  

运行alertmanager

# 进入alertmanager-0.23.0目录,启动node_exporter  
./alertmanager --config.file=/root/Program/alertmanager-0.23.0/alertmanager.yml # 前台运行  
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 &  # 后台运行  
# 同样也可使用service文件和supervisor方式启动,具体参考上文配置

在Prometheus的Web页面,点击【Status】→【Targets】,可以看到新增alertmanager服务并处于up状态。

修改prometheus-2.32.1目录中的prometheus.yml文件

alerting:  
  alertmanagers:  
    - static_configs:  
        - targets:  
          - localhost:9093 # 取消注释,将alertmanager改为IP或主机名  
  
rule_files:  
  - "first_rules.yml" # 取消注释  
  - "second_rules.yml" # 取消注释,可直接把规则写在一个yml文件中,此处分了两个,second调用first中的信息  
  
scrape_configs:  
 ………………忽略之前的配置信息,追加以下信息……………………  
  - job_name: alertmanager  
    static_configs:  
      - targets: ["localhost:9093"]  

配置规则,在prometheus-2.32.1目录下创建规则文件,若在其它目录创建,则注意修改prometheus.yml中rules.yml路径

  • 创建first_rules.yml文件,vim first_rules.yml,添加一条规则,如下
groups:  
- name: node_rules  
  rules:  
  - record: instance:node_load  
    expr: node_load1  
  • 创建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: 主机【{{$labels.nodename}}】的2分钟负载超出阈值,当前为{{$value}}%  
  • 执行命令./promtool check config prometheus.yml./promtool check rules first_rules.yml检查规则配置是否正确。

  • 重启prometheus服务后,在Prometheus的Web页面,点击【Status】→【Rules】,可以看到配置的规则。

使用Stress工具或其它压测工具进行负载测试,在Prometheus的Web告警页面可看到状态变化,满足规则要求就会收到告警邮件。

可自定义邮件格式,若邮件格式配置有误则无法收到邮件,使用默认邮件请忽略此步骤,步骤如下:

  • 定义邮件格式及内容,创建并进入目录mkdir template;cd template,创建文件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;> 监控告警 </span>**********<br>  
  
<span style=font-size:20px;font-weight:bold;> 告警类型:</span>    {{ $alert.Labels.alertname }} <br>  
<span style=font-size:20px;font-weight:bold;> 告警级别:</span>    {{ $alert.Labels.severity }} 级 <br>  
<span style=font-size:20px;font-weight:bold;> 故障主机:</span>    {{ $alert.Labels.instance }} <br>  
<span style=font-size:20px;font-weight:bold;> 主机标签:</span>    {{ $alert.Labels.nodename }} <br>  
<span style=font-size:20px;font-weight:bold;> 告警内容:</span>    {{ $alert.Annotations.summary }} <br>  
<span style=font-size:20px;font-weight:bold;> 故障时间:</span>    {{ $alert.StartsAt.Local }}<br>  
  
********** ~ 结束 ~ **********<br>  
<br>  
<br>  
{{- end }}  
{{- end }}  
{{- end }}  
  • 使用自定义的邮件格式,编辑alertmanager.yml文件,添加如下信息
templates: # 配置自定义告警邮件格式地址  
- '/root/Program/alertmanager-0.23.0/template/mytemp.tmpl'  
receivers:  
……忽略已配置信息……  
    html: '{{ template "mytemp.html" . }}' # 自定义使用的邮件模板和邮件标题  
    headers: { Subject: "告警邮件:{{ .GroupLabels.SortedPairs.Values}}[{{.Status | toUpper}}:{{ .Alerts.Firing | len }}]" }  

在alertmanager-0.23.0目录,执行命令./amtool check-config alertmanager.yml检查配置是否正确。

再次使用压测工具,对系统进行负载测试,满足设定规则后就会收到自定义格式的告警邮件啦。

Grafana 介绍

Grafana 是一个开源的可视化分析平台,能够将数据以非常美观的图形化方式展示出来,支持对来自多种数据源的数据进行查询、分析和可视化处理,详细介绍请查看官方文档。

Grafana 安装

支持多平台安装,也可使用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 # 启动并设为开机自启  

Grafana默认端口是3000,启动Grafana后浏览器访问http://192.166.66.24:3000,默认账号密码都是admin,首次登录会让修改密码。

Grafana 使用方法

1.添加数据源

登录成功后点击设置图标,默认进入数据源管理页面,点击【ADD data source】,选择数据源Prometheus,填写URL地址,其它项都可以默认,点击【Save&test

2.创建DashBoard

添加数据源之后,创建DashBoard,可自定义,官方也提供了很多的漂亮的仪表盘供选择,所以直接导入即可使用,通过仪表盘ID或下载文件后导入。

点击进入官方Dashboard,根据安装的prometheus组件搜索关键字,比如:node、mysql,选择喜欢的模板复制ID或下载文件。

点击加号图标→点击【Import】→填写模板ID→点击【Load】→选择数据源,其它项都可默认→点击【Import】。

之后就能够看到漂亮的页面展示啦,设置好同步时间,然后使用压测工具对服务器进行压测,图表就会同步更新啦,如下图所示,开始压测后CPU、内存、磁盘等数据开始升高。

点击独立面板的标题可进行放大查看、编辑、导出、复制、移除等操作。

对于MySQL数据图形化展示也是相同的步骤,直接搜索模板导入即可使用,如下图所示,每次数据请求,面板图表展示都会有变化。

至此 Prometheus + mysqld_exporter + node_exporter + alertmanager + Grafana 整合监控部署完成。

作者:小白典 
来源:blog.csdn.net/Q0717168/article/details/122496855
推荐阅读 点击标题可跳转

《Docker是什么?》

《Kubernetes是什么?》

《Kubernetes和Docker到底有啥关系?》

《教你如何快捷的查询选择网络仓库镜像tag》

《Docker镜像进阶:了解其背后的技术原理》

《教你如何修改运行中的容器端口映射》

《k8s学习笔记:介绍&上手》

《k8s学习笔记:缩扩容&更新》

《Docker 基础用法和命令帮助》

《在K8S上搭建Redis集群》

《灰度部署、滚动部署、蓝绿部署》

《PM2实践指南》

《Docker垃圾清理》

《Kubernetes(k8s)底层网络原理刨析》

《容器环境下Node.js的内存管理》

《MySQL 快速创建千万级测试数据》

《Linux 与 Unix 到底有什么不同?》

《浅谈几种常见 RAID 的异同》

《Git 笔记-程序员都要掌握的 Git》

《老司机必须懂的MySQL规范》

《Docker中Image、Container与Volume的迁移》

《漫画|如何用Kubernetes搞定CICD》

《写给前端的Docker实战教程》

《Linux 操作系统知识地图2.0,我看行》

《16个概念带你入门 Kubernetes》

《程序员因接外包坐牢456天,长文叙述心酸真实经历》

《IT 行业老鸟,有话对你说》

《HTTPS 为什么是安全的?说一下他的底层实现原理?


免责声明:本文内容来源于网络,所载内容仅供参考。转载仅为学习和交流之目的,如无意中侵犯您的合法权益,请及时联系Docker中文社区!



文章来源: http://mp.weixin.qq.com/s?__biz=MzI1NzI5NDM4Mw==&mid=2247495273&idx=1&sn=2e3361ab8475e848383e32c0b004df3c&chksm=ea1b0729dd6c8e3fc2c553dac6bb8b63e359c532d492a6450503adf1afb22a4efcb9985114f2#rd
如有侵权请联系:admin#unsafe.sh