如何使用docker将metricbeat连接到Elasticsearch和Kibana

我已经用docker compose设置了elasticsearch和kibana。 elasticsearch部署在 private void doPhotoPrint() { if (imageLoader == null) { imageLoader = new GlideImageLoader(this); } if (!IMG_PATH.isEmpty()) { imageLoader.bindImageAsBitmap(null,FileUtils.validateFileUrl(IMG_PATH),new RequestListener<Bitmap>() { @Override public boolean onLoadFailed(@Nullable GlideException e,Object model,Target<Bitmap> target,boolean isFirstResource) { return false; } @Override public boolean onResourceReady(Bitmap resource,DataSource dataSource,boolean isFirstResource) { return false; } },new Simpletarget<Bitmap>() { @Override public void onResourceReady(@NonNull Bitmap resource,@Nullable Transition<? super Bitmap> transition) { activity activity = ShareImgactivity.this; if (resource != null && AppUtils.isValidContext(activity)) { PrintHelper photoPrinter = new PrintHelper(activity); photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT); photoPrinter.printBitmap(getString(R.string.app_name) + "_Print",resource); } } },Priority.IMMEDIATE); } } 上,而kibana部署在localhost:9200

当尝试通过docker run部署metricbeat时,出现以下错误:

localhost:5601

我的docker-compose.yml:

$ 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]
tmroybq 回答:如何使用docker将metricbeat连接到Elasticsearch和Kibana

首先通过添加默认Docker网络的名称来编辑docker-compose文件:

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时,请提供以下envar:

  • 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网络。这可以通过在--network命令上设置docker run标志来实现。

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

参考文献:

Docker compose

docker run

本文链接:https://www.f2er.com/2927446.html

大家都在问