©
This document uses PHP Chinese website manual Release
Prometheus 是一个开源系统监控和警报工具包。您可以将 Docker 配置为 Prometheus 目标。本主题向您展示如何配置 Docker,设置 Prometheus 作为 Docker 容器运行,并使用 Prometheus 监控 Docker 实例。
警告:可用指标和这些指标的名称正在积极开发中,并可能随时更改。
目前,您只能监控 Docker 本身。您目前无法使用 Docker 目标监控您的应用程序。
要将 Docker 守护程序配置为 Prometheus 目标,您需要指定metrics-address
。最好的方法是通过daemon.json
默认情况下位于以下位置之一的。如果该文件不存在,请创建它。
Linux:/etc/docker/daemon.json
Windows 服务器:C:\ProgramData\docker\config\daemon.json
适用于 Mac 的 Docker for Mac / Docker:单击工具栏中的 Docker 图标,选择 Preferences,然后选择 Daemon。点击高级。
如果该文件当前为空,请粘贴以下内容:
{ "metrics-addr" : "127.0.0.1:9323", "experimental" : true}
如果文件不为空,请添加这两个键,确保生成的文件是有效的JSON。请注意,除了最后一行,每行都以逗号(,
)结尾。
保存文件,或者在 Docker for Mac 或 Docker for Windows 的情况下,保存配置。重新启动 Docker。
Docker 现在在端口9323上公开 Prometheus 兼容指标。
在此示例中,Prometheus 在同一主机上作为 Docker 容器运行。
复制以下配置文件之一并将其保存到/tmp/prometheus.yml
。这是一个普通存储 Prometheus 配置文件,除了在文件底部添加 Docker 作业定义之外。Docker for Mac 和 Docker for Windows 需要稍微不同的配置。
Docker for Linux
Docker for Mac 或 Windows
# 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: ['localhost:9323']
# 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: ['192.168.65.1:9323']
接下来,使用此配置启动单个副本 Prometheus 服务。
$ docker service create --replicas 1 --name my-prometheus \ --mount type=bind,source=/tmp/prometheus.yml,destination=/etc/prometheus/prometheus.yml \ --publish 9090:9090/tcp \ prom/prometheus
验证 Docker 目标是否在http:// localhost:9090 / targets / 中列出。
如果您使用 Docker for Mac 或 Docker for Windows,则无法直接访问端点 URL。
创建一个图。点击 Prometheus UI 中的图表链接。从“ 执行”按钮右侧的组合框中选择一个度量标准,然后单击“ 执行”。以下屏幕截图显示了图表engine_daemon_network_actions_seconds_count
。
上图显示了一个相当闲置的 Docker 实例。如果您正在运行活动工作负载,则您的图形可能看起来不同
为了使图表更有趣,可以通过启动一项服务来创建一些网络操作,其中包括10个任务,它们可以不停地 ping Docker(您可以将 ping 目标更改为任何您喜欢的任务):
$ docker service create \ --replicas 10 \ --name ping_service \ alpine ping docker.com
等待几分钟(默认刮取间隔为15秒)并重新加载图形。
准备就绪后,请停止并删除ping_service
服务,以免无缘无故地淹没有ping的主机。
$ docker service remove ping_service
等待几分钟,你会发现图表回落到闲置状态。
阅读 Prometheus 文档
设置一些警报