【发布时间】:2021-12-22 04:31:58
【问题描述】:
我对 docker、k6、Prometheus、statds 非常陌生。
场景 - 创建一个将运行 create 的 docker compost 文件
- 具有自定义指标的 K6 负载测试。将结果发送给 Statsd Exporter(想法是使用 Prometheus 作为数据库,但由于 K6 不支持直接支持 Prometheus,所以我使用的是 Statsd。如果有人有比这更简单的解决方案,请随时提出建议。)。李>
- Prometheus 将从 statsd 导出器中抓取结果。
- Grafana - 将连接到 Prometheus 并显示可视化。
但是发生的情况是生成的 Statsd 指标包括我的自定义指标。但普罗米修斯并没有刮掉它。 prometheus 作业未在 prometheus 的 Status->Targets 页面中列出。
以下是我的 docker-compose 文件。
version: '3.7'
services:
statsdex:
image: "prom/statsd-exporter:latest"
container_name: statsd_exporter
ports:
- 9102:9102
volumes:
- ./loadtesting/statsd_mapping.yml:/tmp/statsd_mapping.yml
k6:
image: "loadimpact/k6:0.32.0"
command: ["run", "/scripts/K6-script.js","-q", "-o","statsd"]
depends_on:
- statsdex
environment:
K6_STATSD_ADDR: "statsdex:9125"
K6_STATSD_ENABLE_TAGS: "true"
K6_STATSD_PUSH_INTERVAL: 1s
#K6_STATSD_BUFFER_SIZE: 7000
volumes:
- "./loadtesting:/scripts"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_BASIC_ENABLED=false
- GF_INSTALL_PLUGINS=michaeldmoore-scatter-panel
volumes:
- grafana-storage:/var/lib/grafana
- ./grafana/dashboards:/etc/grafana/dashboards/
- ./grafana/datasources:/etc/grafana/datasources/
- ./grafana:/etc/grafana/provisioning/
prometheus:
image: prom/prometheus
container_name: prometheus
ports:
- 9090:9090
volumes:
- ./loadtesting/prometheus.yml:/etc/prometheus/prometheus.yml
volumes:
grafana-storage:
external: true
以下是我的 Prometheus yaml 文件,我认为它试图从 statds 导出器输出结果的同一端口抓取数据。 (我没有在 Prometheus 中看到这项工作。我尝试提供 ip 地址,localhost 也是。)
scrape_configs:
- job_name: 'statsd_exporter'
static_configs:
- targets: ['statsd_exporter:9102']
以下是用于 K6 映射的 statds 导出器的映射文件。
defaults:
observer_type: histogram
mappings:
- match: "k6.*"
name: "k6_${1}"
- match: "k6.check.*.*.*"
name: "k6_check"
labels:
http_name: "$1"
check_name: "$2"
outcome: "$3"
当我使用命令 docker compose up 时,我可以看到
- 在所有四个服务都已启动并运行的 docker 桌面中。脚本执行完成后 K6 退出。
- 我可以在 http://localhost:9102/metrics 看到 Statsd Metrics
- 我可以看到 Prometheus 设置在 http://localhost:9090。但是在 Status->Targets 部分我没有看到 Statsd Exporter。这就是我认为问题所在。 Prometheus 和 Statsd 出口商没有互相交谈。这可能是我无法从 Prometheus 查询 statsd 导出器中的自定义指标的原因。
以下是Prometheus中的配置。
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
alerting:
alertmanagers:
- follow_redirects: true
scheme: http
timeout: 10s
api_version: v2
static_configs:
- targets: []
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- localhost:9090
- job_name: wmi_exporter
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- localhost:9182
谁能帮我弄清楚到底是什么问题?
【问题讨论】:
-
我不记得 OTOH 但 Compose DNS 是使用
statsdex(服务名称)还是statsd_exporter(容器名称)构建的?或者两者兼而有之?您在 Prometheus 配置中使用statsd_exporter,您可能希望将其切换为statsdex -
您可能需要检查日志中的错误
docker-compose logs statsdex或... prometheus
标签: docker-compose mapping prometheus statsd k6