【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_exporter

Documentation=https://prometheus.io/

After=network.target

[Service]

User=prometheus

Group=prometheus

ExecStart=/opt/prometheus/node_exporter/node_exporter

Restart=on-failure

[Install]

WantedBy=multi-user.target

EOF

#递归的将用户和组改为prometheus

chown -R prometheus:prometheus /opt/prometheus

#重载systemd配置,并启动node_exporter服务

systemctl daemon-reload

systemctl start node_exporter

systemctl 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 Manager

Wants=network-online.target

After=network-online.target

 

[Service]

Type=simple

User=prometheus

Group=prometheus

ExecStart=/opt/prometheus/alertmanager/alertmanager \

  --config.file=/opt/prometheus/alertmanager/alertmanager.yml \

  --storage.path=/opt/prometheus/alertmanager/data

 

Restart=always

 

[Install]

WantedBy=multi-user.target

EOF

#递归的将用户和组改为prometheus

chown -R prometheus:prometheus /opt/prometheus

#重载systemd配置,并启动alertmanager服务

systemctl daemon-reload

systemctl start alertmanager

systemctl 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 Server

Documentation=https://prometheus.io/docs/introduction/overview/

After=network-online.target

 

[Service]

Type=simple

User=prometheus

Group=prometheus

Restart=on-failure

ExecStart=/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.target

EOF

#配置告警规则

cat >> /opt/prometheus/prometheus/alert.yml << EOF

groups:

- name: Prometheus alert

  rules:

  # 对任何实例超过30s无法联系的情况发出警报

  - alert: 服务告警

    expr: up == 0

    for: 30s

    labels:

      severity: critical

    annotations:

      instance: "{{ $labels.instance }}"

      description: "{{ $labels.job }} 服务已关闭"

EOF

#修改prometheus.yml配置

cat > /opt/prometheus/prometheus/prometheus.yml << EOF

# my global config

global:

  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 configuration

alerting:

  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: 15s

    static_configs:

    - targets: ['localhost:9093']

 

  - job_name: 'node-exporter'

    scrape_interval: 15s

    static_configs:

    - targets: ['localhost:9100']

      labels:

        instance: Prometheus服务器

EOF

#递归的将用户和组改为prometheus

chown -R prometheus:prometheus /opt/prometheus

#重载systemd配置,并启动prometheus服务

systemctl daemon-reload

systemctl start prometheus

systemctl 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 server

Documentation=http://docs.grafana.org

[Service]

Type=simple

User=prometheus

Group=prometheus

Restart=on-failure

ExecStart=/opt/prometheus/grafana/bin/grafana-server \

  --config=/opt/prometheus/grafana/conf/defaults.ini \

  --homepath=/opt/prometheus/grafana

[Install]

WantedBy=multi-user.target

EOF

#递归的将用户和组改为prometheus

chown -R prometheus:prometheus /opt/prometheus

#重载systemd配置,并启动grafana服务

systemctl daemon-reload

systemctl start grafana-server

systemctl 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 firewalld

systemctl disable firewalld

setenforce 0

sed -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 lvm2

yum-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

#安装docker

yum -y install docker-ce-18.06.3.ce-3.el7

yum -y install docker-compose

mkdir -p /etc/docker

cat >> /etc/docker/daemon.json <<EOF

{

        "registry-mirrors":["https://fem5eo07.mirror.aliyuncs.com"]

}

EOF

#启动docker

systemctl start docker

systemctl enable docker

5.2.3 部署cadvisor容器

部署docker的数据采集容器。

#docker节点执行

#拉取镜像文件

docker pull google/cadvisor

#编写docker-compose.yaml文件

cat >> docker-compose.yaml << EOF

version: "3.0"

services:

  monitor:

    container_name: cadvisor

    image: google/cadvisor

    restart: always

    volumes:

      - /:/rootfs:ro

      - /var/run:/var/run:rw

      - /sys:/sys:ro

      - /var/lib/docker/:/var/lib/docker:ro

    ports:

      - 8080:8080

EOF

#启动容器

docker-compose up -d

#查看状态

[root@docker-server ~]# docker-compose ps

  Name                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: 15s

    static_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.yml

vi prometheus.yml

#添加红色配置

rule_files:

  - "alert.yml"

<font style="color:red;">  - "rules/*.yml"</font>

#编写告警配置文件

cat >> /opt/prometheus/prometheus/rules/docker.yml << EOF

groups:

- name: DockerContainers

  rules:

  - alert: Containerkilled

    expr: time() - container_last_seen > 60

    for: 0m

    labels:

      severity: warning

    annotations:

      isummary: "Docker容器被杀死 容器: $labels.instance"

      description: "{{ $value }}个容器消失了"

  - alert: ContainerAbsent

    expr: absent(container_last_seen)

    for: 5m

    labels:

      severity: warning

    annotations:

      summary: "无容器 容器: $labels.instance"

      description: "5分钟检查容器不存在,值为: {{ $value }}"

EOF

#重新加载配置

chown -R prometheus:prometheus /opt/Prometheus

curl -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 << EOF

server {
    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.yaml

cat >>/root/nginx/docker-compose.yaml<< EOF
version: "3.0"
services:
  nginx:
    image: nginx
    container_name: nginx
    ports:
     - 80:80
    volumes:
     - /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_status

Active connections: 1

server accepts handled requests

 1 1 1

Reading: 0 Writing: 1 Waiting: 0
5.3.1.2部署nginx-exporter

部署用于收集nginx数据的exporter


#docker节点

#创建目录

mkdir -p /root/nginx/mon

#编写nginx-exporter的docker-compose.yaml

cat >>/root/nginx/mon/docker-compose.yaml<< EOF

version: '3.0'

services:

  nginx_exporter:

    image: nginx/nginx-prometheus-exporter:0.11

    container_name: nginx_exporter

    hostname: nginx_exporter

    command:

     - '-nginx.scrape-uri=http://192.168.100.251/stub_status'

    restart: always

    ports:

    - "9113:9113"

EOF

#启动nginx_exporter

docker-compose up -d

#检查状态

[root@docker-server mon]# docker-compose ps

     Name                   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: 15s

    static_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<< EOF

groups:

- name: Nginx

  rules:

  - alert: NginxDown

    expr: nginx_up == 0

    for: 30s

    labels:

      severity: critical

    annotations:

      isummary: "nginx异常,实例:{{ $labels.instance }}"

      description: "{{ $labels.job }} nginx已关闭"

EOF

#重新加载配置

chown -R prometheus:prometheus /opt/prometheus

curl -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.yaml

cat >> docker-compose.yaml<< EOF

version: '3.0'

services:

  db:

    image: mysql

    restart: always

    container_name: mysql

    ports:

      - 3306:3306

    environment:

      MYSQL_DATABASE: prometheus

      MYSQL_USER: user1

      MYSQL_PASSWORD: '000000'

      MYSQL_RANDOM_ROOT_PASSWORD: '000000'

EOF

#部署mysql

docker-compose up -d

#查看状态

docker-compose ps

[root@docker-server mysql]# docker-compose ps

Name              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.yaml

cat >> docker-compose.yaml<< EOF

version: '3.0'

services:

  mysql-exporter:

    image: prom/mysqld-exporter

    container_name: mysqld-exporter

    restart: always

    command:

     - '--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:9104

EOF

#部署mysqld-exporter

docker-compose up -d

#查看状态

[root@docker-server mon]# docker-compose ps

     Name                    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: 15s
    static_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<< EOF

groups:

- name: DockerContainers

  rules:

  - alert: Containerkilled

    expr: time() - container_last_seen > 60

    for: 0m

    labels:

      severity: warning

    annotations:

      isummary: "Docker容器被杀死 容器: {{ $labels.instance }}"

      description: "{{ $value }}个容器消失了"

 

  - alert: ContainerAbsent

    expr: absent(container_last_seen)

    for: 5m

    labels:

      severity: warning

    annotations:

      summary: "无容器 容器: {{ $labels.instance }}"

      description: "5分钟检查容器不存在,值为: {{ $value }}"

EOF

#重新加载配置

chown -R prometheus:prometheus /opt/Prometheus

curl -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<< EOF

global:
#配置告警邮箱
  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: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: '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告警

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979964.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SV——Clocking block的应用

在system verilog中&#xff0c;clocking block是一种简化时钟域信号同步和采样的机制。可以帮助验证工程师简化复杂时序问题&#xff0c;尤其是在测试平台中&#xff0c;既要对信号进行驱动&#xff0c;又要对信号进行采样。 clocking block块一般有以下应用场景&#xff1a;…

RabbitMQ 的介绍与使用

一. 简介 1> 什么是MQ 消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已。 其主要用途&#xff1a;不同进程Process/线程T…

unity pico开发 一:环境准备

文章目录 前言一些容易混淆的概念下载SDK导入SDK配置环境注册PICO APP下载PDC 前言 本文将配置pico开发所有必须的环境 官方文档 一些容易混淆的概念 OpenXR&#xff1a;OpenXR是国际通用的vr开发协议&#xff0c;目的是为了解决各个硬件设备自己搞自己的sdk&#xff0c;导致…

Java数据结构_一篇文章了解常用排序_8.1

本文所有排序举例均默认为升序排列。 目录 1. 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想&#xff1a; 2.1.2 直接插入排序 2.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 2.2 选择排序 2.2.1 基本思想&#xff1a; 2.2.2 直接选择排…

Uniapp开发微信小程序插件的一些心得

一、uniapp 开发微信小程序框架搭建 1. 通过 vue-cli 创建 uni-ap // nodejs使用18以上的版本 nvm use 18.14.1 // 安装vue-cli npm install -g vue/cli4 // 选择默认模版 vue create -p dcloudio/uni-preset-vue plugindemo // 运行 uniapp2wxpack-cli npx uniapp2wxpack --…

【Mark】记录用宝塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加载失败问题

背景 想要用宝塔搭建worldpress&#xff0c;然后用域名直接转https&#xff0c;隐藏掉ipport。 结果被折磨了1天&#xff0c;一直在死活在301&#xff0c;127.0.0.1打转 还有css加载不了的情况 因为worldpress很多是301重定向的&#xff0c;所以改到最后我都不知道改了什么&am…

0x03 http协议和分层架构

HTTP协议 简介 Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应HTTP协议是无状态的协议&#xff…

汽车小助手智能体

汽车小助手&#xff1a;智能驱动汽车服务新体验 链接&#xff1a;文心智能体平台AgentBuilder | 想象即现实 文心智能体平台AgentBuilder&#xff0c;是百度推出的基于文心大模型的智能体平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的…

20250225-代码笔记03-class CVRPModel AND other class

文章目录 前言一、class CVRPModel(nn.Module):__init__(self, **model_params)函数功能函数代码 二、class CVRPModel(nn.Module):pre_forward(self, reset_state)函数功能函数代码 三、class CVRPModel(nn.Module):forward(self, state)函数功能函数代码 四、def _get_encodi…

十一、大数据治理平台总体功能架构

大数据治理平台的功能架构图中心主题&#xff1a;数据治理 核心重点是建立健全大数据资产管理框架&#xff0c;确保数据质量、安全性、可访问性和合规性。 大数据治理平台总体功能架构图 关键功能领域 1.数据资产平台&#xff08;左侧&#xff09; 此部分主要关注数据资产本身…

算法与数据结构(相交链表)

题目 思路 1.哈希集合 因为要求是否存在相交节点&#xff0c;那么我们就可以利用哈希集合先将listA链表里面的所有数据存入&#xff0c;然后访问listB&#xff0c;判断其是否有节点在哈希集合中&#xff0c;若存在&#xff0c;则说明此节点为相交的节点。若遍历完之后仍没有发…

git和gitee在idea中的使用

1.下载git 2.注册一个gitee且创建一个项目 3.在idea的plunge中下在gitee 4.登录gitee 别人使用的话复制 粘贴 commit提交到本地仓库 push推送到云端仓库

yolov8,yolo11,yolo12 服务器训练到部署全流程 笔记

正在进行中&#xff0c;随时更新 一. Anaconda配置 1.安装anaconda (1)下载.sh文件 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror (2)scp到服务器后&#xff0c;运行安装包 bash Anaconda3-2020.07-Linux-x86_64.sh (3)安装anacond…

4.3MISC流量分析练习-wireshark-https

流量分析题目的例题 1.了解wireshark的过滤方式 2.了解tls跟ssl协议基本还原 3.了解xor基本变换方式&#xff0c;获取flag 附件是一个流量包&#xff0c;打开之后有各种流量&#xff0c;但是分析无果&#xff0c;然后丢到kali中使用binwalk进行分析&#xff0c;发现有一个r…

【开源免费】基于SpringBoot+Vue.JS网络海鲜市场系统(JAVA毕业设计)

本文项目编号 T 222 &#xff0c;文末自助获取源码 \color{red}{T222&#xff0c;文末自助获取源码} T222&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【java】@Transactional导致@DS注解切换数据源失效

最近业务中出现了多商户多租户的逻辑&#xff0c;所以需要分库&#xff0c;项目框架使用了mybatisplus所以我们自然而然的选择了同是baomidou开发的dynamic.datasource来实现多数据源的切换。在使用初期程序运行都很好&#xff0c;但之后发现在调用com.baomidou.mybatisplus.ex…

Solana 核心概念全解析:账户、交易、合约与租约,高流量区块链技术揭秘!

目录 1.Solana 核心概念简述 1.1. 账户&#xff08;Account&#xff09; 1.2. 交易&#xff08;Transaction&#xff09; 1.3. 交易指令&#xff08;Instruction&#xff09; 1.4. SPL 代币 1.5. 合约&#xff08;Program&#xff09; 1.6. 租约&#xff08;Rent&#x…

StarRocks 在爱奇艺大数据场景的实践

作者&#xff1a;林豪&#xff0c;爱奇艺大数据 OLAP 服务负责人 小编导读&#xff1a; 本文整理自爱奇艺工程师在 StarRocks 年度峰会的分享&#xff0c;介绍了爱奇艺 OLAP 引擎演化及引入 StarRocks 后的效果。 在广告业务中&#xff0c;StarRocks 替换 ImpalaKudu 后&#x…

【Linux】Linux的进程控制

目录 1. 学习思维导图 2.进程创建&#xff08;fork&#xff09; 2.1 fork创建进程失败 3.进程终止 3.1 进程退出情况 3.1.1main函数 3.1.2 退出码 3.2 exit/_exit函数 1. exit() 函数 2. _exit() 函数 4.进程等待 4.1 实现进程等待的方法 wait/waitpid方法 区别&a…

ubuntu防火墙iptables

文章目录 步骤开启自启防火墙iptables规则链Chains的区别 在 Ubuntu 上使用 iptables 配置防火墙并保证服务可用 步骤 #防火墙状态 systemctl status iptables systemctl start iptables #开启防火墙并且开启22端口 systemctl start iptables && iptables -A INPUT -p…