Prometheus与Docker的监控和报警


介绍

Prometheus是一个开源的系统监控和警报工具,通过收集指标数据并提供查询和报警功能,帮助我们实时了解应用程序和系统的状态。而Docker是目前最流行的容器化平台,能够简化应用程序的部署和管理。结合Prometheus和Docker可以方便地监控和报警我们的容器化应用程序。

本文将介绍如何使用Prometheus监控Docker容器,并通过示例代码展示如何配置和使用Prometheus来监控Docker容器的指标数据,并设置报警规则。

安装和配置Prometheus

首先,我们需要安装和配置Prometheus。可以通过以下几个步骤来完成:

  1. 下载Prometheus的二进制文件并解压缩:
$ wget 
$ tar -xvzf prometheus-2.28.1.linux-amd64.tar.gz
$ cd prometheus-2.28.1.linux-amd64/
  1. 创建prometheus.yml配置文件:
$ vim prometheus.yml

在配置文件中添加以下内容:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9090', 'localhost:9100']
        labels:
          instance: 'docker-host'

这个配置文件定义了一个名为docker的作业,用于监控Docker容器。我们将在下一节中详细介绍如何配置Docker容器的监控。

  1. 启动Prometheus:
$ ./prometheus

现在,Prometheus已经在本地的9090端口上运行起来了。可以通过访问http://localhost:9090/来查看Prometheus的Web界面。

监控Docker容器

为了监控Docker容器,我们需要在容器内运行一个Prometheus的exporter。Prometheus exporter是一个用于从其他系统或服务中收集指标数据并提供给Prometheus的工具。

在这里,我们使用node_exporter作为Docker容器的exporter。首先,我们需要拉取并运行node_exporter容器:

$ docker run -d -p 9100:9100 --name node-exporter prom/node-exporter

以上命令会在本地运行一个名为node-exporter的Docker容器,并将容器的9100端口映射到主机的9100端口。

配置Prometheus的监控目标

现在,我们需要在Prometheus的配置文件prometheus.yml中添加刚才运行的node_exporter容器作为一个监控目标。修改配置文件如下:

scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9090', 'localhost:9100']
        labels:
          instance: 'docker-host'
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['localhost:9100']
        labels:
          instance: 'node-exporter'

在这里,我们添加了一个名为node-exporter的作业,配置node-exporter容器为监控目标。

查询和可视化指标

Prometheus提供了一个强大的查询语言PromQL,用于查询和分析指标数据。可以通过Prometheus的Web界面或API来执行查询。

以下是一些常见的查询示例:

  • 查询CPU使用率:
100 - (avg by (instance) (irate(node_cpu_seconds_total{job="node-exporter", mode="idle"}[5m])) * 100)
  • 查询内存使用量:
(node_memory_MemTotal_bytes{job="node-exporter"} - node_memory_MemAvailable_bytes{job="node-exporter"}) / node_memory_MemTotal_bytes{job="node-exporter"} * 100
  • 查询磁盘空间使用量:
1 - (node_filesystem_avail_bytes{job="node-exporter", mountpoint="/"}) / (node_filesystem_size_bytes{job="node-exporter", mountpoint="/"})

通过这些查询,我们可以实时监控Docker容器的各种