【问题标题】:Prometheus & Grafana running on local env : How to link grafana container to prometheus container in localPrometheus & Grafana 在本地环境中运行:如何将 grafana 容器链接到本地​​的 prometheus 容器
【发布时间】:2020-03-21 19:08:04
【问题描述】:

我正在将本地 Ubuntu 机器的 PromtheusGrafana 设置为 docker 容器,

我的步骤是:

  1. 运行普罗米修斯docker run -t -d -p 9090:9090 prom/prometheus
  2. 运行 Grafanadocker run -t -d --name grafana -p 3000:3000 grafana/grafana

如您所见,prometheus 在映射的 9090 端口上运行,grafana3000

上运行相同

现在在grafana 中为prometheus 配置grafana dashborad 时,我需要指明prometheus 的url:

-> 因为它们都在本地容器上运行。

ton 给 grafana 什么地址以使其指向 prometheus?

【问题讨论】:

  • 最好在 docker-compose 中运行它们,这样它们就会自动相互链接。
  • 你可以登录grafana并添加prometheus作为数据源
  • @ankidaemon 以及给它的地址是什么? ,这个问题:)
  • @firasKoubaa 你可以使用这个命令 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 跨度>
  • @ankidaemon 看起来很有效:你会把它作为答案发布

标签: docker prometheus grafana


【解决方案1】:

对于正在运行的 docker 容器,如果需要查找其地址,以下命令可能会有所帮助。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-name>

这将返回一个关联的 IP 地址。

【讨论】:

  • 这确实不是最佳实践。每当您删除并重新创建容器时,此 IP 地址都会更改。最好使用Docker内部的DNS系统。
  • @DavidMaze 好点。为了动态更好地坚持撰写/DNS
【解决方案2】:

为了方便设置,您可以使用docker-compose 注释。带有 prometheus 和 grafana 的 docker-compose.yaml 文件示例:

docker-compose.yaml

version: "3"
services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yaml:/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090
  grafana:
    image: grafana/grafana:latest
    volumes:
      - ./grafana-storage:/var/lib/grafana
      - ./grafana/config.ini:/etc/grafana/config.ini
      - ./grafana/provisioning:/etc/grafana/provisioning
      - ./grafana/dashboards:/var/lib/grafana/dashboards
    ports:
      - 3001:3000

prometheus.yaml

# 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: 'your-app'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ['your-app:3000']

config.ini

[paths]
provisioning = /etc/grafana/provisioning

[server]
enable_gzip = true

[users]
default_theme = light

【讨论】:

    【解决方案3】:

    您的 Grafana 容器将无法联系(发现)您的 Prometheus 容器,因为当 docker 启动每个容器时,它会在主机系统上创建一个具有唯一名称(如 vethef766ac)的虚拟接口,并隔离容器。

    如果您不想使用 docker compose 并且如果您想使用其主机 IP 访问您的 Grafana 容器,您必须使用 --network 在主机网络中运行您的 Grafana 容器选项。

    然后您可以这样运行 Grafana:

    docker run -t -d --name grafana --network="host" grafana/grafana
    

    注意:--network="host" 使容器可以完全访问本地 系统服务,例如 D-bus,因此被认为是不安全的。

    您要在 Grafana 中指定的 URL 是 http://localhost:9090

    【讨论】:

    • 来自守护进程的错误响应:冲突选项:端口发布和容器类型网络模式
    • @firasKoubaa 你确定你没有运行其他发布相同端口的容器吗?
    • 好的,根据文档,发布端口仅适用于默认网络(网桥)。问题是,如果您不发布端口,您将无法使用主机 IP 访问 Grafana。如果需要,您将需要使用主机网络而不是 Prometheus 容器的网络。 --network="host" 并去掉 -p 选项。注意:--network="host" 使容器可以完全访问本地系统服务,例如 D-bus,因此被认为是不安全的。我会更新答案
    • 网址 http://:9090 无效我收到此消息:HTTP Error Bad Gateway
    • 好吧,既然您要发布端口 9090,只需使用 localhost:9090 访问它。它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多