Я пытаюсь настроить стек ELK, который получает индексы от потребителей Kafka, оба в отдельных контейнерах Docker.
Структура:
Производитель Kafka (работает локально для тестирования) сообщает Kafkaкластер (http://xxx.xxx.xxx.xxx:9000).Кластер пересылает сообщения потребителю Kafka (Docker контейнер 1).В сообщении Kafka потребитель работает с URL-адресами.Когда завершается работа Nchch, предполагается, что индексы проходов отправляются в стек ELK (Docker-контейнер 2), но этот шаг не выполняется.
Segment dir is complete: crawl2019-05-09150441/segments/20190509150506.
Indexer: starting at 2019-05-09 15:05:56
Indexer: deleting gone documents: false
Indexer: URL filtering: false
Indexer: URL normalizing: false
No exchange was configured. The documents will be routed to all index writers.
Active IndexWriters :
ElasticRestIndexWriter:
...
Indexing job did not succeed, job status:FAILED, reason: NA
Indexer: java.lang.RuntimeException: Indexing job did not succeed, job status:FAILED, reason: NA
at org.apache.nutch.indexer.IndexingJob.index(IndexingJob.java:150)
at org.apache.nutch.indexer.IndexingJob.run(IndexingJob.java:231)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.nutch.indexer.IndexingJob.main(IndexingJob.java:240)
Error running:
/WebContentExtraction/NutchScript/nutch/dist/apache-nutch-1.16-SNAPSHOT-bin/bin/nutch index crawl2019-05-09150441/crawldb -linkdb crawl2019-05-09150441/linkdb crawl2019-05-09150441/segments/20190509150506
Failed with exit value 255.
Оба контейнера Docker работают на локальном хосте, и я использую порты по умолчанию стека ELK.
Nutch версия 1.16 (мастер)
ELK-версия sebp / elk: 622
Я использую индексаторastic.rest и пытался использовать несколько разных версий стека ELK,
Я заблокирован, используя основную версию Nutch, так как в ней есть нужный мне плагин.
Команда запуска Kafka Consumer:
docker run -dit \
--name kafka1 \
-e HOST=localhost \
-e PORT=9200 \
-e INDEX=nutch \
-e TOPIC=health \
-e INDEXER=elastic.rest \
wce ./startup
ELK Stacksetup:
docker-compose -f elkDockerComp.yaml up elk
elkDockerComp.yaml:
elk:
image: sebp/elk:622
ports:
- "5601:5601"
- "9200:9200"
- "5044:5044"
Я предполагаю, что это проблема с сетью между контейнерами Docker, но я не могу найти какие-либо решения.
Редактировать
Я добавил оба контейнера в сеть докеров, и команда ping от потребителя находит стек ELK, чтобы они могли теперь связываться друг с другом.
docker network inspect myNet
[
{
"Name": "myNet",
"Id": "ecb47fb89a70ce4979420663287e67c2324dbd3ccf2367ead18261eb3e6089d8",
"Created": "2019-05-09T15:57:19.3169609Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"5b3764610f448098124b6a6dc2a28621858795394f3f280e6acc9aed8c13c0bf": {
"Name": "kafka1",
"EndpointID": "7380523f048bc516e6b0eb5811f3314804d53e0f758c1ef0aa9f7b049b1f7b4b",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"87b87f2a62abeca39babd592ffc02025397e3d7207eea603168475f578c25002": {
"Name": "scripts_elk_1",
"EndpointID": "914aee56fe28f9b0182aeea5a6091ca6c0b6e4ef83f6dcf22564e554047ac858",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
ping(изнутри потребителя в ELK)
docker exec -it kafka1 ping 172.19.0.3
PING 172.19.0.3 (172.19.0.3) 56(84) bytes of data.
64 bytes from 172.19.0.3: icmp_seq=1 ttl=64 time=0.228 ms
64 bytes from 172.19.0.3: icmp_seq=2 ttl=64 time=0.125 ms
64 bytes from 172.19.0.3: icmp_seq=3 ttl=64 time=0.128 ms
64 bytes from 172.19.0.3: icmp_seq=4 ttl=64 time=0.138 ms
64 bytes from 172.19.0.3: icmp_seq=5 ttl=64 time=0.155 ms
^C
--- 172.19.0.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4146ms
rtt min/avg/max/mdev = 0.125/0.154/0.228/0.041 ms
Редактировать 2
Я закончил создание одного большого файла, создающего Docker, и поместил их в сеть вместе
version: "3.7"
services:
elk:
image: sebp/elk:670
container_name: elk1
ports:
- "5601:5601"
- "9200:9200"
- "5044:5044"
networks:
- myNet
kafka:
image: wce:latest
container_name: kafka1
environment:
- HOST=172.20.0.2
- PORT=9200
- INDEX=nutch
- TOPIC=health
- INDEXER=elastic.rest
command:
tail -F startup
networks:
- myNet
networks:
myNet:
Тогда я забыл, что док-контейнеры не являются локальными, относительно друг друга.Поэтому я изменил значение HOST в index-writer.xml на новый и правильный ip, и он заработал, как и ожидалось.