以下のdockerfileとdocker-compose、logstash.ymlの設定でdocker-compose upをしたところ、
"Elasticsearch Unreachable: [http://elasticsearch:9200/ ][Manticore::ResolutionFailure] elasticsearch: Name or service not known"
でエラーになります。logstash.ymlのhostsで指定したlocalhostのポートに対してouputが行えないのはなぜでしょうか。
dockerfile
FROM docker.elastic.co/logstash/logstash:7.4.2
ADD config/logstash.yml /usr/share/logstash/config
docker-compose
logstash:
build: logstash
container_name: logstash
ports:
- 5000:5000
logstash.yml
input {
file {
mode => "tail"
path => ["../../../packages/registerer/client/yukoyuko/csv/items-dev.csv"]
start_psotion => "beginning"
codec => plain {
charset => "UTF-8"
}
}
}
filter {
csv {
columns => ["id","title","price","ReviewTotal","group","prefecture","HotelRank","area","onsen","RoomType","DinnerReview","reviews","rotenburo","IsExistOnsen","MealPlace","Meal","Pouring","PriceTaxInclude","ImageUrl","UnUsed","StockFlag","DisplayFlag","StartFrom","EndTo"]
convert => {
"id" => "integer"
}
skip_header => true
}
date {
match => ["StartFrom","yyyy-MM-dd"]
match => ["EndTo","yyyy-MM-dd"]
}
}
output {
elasticsearch {
hosts => ["localhost:9600"]
index -> "test-onsen
}
}
tsgkdt
(tsgkdt)
November 1, 2019, 2:33pm
2
Logstashの問題ではなく、Dockerの、特にネットワークの設定の問題ではないでしょうか。
Logstashのoutputでelasticsearchがあり、そこでlocalhostと指定されています。
ここでいうlocalhostはlogstashコンテナのlocalhostになります。
なので、logstashコンテナ内ではElasticsearchが動いていないので、接続できないというエラーになると考えます。
従って、outputのhostにはLogstashが動くコンテナから見てElasticsearchがたっている場所を示す必要があります。
Elasticsearchもコンテナだと仮定しますと、このようなイメージです。(linksの箇所を参照)
dockerコマンドだと、 --linkを使うイメージですね。
version: '2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
# 中略
ports:
- 9200:9200
networks:
- esnet
logstash:
image: docker.elastic.co/logstash/logstash:7.4.2
container_name: logstash
depends_on:
- elasticsearch
links:
# elasticsearchコンテナを名前`elasticsearch`でアクセスできるようにしておく
- elasticsearch:elasticsearch
networks:
- esnet
networks:
esnet:
そして、logstashの設定で、hostsをこうしておきます。
elasticsearch {
hosts => ["http://elasticsearch:9200"]
}
1 Like
返信が遅くなってしまい、申し訳ありません。
Dockerの設定のご説明丁寧にご教示いただきありがとうございます。
自分の環境で試して後ほど経過をお伝え致します。
system
(system)
Closed
December 3, 2019, 4:30am
4
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.