【问题标题】:How to connect metricbeat to elasticsearch and kibana with docker如何使用 docker 将 metricbeat 连接到 elasticsearch 和 kibana
【发布时间】:2020-04-06 20:37:56
【问题描述】:

我已经使用 docker compose 设置了 elasticsearch 和 kibana。 elasticsearch 部署在:localhost:9200,而 kibana 部署在 localhost:5601

尝试使用 docker run 部署 metricbeat 时出现以下错误:

$ docker run docker.elastic.co/beats/metricbeat:6.3.2 setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["localhost:9200"]

Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://localhost:9200: Get http://localhost:9200: dial tcp [::1]:9200: connect: cannot assign requested address]

Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://elasticsearch:9200: Get http://elasticsearch:9200: lookup elasticsearch on 192.168.65.1:53: no such host]

我的 docker-compose.yml:

# ./docker-compose.yml

version: "3.7"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    environment:
#      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elkdata:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    restart: always
  kibana:
    image: docker.elastic.co/kibana/kibana:6.3.2
    volumes:
      - kibana:/usr/share/kibana/config
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    restart: always
volumes:
  elkdata:
  kibana:

【问题讨论】:

    标签: docker elasticsearch metricbeat


    【解决方案1】:

    首先编辑您的docker-compose 文件,为默认 docker 网络添加一个名称:

    version: "3.7"
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
        environment:
    #      - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - elkdata:/usr/share/elasticsearch/data
        ports:
          - "9200:9200"
        networks:
          - my-network
        restart: always
      kibana:
        image: docker.elastic.co/kibana/kibana:6.3.2
        volumes:
          - kibana:/usr/share/kibana/config
        ports:
          - "5601:5601"
        networks:
          - my-network
        depends_on:
          - elasticsearch
        restart: always
    volumes:
      elkdata:
      kibana:
    networks:
      my-network:
        name: awesome-name
    

    执行docker-compose up,然后使用以下命令启动metricbeat

    $ docker run docker.elastic.co/beats/metricbeat:6.3.2 --network=awesome-name setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]
    

    说明:

    当您尝试部署 metricbeat 时,您提供以下 envars:

    • setup.kibana.host=kibana:5601
    • output.elasticsearch.hosts=["localhost:9200"]

    我将从第二个开始。使用docker run 命令,当您启动metricbeat 时,您是在告诉容器它可以访问localhost:9200 上的弹性搜索。因此,当容器启动时,它将访问端口 9200 上的 localhost,期望找到 elasticsearch 正在运行。但是,由于容器是具有自己的网络层的主机隔离进程,localhost 解析为 容器本身,而不是您期望的 docker 主机。

    关于kibana主机的设置,首先要了解docker-compose的工作原理。默认情况下,当您执行docker-compose up 时,会创建一个 docker 网络,并将 yml 文件中定义的所有服务都添加到该网络中。在此网络且仅内,可以通过服务名称访问服务。对于您的情况,根据 yml 文件中的定义,它们的名称将是 elasticsearchkibana

    所以为了metricbeat容器能够与elasticsearchkibana容器通信,它应该被添加到同一个docker网络。这可以通过在docker run 命令上设置--network 标志来实现。

    另一种方法是使用 network mode host 与您的容器共享 docker 主机的网络,但我不建议这样做。

    参考资料:

    Docker compose

    docker run

    【讨论】:

    • docker run --network=awesome-name docker.elastic.co/beats/metricbeat:6.3.2 setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]合作
    • 并在 docker-compose.yml 中缩进 name: awesome-name
    • 我修复了缩进问题,乐于助人!
    猜你喜欢
    • 1970-01-01
    • 2020-12-13
    • 2022-08-31
    • 2017-03-13
    • 2019-10-25
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多