使用 Prometheus 收集 Docker 指标
Prometheus 是一个开源系统监控和 警报工具包。您可以将 Docker 配置为 Prometheus 目标。
警告
可用指标和这些指标的名称处于活动状态 开发,并且可能随时更改。
目前,您只能监控 Docker 本身。您目前无法监控 应用程序。
例
以下示例向您展示如何配置 Docker 守护进程,设置 Prometheus 作为容器在本地计算机上运行,并监控 Docker 实例。
配置守护程序
要将 Docker 守护程序配置为 Prometheus 目标,您需要在配置文件中指定 。此守护进程需要
默认情况下,该文件将位于以下位置之一。如果
文件不存在,请创建它。metrics-address
daemon.json
- Linux的:
/etc/docker/daemon.json
- Windows 服务器:
C:\ProgramData\docker\config\daemon.json
- Docker Desktop:打开 Docker Desktop 设置,然后选择 Docker Engine 以编辑文件。
添加以下配置:
{
"metrics-addr": "127.0.0.1:9323"
}
保存文件,或者对于 Mac 的 Docker Desktop 或 Docker Desktop Windows 中,保存配置。重新启动 Docker。
Docker 现在在环回的端口 9323 上公开了与 Prometheus 兼容的指标 接口。
创建 Prometheus 配置
复制以下配置文件并将其保存到您选择的位置,
例如。这是一个 Prometheus 配置文件,
除了在文件底部添加 Docker 作业定义。/tmp/prometheus.yml
# 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).
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: "codelab-monitor"
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first.rules"
# - "second.rules"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` 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: docker
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["host.docker.internal:9323"]
在容器中运行 Prometheus
接下来,使用此配置启动 Prometheus 容器。
$ docker run --name my-prometheus \
--mount type=bind,source=/tmp/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
-p 9090:9090 \
--add-host host.docker.internal=host-gateway \
prom/prometheus
如果您使用的是 Docker Desktop,则该标志是可选的。此标志
确保主机的内部 IP 暴露给 Prometheus
容器。默认情况下,Docker Desktop 执行此操作。主机 IP 作为主机名公开。这与上一步中定义的配置相匹配。--add-host
host.docker.internal
prometheus.yml
打开 Prometheus 控制面板
验证 Docker 目标是否列在 中。http://localhost:9090/targets/
注意
如果您使用 Docker,则无法直接访问此页面上的终端节点 URL 桌面。
使用 Prometheus
创建图表。选择 Prometheus UI 中的 Graphs (图形) 链接。选择指标
从 Execute 按钮右侧的组合框中,然后单击 Execute。下面的屏幕截图显示了 的图表。engine_daemon_network_actions_seconds_count
该图显示了一个相当空闲的 Docker 实例,除非您已经在运行 系统上的活动工作负载。
要使图表更有趣,请运行使用某个网络的容器 操作:
$ docker run --rm alpine apk add git make musl-dev go
等待几秒钟(默认抓取间隔为 15 秒),然后重新加载 图。您应该会在图表中看到一个上升趋势,显示网络增加 您刚刚运行的容器引起的流量。
后续步骤
此处提供的示例显示了如何将 Prometheus 作为容器运行
local 系统。在实践中,您可能会在另一个
系统或作为某个位置的云服务。您可以将 Docker 守护程序设置为
Prometheus 也在这种情况下以 Prometheus 为目标。配置
守护进程,并将守护进程的地址添加为 Scrape 端点
Prometheus 配置。metrics-addr
- job_name: docker
static_configs:
- targets: ["docker.daemon.example:<PORT>"]
有关 Prometheus 的更多信息,请参阅 Prometheus 文档