如何使用 docker 和 dockercompose 运行 Prometheus

2022年 10月 22日 32.5k 0

如何使用 docker 和 docker-compose 运行 Prometheus

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。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论