当前位置: 首页 > news >正文

【Project】基于Prometheus监控docker平台

一、设计背景

1.1项目简介

本项目旨在创建一个全面的容器化应用程序监控解决方案,基于Prometheus监控Docker平台上的各种服务。在当今的软件开发环境中,容器化技术已成为一种关键的工具,使应用程序能够更快速、可靠地交付和扩展。然而,随着容器数量的增加和复杂性的提高,监控这些容器化服务的性能和健康状态变得至关重要。通过这个项目,我们的目标是提供一个完善的监控解决方案,帮助开发人员、系统管理员和运维团队更好地理解和管理他们的容器化应用程序。这将有助于提高应用程序的稳定性、可用性和性能,从而促进更快速、高效的软件开发和部署。

1.2课题目标

随着信息技术的不断发展,容器化技术已经成为现代应用程序开发和部署的主要趋势之一。Docker等容器平台的出现为应用程序的快速交付和部署提供了便利,然而,随之而来的挑战是如何有效地监控和管理这些容器化服务。在这个背景下,本毕业设计项目选择了基于Prometheus监控Docker平台作为研究课题。Prometheus作为一种开源的监控和警报工具,已经在容器环境中得到广泛应用,但如何将其有效地集成到Docker平台中,以确保容器化应用的性能、可用性和可伸缩性,仍然是一个具有挑战性的问题。因此,本项目旨在研究和实现一个可靠的监控解决方案,以满足容器化应用的监控需求。

二、设计思路

2.1 开发环境与工具

使用到的工具为:

VMware Workstation:VMware Workstation是一款虚拟机软件,可以用于创建和管理虚拟机。它提供了一个可视化界面,使用户可以在单个物理主机上同时运行多个虚拟机,以便在不同的操作系统环境中进行开发、测试或演示。

Centos7.9.2009:Centos7.9.2009是一种基于Linux的操作系统,它被广泛用作服务器操作系统。Centos提供了稳定、安全和可靠的基础系统,可以作为Docker平台的基础环境。

Docker:Docker是一种开源的容器化平台,它使得应用程序和其依赖项可以打包成轻量级、可移植的容器。通过使用Docker,开发人员可以更方便地构建、部署和管理应用程序,实现快速交付和跨平台运行。

Grafana Enterprise:Grafana Enterprise是一款功能强大的数据可视化工具。它提供了丰富的图表、面板和仪表盘,可以将来自各种数据源的指标数据进行可视化展示和交互式探索,帮助用户更好地理解和分析数据。

Alertmanager:Alertmanager是一种用于处理和管理告警的服务。它可以接收来自监控系统(如Prometheus)的告警通知,并根据预定义的规则进行分组、去重、静默或发送给相应的接收者,以便及时响应和解决问题。

Node Exporter:Node Exporter是用于收集主机指标数据的一个Prometheus导出器。它可以在主机上运行,定期采集主机的硬件和操作系统指标,并将其暴露给Prometheus进行监控和存储。

Prometheus:Prometheus是一款开源的监控和警报工具。它提供了强大的时间序列数据采集、存储和查询功能,能够监控多种数据源的指标,并支持设定灵活的告警规则。Prometheus还与Grafana等工具紧密集成,实现数据的可视化和分析。

表 2-1 开发环境

工具作用
VMware Workstation创建虚拟机
Centos7.9.2009作为平台基础系统
Docker容器平台
grafana-enterprise数据可视化
alertmanager告警服务
node_exporter收集数据服务
prometheus监控和警报工具

2.2 系统版本

以下是当前工具和系统使用的版本信息。

表 2-2 系统版本

系统版本
VMware Workstation pro16
Centos77.9.2009
docker18.06.3
grafana-enterprise9.4.3
alertmanager0.25.
node_exporter1.5.0
prometheus2.37.6

2.3 系统设计

这个系统设计旨在实现全面的监控,包括自身、Docker平台、以及Docker上运行的Nginx和MySQL,并将监控数据可视化通过Grafana展现。系统架构包括Prometheus服务器作为核心组件,负责数据采集和存储,Node Exporter用于监控宿主机系统性能,Docker监控通过cAdvisor或Docker自身的指标监测容器,Nginx Exporter用于收集Nginx服务器的性能数据,而MySQL Exporter则从MySQL数据库中提取性能指标。监控数据汇总后通过Grafana连接到Prometheus数据源,实现实时监控和创建仪表板。监控数据的采集和存储通过Prometheus进行,它定期从各个目标中收集性能数据,并存储在其内部数据库中,提供强大的查询和检索功能。最终,Grafana用于创建自定义仪表板,可视化展示监控数据,帮助实时监测系统和应用程序的性能,以及分析历史趋势。整个系统设计旨在提供全面的监控解决方案,以便有效地管理和优化运行中的自身、Docker平台、Nginx和MySQL等组件。

三、需求分析

3.1 项目平台要求

Docker平台搭建和管理需求:用户应能够轻松地搭建和管理Docker容器平台,包括容器编排和集群管理平台应支持多种操作系统和云环境,以满足不同用户的需求。

Prometheus集成和配置需求:用户应能够方便地配置Prometheus以监控Docker平台上的容器和服务,支持多个Prometheus实例的集成,以适应不同的监控需求。支持数据收集和存储的灵活性,以满足各种监控数据的需求。

监控规则和告警需求:用户应能够定义自定义监控规则,以检测容器和服务的性能问题,应支持告警规则的设置,以及多种告警通知渠道,如邮件、短信等。用户应能够灵活地调整告警阈值和策略,以适应不同应用的需求。

可视化和仪表板需求:系统应提供直观的仪表板和可视化工具,以帮助用户监控容器化应用程序的性能和状态。仪表板应支持自定义配置,以满足不同用户的可视化需求。用户应能够生成和导出有用的监控报告,以便进行性能分析和决策支持。

安全性和权限需求:系统应具有强大的安全性措施,包括身份验证、授权和数据加密,以保护监控数据的完整性和保密性,应支持多级权限管理,以确保不同用户具有适当的访问权限。

可扩展性和性能需求:系统应具备良好的可扩展性,以适应不断增长的容器数量和监控需求,应能够高效处理大量的监控数据,以保持系统的性能稳定。

文档和培训需求:系统应提供清晰的文档和培训材料,以帮助用户快速上手和有效使用监控工具。

3.2 监控需求分析

节点监控:监控Docker主机的硬件资源利用率,包括CPU、内存、磁盘和网络等指标。这可以通过Prometheus的节点导出器(例如node_exporter)实现。

容器监控:监控Docker容器的运行状态和资源消耗情况,包括CPU使用率、内存使用量、网络流量和磁盘I/O等指标。可以使用cAdvisor或者Docker自身的监控API获取容器的指标,并由Prometheus进行采集和存储。

服务健康监测:监控Docker中运行的服务的可用性和性能。可以使用Prometheus的黑盒监测(Blackbox Exporter)对服务进行定期的HTTP或TCP健康检查,并记录响应时间、状态码等指标。

日志监控:集成日志收集工具(如ELK/EFK)以监控Docker容器的日志输出。可以使用Filebeat将容器日志发送到Logstash/Elasticsearch/Fluentd等进行处理和存储,并通过Prometheus的日志导出器进行查询和分析。

告警与警报:设置告警规则,当某个指标超过阈值或触发特定条件时,发送警报给运维人员或团队。Prometheus具有灵活的告警管理机制,可以根据业务需求设置告警规则,并通过邮件、短信、Slack等方式发送警报。

可视化与报表:使用Grafana等工具构建监控仪表盘,将采集到的指标进行可视化展示,以便查看和分析。可以创建图表、面板和报表来监控Docker平台的整体状态和趋势。

五、系统实现

5.1 部署prometheus

5.1.1 服务器物理配置规划

服务器的硬件配置如下。

表 5-1 配置规划

角色系统架构内存大小核心数量
prometheusCentos7.9.20094G4cpu
dockerCentos7.9.20098G8cpu

5.1.2 IP地址、主机名称规划

服务器的IP地址规划如下。

表 5-2 主机ip地址

**IP **地址主机名角色
网卡1:192.168.100.250 nat模式Prometheus监控服务器
网卡1:192.168.100.251 nat模式Docker容器服务器

5.1.3 环境准备

修改服务器名称,关闭防火墙,并创建用于运行Prometheus的用户。

Prometheus节点


#修改服务器名称
hostnamectl set-hostname Prometheus
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
#创建prometheus工作目录
mkdir -p /opt/prometheus/
#创建运行Prometheus服务的用户
useradd -M -s /usr/sbin/nologin prometheus

5.1.4 软件包下载

去各组件的官方网站下载项目对应的软件包。

Prometheus节点

#Prometheus下载
wget [https://ghproxy.com/https://github.com/prometheus/prometheus/releases/download/v2.37.6/prometheus-2.37.6.linux-amd64.tar.gz](https://ghproxy.com/https://github.com/prometheus/prometheus/releases/download/v2.37.6/prometheus-2.37.6.linux-amd64.tar.gz)
#alertmanager下载
wget [https://ghproxy.com/https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz](https://ghproxy.com/https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz)
#node_exporter下载
wget [https://ghproxy.com/https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz](https://ghproxy.com/https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz)
#grafana下载
wget [https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.3.linux-amd64.tar.gz](https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.3.linux-amd64.tar.gz)

5.1.5 解压软件包

解压下载的软件包。

#解压所有软件包
tar -zxvf alertmanager-0.25.0.linux-amd64.tar.gz -C /opt/prometheus/
tar -zxvf grafana-enterprise-9.4.3.linux-amd64.tar.gz -C /opt/prometheus/
tar -zxvf prometheus-2.37.6.linux-amd64.tar.gz -C /opt/prometheus/
tar -zxvf node_exporter-1.5.0.linux-amd64.tar.gz -C /opt/prometheus/
#重新命名软件包
mv /opt/prometheus/node_exporter-1.5.0.linux-amd64/ /opt/prometheus/node_exporter
mv /opt/prometheus/alertmanager-0.25.0.linux-amd64/  /opt/prometheus/alertmanager
mv /opt/prometheus/grafana-9.4.3/  /opt/prometheus/grafana
mv /opt/prometheus/prometheus-2.37.6.linux-amd64/  /opt/prometheus/prometheus

5.1.6 部署node_exporter服务

开始部署node_exporter服务,用于当前服务器的数据采集。

Prometheus节点


#编写systemd文件cat >> /usr/lib/systemd/system/node_exporter.service << EOF[Unit]Description=node_exporterDocumentation=https://prometheus.io/After=network.target[Service]User=prometheusGroup=prometheusExecStart=/opt/prometheus/node_exporter/node_exporterRestart=on-failure[Install]WantedBy=multi-user.targetEOF#递归的将用户和组改为prometheuschown -R prometheus:prometheus /opt/prometheus#重载systemd配置,并启动node_exporter服务systemctl daemon-reloadsystemctl start node_exportersystemctl enable node_exporter

查看node_exporter状态,浏览器访问http://prometheus_ip:9100/metrics查看node_exporter服务数据。


查看node_exporter状态

2 查看node_exporter网页数据

5.1.7 部署alertmanager服务

部署告警服务器。

Prometheus节点


#编写systemd文件cat >> /usr/lib/systemd/system/alertmanager.service << EOF[Unit]Description=Alert ManagerWants=network-online.targetAfter=network-online.target[Service]Type=simpleUser=prometheusGroup=prometheusExecStart=/opt/prometheus/alertmanager/alertmanager \--config.file=/opt/prometheus/alertmanager/alertmanager.yml \--storage.path=/opt/prometheus/alertmanager/dataRestart=always[Install]WantedBy=multi-user.targetEOF#递归的将用户和组改为prometheuschown -R prometheus:prometheus /opt/prometheus#重载systemd配置,并启动alertmanager服务systemctl daemon-reloadsystemctl start alertmanagersystemctl enable alertmanager

查看alertmanager状态,浏览器访问http://prometheus_ip: 9093/#/status查看alertmanager服务状态。

查看alertmanager状态

图5-4 alertmanager服务状态

5.1.8 部署prometheus服务

部署普罗米修斯服务,修改对应的配置文件,正式启动监控服务。

Prometheus节点


#编写systemd文件cat >> /usr/lib/systemd/system/prometheus.service << EOF[Unit]Description=Prometheus ServerDocumentation=https://prometheus.io/docs/introduction/overview/After=network-online.target[Service]Type=simpleUser=prometheusGroup=prometheusRestart=on-failureExecStart=/opt/prometheus/prometheus/prometheus \--config.file=/opt/prometheus/prometheus/prometheus.yml \--storage.tsdb.path=/opt/prometheus/prometheus/data \--storage.tsdb.retention.time=60d \--web.enable-lifecycle[Install]WantedBy=multi-user.targetEOF#配置告警规则cat >> /opt/prometheus/prometheus/alert.yml << EOFgroups:- name: Prometheus alertrules:# 对任何实例超过30s无法联系的情况发出警报- alert: 服务告警expr: up == 0for: 30slabels:severity: criticalannotations:instance: "{{ $labels.instance }}"description: "{{ $labels.job }} 服务已关闭"EOF#修改prometheus.yml配置cat > /opt/prometheus/prometheus/prometheus.yml << EOF# my global configglobal:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Alertmanager configurationalerting:alertmanagers:- static_configs:- targets:- localhost:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files:- "alert.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs:# The job name is added as a label  to any timeseries scraped from this config.- job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]- job_name: 'alertmanager'scrape_interval: 15sstatic_configs:- targets: ['localhost:9093']- job_name: 'node-exporter'scrape_interval: 15sstatic_configs:- targets: ['localhost:9100']labels:instance: Prometheus服务器EOF#递归的将用户和组改为prometheuschown -R prometheus:prometheus /opt/prometheus#重载systemd配置,并启动prometheus服务systemctl daemon-reloadsystemctl start prometheussystemctl enable prometheus

查看prometheus状态,浏览器访问http://prometheus_ip: 9090查看三个服务状态是否正常。

5 查看prometheus状态

6查看三个服务状态

5.1.9 部署grafana服务

部署grafana实现数据的可视化,对接普罗米修斯。

Prometheus节点

#编写systemd文件cat >> /usr/lib/systemd/system/grafana-server.service << EOF[Unit]Description=Grafana serverDocumentation=http://docs.grafana.org[Service]Type=simpleUser=prometheusGroup=prometheusRestart=on-failureExecStart=/opt/prometheus/grafana/bin/grafana-server \--config=/opt/prometheus/grafana/conf/defaults.ini \--homepath=/opt/prometheus/grafana[Install]WantedBy=multi-user.targetEOF#递归的将用户和组改为prometheuschown -R prometheus:prometheus /opt/prometheus#重载systemd配置,并启动grafana服务systemctl daemon-reloadsystemctl start grafana-serversystemctl enable grafana-server

查看grafana状态,浏览器访问http://prometheus_ip:3000可以看到grafana的登录页面。

图5-7 查看grafana状态

图5-8 grafana的登录页面

5.1.10 配置grafana对接Prometheus

浏览器访问http://prometheus_ip:3000登录grafana,账号密码默认为admin/admin,登录后提示修改密码。

图5-9 登录配置

修改完密码后,我们配置grafana的数据源为Prometheus,点击左下角“设置图标”点击Data sources 点击Prometheus。

0 配置数据源

设置Prometheus服务地址,这里两个服务都在同一台主机可以直接使用localhost,点击save&test保存测试能否成功。

1 配置Prometheus地址

2 保存测试数据源

设置好数据源后,我们需要设置node_exporter的dashboard方便我们观察到监控数据。

3 进入配置dashboard界面

4 配置dashboard-json

关于配置dashboard的方法有两种,一种是上传json文件,一种是以id的方式配置,获取id和json文件的方式需要访问https://grafana.com/grafana/dashboards/因为网络原因,我们此次使用提前准备的json文件配置。

5 node_exporter-dashboard配置

6 可以复制id或者下载json文件

上传json文件后,进行基本的设置,设置完成后点击import,即可配置完毕,查看到本机linux服务器数据仪表盘。

基本配置

Linux服务器数据dashboard

5.2 部署docker

5.2.1 基本环境配置

配置docker主机的主机名,和基本的环境配置,关闭防火墙等。

#docker节点执行#修改主机名hostnamectl set-hostname docker-server#关闭防火墙systemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

5.2.2 部署docker服务

使用docker提供的网络源安装docker服务器,并且配置阿里云镜像加速器。

docker节点执行


#安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo [http://download.docker.com/linux/centos/docker-ce.repo](http://download.docker.com/linux/centos/docker-ce.repo)#加载元数据sudo yum makecache fast#安装dockeryum -y install docker-ce-18.06.3.ce-3.el7yum -y install docker-composemkdir -p /etc/dockercat >> /etc/docker/daemon.json <<EOF{"registry-mirrors":["https://fem5eo07.mirror.aliyuncs.com"]}EOF#启动dockersystemctl start dockersystemctl enable docker

5.2.3 部署cadvisor容器

部署docker的数据采集容器。

#docker节点执行#拉取镜像文件docker pull google/cadvisor#编写docker-compose.yaml文件cat >> docker-compose.yaml << EOFversion: "3.0"services:monitor:container_name: cadvisorimage: google/cadvisorrestart: alwaysvolumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:roports:- 8080:8080EOF#启动容器docker-compose up -d#查看状态[root@docker-server ~]# docker-compose psName                Command               State           Ports--------------------------------------------------------------------------cadvisor   /usr/bin/cadvisor -logtostderr   Up      0.0.0.0:8080->8080/tcp.

使用浏览器访问cadvisor服务http://192.168.100.251:8080/metrics,查看metrics数据。


metrics数据

5.2.4 配置Prometheus获取cadvisor服务数据

Cadvisor容器获取了docker容器平台的大部分数据,并且数据格式符合Prometheus的规范,Prometheus可以直接获取数据。

#Prometheus节点执行cat >>/opt/prometheus/prometheus/prometheus.yml<< EOF- job_name: 'Docker'scrape_interval: 15sstatic_configs:- targets: ['192.168.100.251:8080']labels:instance: Docker服务器EOF#热加载配置curl -X POST http://localhost:9090/-/reload

访问http://192.168.100.250:9090/targets?search=查看Prometheus是否成功添加了docker平台数据,

0 查看状态

5.2.5 配置docker监控的dashboard

访问grafana的dashboard-import,导入docker-dashboard的dashboard-ID号11600。

1添加docker-dashboard JSON文件

2 查看dashboard

5.2.6 配置docker的告警配置文件

修改普罗米修斯的配置文件,编写一个告警规则。

#Prometheus节点执行#创建文件夹mkdir -p /opt/prometheus/prometheus/rules/#编辑prometheus.ymlvi prometheus.yml#添加红色配置rule_files:- "alert.yml"<font style="color:red;">  - "rules/*.yml"</font>#编写告警配置文件cat >> /opt/prometheus/prometheus/rules/docker.yml << EOFgroups:- name: DockerContainersrules:- alert: Containerkilledexpr: time() - container_last_seen > 60for: 0mlabels:severity: warningannotations:isummary: "Docker容器被杀死 容器: $labels.instance"description: "{{ $value }}个容器消失了"- alert: ContainerAbsentexpr: absent(container_last_seen)for: 5mlabels:severity: warningannotations:summary: "无容器 容器: $labels.instance"description: "5分钟检查容器不存在,值为: {{ $value }}"EOF#重新加载配置chown -R prometheus:prometheus /opt/Prometheuscurl -X POST http://localhost:9090/-/reload

访问Prometheus查看是否成功。

docker告警

5.3 监控docker平台服务

5.3.1 监控docker-nginx容器

5.3.1.1部署nginx容器

部署用于测试的nginx容器。

#docker节点#创建目录mkdir -p /root/nginx/conf.d#编写nginx配置文件cat >> /root/nginx/conf.d/server.conf << EOFserver {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;
}
}
EOF#编写nginx的docker-compose.yamlcat >>/root/nginx/docker-compose.yaml<< EOF
version: "3.0"
services:nginx:image: nginxcontainer_name: nginxports:- 80:80volumes:- /root/nginx/conf.d/:/etc/nginx/conf.d/- /root/nginx/html:/usr/share/nginx/html- /root/nginx/log:/var/log/nginx
EOF
#检查是否安装with-http_stub_status_module模块
docker-compose exec  nginx  nginx -V |grep -o with-http_stub_status_module
with-http_stub_status_module
#开启stub_status配置
cat > /root/nginx/conf.d/server.conf << EOF
server {listen       80;server_name  localhost;location /stub_status {stub_status on;access_log off;#allow nginx_exporter的ip;allow 0.0.0.0/0;deny all;}location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;
}
}
EOF#nginx重新加载配置文件docker exec -it nginx nginx -s reload#检查是否正常开启[root@docker-server nginx]# curl 192.168.100.251/stub_statusActive connections: 1server accepts handled requests1 1 1Reading: 0 Writing: 1 Waiting: 0
5.3.1.2部署nginx-exporter

部署用于收集nginx数据的exporter


#docker节点#创建目录mkdir -p /root/nginx/mon#编写nginx-exporter的docker-compose.yamlcat >>/root/nginx/mon/docker-compose.yaml<< EOFversion: '3.0'services:nginx_exporter:image: nginx/nginx-prometheus-exporter:0.11container_name: nginx_exporterhostname: nginx_exportercommand:- '-nginx.scrape-uri=http://192.168.100.251/stub_status'restart: alwaysports:- "9113:9113"EOF#启动nginx_exporterdocker-compose up -d#检查状态[root@docker-server mon]# docker-compose psName                   Command               State           Ports--------------------------------------------------------------------------------nginx_exporter   /usr/bin/nginx-prometheus- ...   Up      0.0.0.0:9113->9113/tcp添加到prometheus配置。#prometheus节点#加入以下配置vi /opt/prometheus/prometheus/prometheus.yml- job_name: 'Docker-nginx'scrape_interval: 15sstatic_configs:- targets: ['192.168.100.251:9113']labels:instance: Docker服务器nginx#热加载配置curl -X POST http://localhost:9090/-/reload

访问grafana的dashboard-import,导入nginx-dashboard-ID号12708,即可添加nginx的dashboard。

4 nginx-dashboard

5.3.1.3配置nginx的告警设置

配置nginx的邮箱告警规则。

#prometheus节点#编写告警配置文件cat >>/opt/prometheus/prometheus/rules/nginx.yml<< EOFgroups:- name: Nginxrules:- alert: NginxDownexpr: nginx_up == 0for: 30slabels:severity: criticalannotations:isummary: "nginx异常,实例:{{ $labels.instance }}"description: "{{ $labels.job }} nginx已关闭"EOF#重新加载配置chown -R prometheus:prometheus /opt/prometheuscurl -X POST http://localhost:9090/-/reload

访问Prometheus查看是否成功。

mysql告警

5.3.2 监控docker-mysql容器

5.3.2.1部署mysql容器

部署mysql测试容器。


#docker节点#创建目录mkdir /root/mysql#编写docker-compose.yamlcat >> docker-compose.yaml<< EOFversion: '3.0'services:db:image: mysqlrestart: alwayscontainer_name: mysqlports:- 3306:3306environment:MYSQL_DATABASE: prometheusMYSQL_USER: user1MYSQL_PASSWORD: '000000'MYSQL_RANDOM_ROOT_PASSWORD: '000000'EOF#部署mysqldocker-compose up -d#查看状态docker-compose ps[root@docker-server mysql]# docker-compose psName              Command             State                 Ports-------------------------------------------------------------------------------mysql   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
5.3.2.2部署mysqld-exporter‘

部署用于采集mysql容器数据的exporter。


#docker节点执行#创建工作目录mkdir /root/mysql/mon#编写docker-compose.yamlcat >> docker-compose.yaml<< EOFversion: '3.0'services:mysql-exporter:image: prom/mysqld-exportercontainer_name: mysqld-exporterrestart: alwayscommand:- '--collect.info_schema.processlist'- '--collect.info_schema.innodb_metrics'- '--collect.info_schema.tablestats'- '--collect.info_schema.tables'- '--collect.info_schema.userstats'- '--collect.engine_innodb_status'environment:- DATA_SOURCE_NAME=prometheus:000000@(192.168.100.251:3306)/ports:- 9104:9104EOF#部署mysqld-exporterdocker-compose up -d#查看状态[root@docker-server mon]# docker-compose psName                    Command               State           Ports---------------------------------------------------------------------------------mysqld-exporter   /bin/mysqld_exporter --col ...   Up      0.0.0.0:9104->9104/tcp添加到prometheus配置。#prometheus节点#加入以下配置vi /opt/prometheus/prometheus/prometheus.yml- job_name: 'Docker-mysql'scrape_interval: 15sstatic_configs:- targets: ['192.168.100.251:9104']labels:instance: Docker服务器mysql#热加载配置
curl -X POST http://localhost:9090/-/reload

访问grafana的dashboard-import,导入7362和9625,分别为mysql数据库,和mysql数据表的dashboard-ID号。

6 数据库dashboard

27数据表dashboard

5.3.2.3配置mysql的告警设置

配置mysql的邮箱告警配置文件。

#prometheus节点#编写告警配置文件cat >>/opt/prometheus/prometheus/rules/mysql.yml<< EOFgroups:- name: DockerContainersrules:- alert: Containerkilledexpr: time() - container_last_seen > 60for: 0mlabels:severity: warningannotations:isummary: "Docker容器被杀死 容器: {{ $labels.instance }}"description: "{{ $value }}个容器消失了"- alert: ContainerAbsentexpr: absent(container_last_seen)for: 5mlabels:severity: warningannotations:summary: "无容器 容器: {{ $labels.instance }}"description: "5分钟检查容器不存在,值为: {{ $value }}"EOF#重新加载配置chown -R prometheus:prometheus /opt/Prometheuscurl -X POST http://localhost:9090/-/reload

访问Prometheus查看是否成功。

8 mysql告警

5.4 alertmanager配置163邮箱告警

5.4.1 配置163邮箱

登录配置163邮箱开启POP3/SMTP服务。

9配置开启服务

0 开启服务

开启后会获得一个授权码,后续我们将使用这个授权码配置alertmanager.yml文件对接我们的163邮箱。

5.4.2 修改alertmanager配置

修改alertmanager配置文件,将我们的邮箱添加到alertmanager。


#Prometheus节点执行cat  >>alertmanager.yml<< EOFglobal:
#配置告警邮箱smtp_smarthost: 'smtp.163.com:465'
#163服务器smtp_from: 'a351719672@163.com'
#发邮件的邮箱smtp_auth_username: 'a351719672@163.com'
#发邮件的邮箱用户名smtp_auth_password: 'xxxxx'
#发邮件的邮箱密码smtp_require_tls: false
#进行tls验证
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'email'
#全局报警组,这个参数必选receivers:- name: 'email'email_configs:- to: '351719672@qq.com'#收邮件的邮箱inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']EOF#热加载配置curl -X POST http://localhost:9093/-/reload

5.4.3 测试告警服务

测试各个告警配置是否能成功生效

5.4.3.1 Nginx告警测试

停止nginx,测试nginx存活检测是否正常.

#docker节点执行

#测试nginx存活检测是否正常

[root@docker-server ~]# docker stop nginx

nginx

实例转为pending,进而变而FIRING。

nginx状态pending

nginx状态firing

可以看到邮箱正常接收到了nginx的告警。

邮箱nginx告警

5.4.3.2 Mysql告警测试

测试mysql存活检测是否正常

#docker节点执行

[root@docker-server ~]# docker stop mysql

Mysql

实例转为pending,进而变而FIRING。

4 mysql状态pending

5 mysql状态firing

可以看到邮箱正常接收到了mysql的告警。

邮箱mysql告警

5.4.3.3 docker容器告警测试

测试docker检测是否正常

#docker节点执行

#测试docker检测是否正常

[root@docker-server cadvisor]# docker stop cadvisor

cadvisor

实例转为pending进而变而FIRING。

docker状态pending

docker状态firing

可以看到邮箱正常接收到了docker的告警。

邮箱docker告警

相关文章:

【Project】基于Prometheus监控docker平台

一、设计背景 1.1项目简介 本项目旨在创建一个全面的容器化应用程序监控解决方案&#xff0c;基于Prometheus监控Docker平台上的各种服务。在当今的软件开发环境中&#xff0c;容器化技术已成为一种关键的工具&#xff0c;使应用程序能够更快速、可靠地交付和扩展。然而&…...

Binder通信协议

目录 一,整体架构 二,Binder通信协议 三&#xff0c;binder驱动返回协议 四&#xff0c;请求binder驱动协议 一,整体架构 二,Binder通信协议 三&#xff0c;binder驱动返回协议 binder_driver_return_protocol共包含18个命令&#xff0c;分别是&#xff1a; 四&#xff0c…...

使用 Postman 访问 Keycloak 端点

1. 引言 在本教程中&#xff0c;我们将首先快速回顾 OAuth 2.0、OpenID 和 Keycloak。然后&#xff0c;我们将了解 Keycloak REST API 以及如何在 Postman 中调用它们。 2. OAuth 2.0 OAuth 2.0 是一个授权框架&#xff0c;它允许经过身份验证的用户通过令牌向第三方授予访问…...

uniapp-X 对象动态取值

有个对象&#xff0c;例如 const data{age:12,list:[1,2,3,4]} 有个函数如下 export function getValueByPath(obj:UTSJSONObject, path:string):any {const current obj.getAny(path) as any;// 返回最终的值return current; } 期待 通过执行getValueByPath("xx.xx…...

建模软件Blender与Blender GIS插件安装教程

Blender&#xff08;blender.org - Home of the Blender project - Free and Open 3D Creation Software&#xff09;是一款功能强大的开源3D创作套件&#xff0c;它支持整个3D管道—建模、渲染、动画制作、模拟、渲染、合成和运动跟踪&#xff0c;甚至视频编辑和游戏制作&…...

数据解析与处理

数据解析与处理是数据科学、分析或开发中的核心步骤&#xff0c;涉及从原始数据中提取、清洗、转换和存储有效信息的过程。 一、数据解析 数据解析就是将原始数据&#xff08;如文本、二进制、日志、API响应等&#xff09;转换为结构化格式&#xff08;如表格、字典、JSON等&…...

强化学习概览

强化学习的目标 智能体&#xff08;Agent&#xff09;通过与环境&#xff08;Environment&#xff09;交互&#xff0c;学习最大化累积奖励&#xff08;Cumulative Reward&#xff09;​的策略。 数学抽象 马尔科夫决策过程&#xff08;MDP&#xff09; 收益 由于马尔科夫决…...

如何在netlify一键部署静态网站

1. 准备你的项目 确保你的静态网站文件&#xff08;如 HTML、CSS、JavaScript、图片等&#xff09;都在一个文件夹中。通常&#xff0c;项目结构如下&#xff1a; my-static-site/ ├── index.html ├── styles/ │ └── styles.css └── scripts/└── script.js…...

2024中国信通院“集智”蓝皮书合集(附下载)

【目 录】 1. 数字政府一体化建设蓝皮书&#xff08;2024年&#xff09; 2. 数字乡村发展实践蓝皮书&#xff08;2023年&#xff09; 3. 中国工业互联网发展成效评估报告&#xff08;2024年&#xff09; 4. 云计算蓝皮书&#xff08;2024年&#xff09; 5. 具身智能发展报告…...

springboot单机支持1w并发,需要做哪些优化

Spring Boot单机如何支持1万并发&#xff0c;需要做哪些优化。 首先&#xff0c;我得回想一下Spring Boot处理高并发的关键点在哪里。可能涉及到多个层面&#xff0c;比如Web服务器配置、数据库优化、代码层面的调整&#xff0c;还有JVM调优之类的。 首先&#xff0c;用户可能…...

HBuilderx 插件开发变量名称翻译 ,中文转(小驼峰,大驼峰,下划线,常量,CSS类名)

HBuilderx 插件开发变量名称翻译 &#xff0c;中文转&#xff08;小驼峰&#xff0c;大驼峰&#xff0c;下划线&#xff0c;常量&#xff0c;CSS类名&#xff09; 插件开发文档 工具HBuilderx &#xff0c;创建项目 创建成功后目录 插件需求 开发时 用来将中文转为&#xff0…...

岳阳市美术馆预约平台(小程序论文源码调试讲解)

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…...

C++ | 高级教程 | 文件和流

&#x1f47b; 概念 文件流输出使用标准库 fstream&#xff0c;定义三个新的数据类型&#xff1a; 数据类型描述ofstream输出文件流&#xff0c;用于创建文件并向文件写入信息。ifstream输入文件流&#xff0c;用于从文件读取信息。fstream文件流&#xff0c;且同时具有 ofst…...

Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用

滑模控制&#xff08;Sliding Mode Control&#xff09;算法详解 一、基本原理 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种变结构控制方法&#xff0c;通过设计一个滑模面&#xff08;Sliding Surface&#xff09;&#xff0c;迫使系统状态在有限时间内…...

JVM相关面试题

1. 类加载与双亲委派机制 聊一下你对类加载器的理解。 类加载器是JVM用来加载类文件到内存的组件。它负责将字节码文件解析为java.lang.Class实例&#xff0c;并存储到运行时数据区的方法区中。类加载器分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLo…...

WiFi定位:宠物安全的“秘密武器”

从「全网寻狗」到「实时掌控」的进化史 凌晨三点收到邻居转发的「寻狗启事」&#xff0c;配图里的金毛犬项圈上赫然挂着某品牌定位器 —— 这样的魔幻场景在养宠圈并不罕见。随着宠物经济突破 3000 亿规模&#xff0c;智能定位器早已从「小众玩具」变成「刚需装备」。但你知道…...

【git】【reset全解】Git 回到上次提交并处理提交内容的不同方式

Git 回到上次提交并处理提交内容的不同方式 在 Git 中&#xff0c;若要回到上次提交并对提交内容进行不同处理&#xff0c;可使用 git reset 命令搭配不同选项来实现。以下为你详细介绍操作步骤及各选项的作用。 1. 查看提交历史 在操作之前&#xff0c;可通过以下命令查看提…...

【leetcode hot 100 11】移动零

一、暴力解法&#xff1a;两个 for 循环&#xff0c;外层循环遍历所有可能的左边界&#xff0c;内层循环遍历所有可能的右边界 class Solution {public int maxArea(int[] height) {int max_area0;for(int i0; i<height.length; i){for(int ji1; j<height.length; j){in…...

DeepSeek 部署实战:Ollama + 多客户端 + RAG

DeepSeek 部署实战&#xff1a;Ollama 多客户端 RAG 一、前置条件 &#xff08;一&#xff09;硬件要求 GPU&#xff1a;强烈建议使用 NVIDIA RTX 3090 或更高型号&#xff0c;显存至少 24GB。小显存跑大模型会遇到诸多问题&#xff0c;本人亲测 2080Ti 跑模型体验不佳。内…...

Linux通过设备名称如何定位故障硬盘

因为ceph集群的服务器硬盘都是直通的&#xff0c;当我们发现有硬盘存储坏道需要更换硬盘&#xff0c;但是因为盘序可能不是连续的&#xff0c;无法定位服务器上那块硬盘是故障的&#xff0c;如果冒然测试可能把正常的硬盘拔出&#xff0c;得不偿失&#xff0c;所以就写一下我定…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...