docker - 使用 docker-compose 在端口 9100 上无法访问 Prometheus Nodeexporter

标签 docker ubuntu docker-compose prometheus prometheus-node-exporter

我使用 Docker Compose(docker-compose.yml 如下所示)在同一个 Ubuntu 18.04 系统上启动了 Prometheus、Grafana 和 Nodeexporter。

问题:我无法通过 http://<ip.address>:9100/metrics 访问 Nodeexporter ,而 Promethus 和 Grafana 都可以通过 http://<ip.address>:9090 联系到和 http://<ip.address>:3000 , 分别。
nodeexporter的 docker 日志显示它正在监听端口 9100,但是 lsof没有显示这一点。

为什么是 nodeexporter可以收听9100端口吗?

docker logs nodeexporter 的输出

time="2020-01-21T16:38:07Z" level=info msg="Starting node_exporter (version=0.18.1, branch=HEAD, revision=3db77732e925c08f675d7404a8c46466b2ece83e)" source="node_exporter.go:156"
time="2020-01-21T16:38:07Z" level=info msg="Build context (go=go1.12.5, user=root@b50852a1acba, date=20190604-16:41:18)" source="node_exporter.go:157"
time="2020-01-21T16:38:07Z" level=info msg="Enabled collectors:" source="node_exporter.go:97"
time="2020-01-21T16:38:07Z" level=info msg=" - arp" source="node_exporter.go:104"
...
time="2020-01-21T16:38:07Z" level=info msg=" - xfs" source="node_exporter.go:104"
time="2020-01-21T16:38:07Z" level=info msg=" - zfs" source="node_exporter.go:104"
time="2020-01-21T16:38:07Z" level=info msg="Listening on :9100" source="node_exporter.go:170"

lsof -i :3000,9100,9090 的输出
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
docker-pr 22163 root    4u  IPv6 3751831      0t0  TCP *:9090 (LISTEN)
docker-pr 22202 root    4u  IPv6 3751884      0t0  TCP *:3000 (LISTEN)

curl localhost:9100 的输出
curl: (7) Failed to connect to localhost port 9100: Connection refused

docker-compose.yml

改编自 https://github.com/stefanprodan/dockprom/blob/master/docker-compose.yml
version: '2.1'

networks:
  monitor-net:
    driver: bridge
  default:
      external:
        name: ${NETWORK}

services:

  prometheus:
    image: prom/prometheus:v2.15.2
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped
    expose:
      - 9090
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  nodeexporter:
    image: prom/node-exporter:v0.18.1
    container_name: nodeexporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    restart: unless-stopped
    expose:
      - 9100
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"


  grafana:
    image: grafana/grafana:6.5.3
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      GF_SECURITY_ADMIN_USER: ${ADMIN_USER:-admin}
      GF_SECURITY_ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin}
      GF_USERS_ALLOW_SIGN_UP: "false"
      VIRTUAL_HOST: ${DOMAINS}
      LETSENCRYPT_HOST: ${DOMAINS}
      LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
    restart: unless-stopped
    expose:
      - 3000
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

    ...

最佳答案

你忘了映射端口。

请参阅下面的示例 ports

root@d:~# lsof -i :3000,9100,9090

COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
docker-pr 96795 root    4u  IPv6 46823321      0t0  TCP *:jetdirect (LISTEN)
docker-pr 96829 root    4u  IPv6 46831661      0t0  TCP *:websm (LISTEN)
docker-pr 96873 root    4u  IPv6 46814051      0t0  TCP *:hbci (LISTEN)

docker -compose.yml
version: '2.1'

networks:
    monitor-net:
        driver: bridge
    default:
        external:
            name: aaa

services:

  prometheus:
    image: prom/prometheus:v2.15.2
    ports:  [ "9090:9090" ]
    expose: [ "9090" ]
    networks:
        - monitor-net
    labels:
        org.label-schema.group: "monitoring"

  nodeexporter:
    image: prom/node-exporter:v0.18.1
    ports:  [ "9100:9100" ]
    expose: [ "9100" ]
    networks:
        - monitor-net
    labels:
        org.label-schema.group: "monitoring"


  grafana:
    image: grafana/grafana:6.5.3
    ports:  [ "3000:3000" ]
    expose: [ "3000" ]
    networks:
        - monitor-net
    labels:
        org.label-schema.group: "monitoring"

关于docker - 使用 docker-compose 在端口 9100 上无法访问 Prometheus Nodeexporter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59845757/

相关文章:

docker - node.js docker容器与本地redis服务器(127.0.0.1)的连接

bash - 如何检测 docker run 和底层守护程序是否以编程方式完全启动?

ubuntu - 将ffmpeg的输出重定向到openssl

amazon-web-services - 从Docker Cloud部署Docker容器

hadoop - hadoop + hbase 设置的 docker-compose 问题

docker - 如何以root用户身份运行docker-compose Docker Cloud

docker - 通过Vault Docker镜像运行时,无法 curl 到以服务器模式运行的Vault服务器

ubuntu - 为什么这个内置类型在编译时会出错?

ubuntu - 如何为hadoop独立安装配置ssh?

postgresql - 一项服务如何使用 docker compose、链接主机名和端口解析另一项服务的地址?