Prometheus 是一个免费的开源软件应用程序,用于事件监控和警报。它最初是在 SoundCloud 构建的。它现在是一个独立的开源项目,独立于任何公司维护。
Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。指标是数字测量,时间序列意味着随着时间的推移记录变化。用户想要测量的内容因应用程序而异。对于 Web 服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。
指标在理解为什么您的应用程序以某种方式工作方面起着重要作用。如果您正在运行 Web 应用程序并发现该应用程序很慢。您将需要一些信息来了解您的应用程序发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果您有请求计数指标,您可以找出原因并增加服务器数量来处理负载。
在本指南中,我们将学习如何使用 docker 和 docker-compose 运行 prometheus。
确保安装了 docker 和 docker compose
由于我们将使用 docker 来运行 prometheus,因此安装并运行它很重要。请确保您已安装 docker。
通过检查版本确认 docker 是否按预期工作:
$ docker version
Client: Docker Engine - Community
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:02:46 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:00:51 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.6
GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
runc:
Version: 1.1.2
GitCommit: v1.1.2-0-ga916309
docker-init:
Version: 0.19.0
GitCommit: de40ad0
接下来,确保安装了 docker-compose。Docker compose 可作为 python pip 包使用。确保已安装 python 和 pip,然后使用以下命令安装 docker-compose:
sudo pip3 install docker-compose
使用 Docker 运行prometheus
所有 Prometheus 服务都可以在 Quay.io 或 Docker Hub上作为 Docker 镜像使用。
在 Docker 上运行 Prometheus 就像 docker run -p 9090:9090 prom/prometheus. 这将使用示例配置启动 Prometheus,并将其暴露在端口 9090 上。
您将需要一些基本配置才能使用。将其保存为 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).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.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 `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"]
Prometheus 映像使用卷来存储实际指标。对于生产部署,强烈建议使用 命名卷 来简化 Prometheus 升级数据的管理。
要提供您自己的配置,有几个选项。这里有两个例子。
卷和绑定挂载
prometheus.yml 通过运行以下命令从主机绑定挂载 :
docker run \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:latest
或者通过运行绑定挂载包含 prometheus.yml 到 的目录/etc/prometheus :
docker run \
-p 9090:9090 \
-v /path/to/config:/etc/prometheus \
prom/prometheus:latest
这是我系统上的输出:
$ docker run \
-p 9090:9090 \
-v ./prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:latest
Unable to find image 'prom/prometheus:latest' locally
latest: Pulling from prom/prometheus
50e8d59317eb: Pull complete
b6c3b3e34d73: Pull complete
c25d1f04e478: Pull complete
cf87de5429d8: Pull complete
f30143b595e6: Pull complete
9d4045bcdf1f: Pull complete
11e771ad0e20: Pull complete
26449787f2fa: Pull complete
9d2e147a0f6b: Pull complete
fecd900b3277: Pull complete
e18940bc0d33: Pull complete
76c3b14215ee: Pull complete
Digest: sha256:f4c5fa1018a5c15f81250b8122f36f90146d5c2b323f9ec1f41d1b36dc0e7cb9
Status: Downloaded newer image for prom/prometheus:latest
自定义图片
为了避免在主机上管理文件并绑定挂载它,可以将配置烘焙到映像中。如果配置本身是相当静态的并且在所有环境中都相同,则此方法效果很好。
为此,使用 Prometheus 配置创建一个新目录, Dockerfile 如下所示:
FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
现在构建并运行它:
docker build -t my-prometheus .
docker run -p 9090:9090 my-prometheus
一个更高级的选项是在启动时使用一些工具动态呈现配置,甚至让守护程序定期更新它。
使用 Docker Compose 运行 prometheus
我们可以将上述说明添加到 docker compose 文件中,以便我们轻松创建、更新和管理部署。Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。
将以下内容添加到docker-compose.yaml文件中:
version: '3.9'
services:
prometheus:
image: prom/prometheus:latest
restart: always
ports:
- 9090:9090
volumes:
- type: bind
source: ./prometheus.yml
target: /etc/prometheus/prometheus.yml
将该文件保存在配置文件prometheus.yml所在的同一目录中。
现在您可以使用以下命令启动服务:
docker-compose up -d
这是我系统中的输出:
$ docker-compose up -d
Creating network "prom_default" with the default driver
Creating prom_prometheus_1 ... done
现在您可以检查流程:
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------
prom_prometheus_1 /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp,:::9090->9090/tcp
从上面我们可以看到服务在 9090 端口启动并运行。要访问 prometheus 端点,请访问 http://server_ip:9090。