无法在 linux 上使用 ElasticSearch 映射 logstash

Unable to map the logstash with ElasticSearch on linux

无法使用 linux

上的 ElasticSearch 映射 logstash

我只是 运行 下面的命令,它显示了 docker

上的所有 运行ning 图片

sudo docker ps

输出:

CONTAINER ID    IMAGE             COMMAND                   CREATED           STATUS           PORTS                    NAMES
e14ace6bd419    a962b6541416      "/bin/bash /usr/loca…"    23 hours ago      Up 22 hours      0.0.0.0:5601->5601/tcp   trusting_chatterjee
00e6822bb991    28259852697e      "/usr/local/bin/dock…"    23 hours ago      Up 23 hours      9200/tcp, 9300/tcp       friendly_roentgen

我只是想 link 将 logstash 放入弹性搜索并尝试 运行 下面的命令

命令:

 sudo docker run -d --rm -it -v /home/sabharanikumar/logstash.conf e95781358676

输出:

989e2a8f4d9fd972c4f2102d726a68877c989b546800899abbb8c382fb62f04c

logstash.conf:

input
{
  stdin{}
}
output
{
  elasticsearch{ hosts => ["localhost:9200"] } 
}

Logstash 日志:

[2019-08-23T09:40:53,833][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://logstash_system:xxxxxx@elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://logstash_system:xxxxxx@elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: Name or service not known"}

I 运行 sudo docker ps 但正在列出 logstash。

有什么我遗漏的吗?有什么地方需要更改主机值吗?

正如@Mihai 在评论中指出的那样,"localhost:9200" 是不正确的。 logstash 容器将尝试在端口 9200 上与自身通信,但那里没有任何监听。

我看到的第二个问题是您将 logstash 配置文件作为参数(或命令)传递给 docker。此外,您应该避免使用 --link 选项,因为它已被弃用并且更喜欢网络生成。

换句话说,命令应该是这样的:

docker network create \
    --driver bridge \
    --subnet=172.100.0.0/16 \
    --gateway=172.100.0.1 \
    my_elk_net

然后使用 --network=my_elk_net 选项启动两个 docker 容器。例如

docker run -d \
    --name elasticsearch \
    --name my_elk_net \
    <ElasticSearchIMAGEID>

docker run -d \
    --name logstash \
    --network my_elk_net \
    -v "/home/arrchana/logstash.conf:/usr/share/logstash/config/logstash.yml:ro"
    <LogstashIMAGEID>

您的弹性搜索现在应该如下所示:

input
{
  stdin{}
}
output
{
  elasticsearch{ hosts => ["elasticsearch:9200"] } 
}

或者,您可以使用 docker-compose 并避免创建网络。 docker-compose.yml 的一个非常基本的示例应该适合您,应该如下所示:

version: '3.7'

services:
  elasticsearch:
    image: image_image

  logstash:
    image: logstash_image
    volumes:
      - /home/arrchana/logstash.conf:/usr/share/logstash/config/logstash.yml:ro
    depends_on:
     - elasticsearch