如何使用 dockerized Prometheus(和 Grafana)监控 ASP.Net Core 应用程序?
How can I monitor a ASP.Net Core app with dockerized Prometheus (and Grafana)?
我想在我的开发机器上安装 Prometheus 和 Grafana 运行 使用 docker-images / docker-for-windows.
我有系统正在开发中,ASP.Net 核心,运行 在 localhost:5001 上,指标在 https://localhost:5001/metrics 上显示得很好。
Docker-compose.yml 和 prometheus.yml 如下所示。
- 如果我在 docker-compose.yml 中包含 network_mode: 主机,我将无法访问
通过 localhost:9090
在我的物理机器上使用 Prometheus
- 如果我排除
network_mode 而不是使用 ports: ,我可以在我的设备上访问 Prometheus
通过 localhost:9090 的物理机,但正在检查
http://localhost:9090/targets,它显示
https://localhost:5001/metrics 处于关闭状态。
我做错了什么?欢迎任何评论!
docker-compose.yml:
version: '3.8'
services:
prometheus:
image: prom/prometheus
container_name: gradle_docker-prometheus
#network_mode: host
ports:
- 9090:9090
volumes:
- prometheus-storage:/var/lib/prometheus
- /c/Data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
grafana:
image: grafana/grafana
container_name: gradle_docker-grafana
ports:
- "3000:3000"
volumes:
- grafana-storage:/opt/grafana/data
depends_on:
- prometheus
volumes:
prometheus-storage: {}
grafana-storage: {}
prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'my-project'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 10s
scheme: http
static_configs:
- targets: ['localhost:9090','cadvisor:8080','node-exporter:9100', 'nginx-exporter:9113']
- job_name: '.Net'
scrape_interval: 10s
scheme: https
static_configs:
- targets: ['localhost:5001']
请勿在 Windows 上使用主机网络模式,仅在 Linux 上受支持。你需要的是更改目标地址:
- job_name: '.Net'
scrape_interval: 10s
scheme: https # You may have to change this to 'http'
# or you'd have to create a certificate
# with `host.docker.internal`
static_configs:
- targets: ['host.docker.internal:5001']
host.docker.internal
是连接到 Docker 主机的特殊地址,因为容器内的 localhost
就是容器本身。
总结一下评论中的内容:将目标更改为 host.docker.internal
后,确保您的应用程序允许连接到该主机。 运行
curl http://localhost:5001/ -H "Host: host.docker.internal"
并检查答案。如果您遇到包含类似以下内容的错误:
The request hostname is invalid.
然后你必须找出主机过滤器在哪里(它可能是一个包含 localhost
的数组)并在那里添加新主机 (host.docker.internal
)。
我想在我的开发机器上安装 Prometheus 和 Grafana 运行 使用 docker-images / docker-for-windows.
我有系统正在开发中,ASP.Net 核心,运行 在 localhost:5001 上,指标在 https://localhost:5001/metrics 上显示得很好。
Docker-compose.yml 和 prometheus.yml 如下所示。
- 如果我在 docker-compose.yml 中包含 network_mode: 主机,我将无法访问 通过 localhost:9090 在我的物理机器上使用 Prometheus
- 如果我排除 network_mode 而不是使用 ports: ,我可以在我的设备上访问 Prometheus 通过 localhost:9090 的物理机,但正在检查 http://localhost:9090/targets,它显示 https://localhost:5001/metrics 处于关闭状态。
我做错了什么?欢迎任何评论!
docker-compose.yml:
version: '3.8'
services:
prometheus:
image: prom/prometheus
container_name: gradle_docker-prometheus
#network_mode: host
ports:
- 9090:9090
volumes:
- prometheus-storage:/var/lib/prometheus
- /c/Data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
grafana:
image: grafana/grafana
container_name: gradle_docker-grafana
ports:
- "3000:3000"
volumes:
- grafana-storage:/opt/grafana/data
depends_on:
- prometheus
volumes:
prometheus-storage: {}
grafana-storage: {}
prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'my-project'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 10s
scheme: http
static_configs:
- targets: ['localhost:9090','cadvisor:8080','node-exporter:9100', 'nginx-exporter:9113']
- job_name: '.Net'
scrape_interval: 10s
scheme: https
static_configs:
- targets: ['localhost:5001']
请勿在 Windows 上使用主机网络模式,仅在 Linux 上受支持。你需要的是更改目标地址:
- job_name: '.Net'
scrape_interval: 10s
scheme: https # You may have to change this to 'http'
# or you'd have to create a certificate
# with `host.docker.internal`
static_configs:
- targets: ['host.docker.internal:5001']
host.docker.internal
是连接到 Docker 主机的特殊地址,因为容器内的 localhost
就是容器本身。
总结一下评论中的内容:将目标更改为 host.docker.internal
后,确保您的应用程序允许连接到该主机。 运行
curl http://localhost:5001/ -H "Host: host.docker.internal"
并检查答案。如果您遇到包含类似以下内容的错误:
The request hostname is invalid.
然后你必须找出主机过滤器在哪里(它可能是一个包含 localhost
的数组)并在那里添加新主机 (host.docker.internal
)。