Задание Nutch Indexing не может перейти в стек ELK - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь настроить стек 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, и он заработал, как и ожидалось.

...