redis стек elk с использованием docker-compose

#docker #docker-compose #elastic-stack

#docker #docker-compose #эластичный стек

Вопрос:

Я пытаюсь настроить стек redis ELK с помощью docker. Я хочу использовать redis для приема журналов из удаленного местоположения и пересылки их в logstash.

Вот мой docker-compose.yml

 elasticsearch:
  image: elasticsearch:latest
  command: elasticsearch -Des.network.host=0.0.0.0
  ports:
    - "9200:9200"
    - "9300:9300"
  volumes:
    - /root/ebs:/usr/share/elasticsearch/data

logstash:
  build: logstash/
  command: logstash -f /etc/logstash/conf.d/logstash.conf
  volumes:
    - ./logstash/config:/etc/logstash/conf.d
  ports:
    - "5000:5000"
  links:
    - elasticsearch
kibana:
  build: kibana/
  volumes:
    - ./kibana/config/:/opt/kibana/config/
  ports:
    - "5601:5601"
  links:
    - elasticsearch

redis:
  image: redis:latest
  ports:
    - "6379:6379"
  links:
    -  logstash
  

И вот мой logstash.conf

 input {
    tcp {
        port => 5000
    }
    redis {
        host => "redis:6379"
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
    }
}
  

Мой контейнер logstash выдает эту ошибку:

 logstash_1       | {:timestamp=>"2016-10-06T09:21:35.258000 0000", :message=>"An unexpected error occurred!", :error=>#<NoMethodError: undefined method `call' for nil:NilClass>, :class=>"NoMethodError",
  

Комментарии:

1. Работает ли настройка вне Docker? Это действительно проблема с контейнером или проблема в приложении? Кроме того, что вы уже пробовали? Когда возникает ошибка? Что вы пытались сделать? Очень сложно отлаживать только с предоставленной вами информацией

2. Я не пробовал настройку вне Docker. На самом деле это довольно просто, я упускаю что-то глупое. Как вы можете использовать redis с logstash?

Ответ №1:

Я вижу одну непосредственную проблему. В вашем файле logstash.conf вы указываете имя хоста redis:

 redis {
    host => "redis:6379"
}
  

Однако в вашем файле docker-compose вы фактически не связываете службу redis с вашей службой logstash:

 logstash:
  <snip>
  links:
    - elasticsearch
  

Вместо этого вы связываете свою службу logstash с вашей службой redis. Насколько я понимаю, вы хотите, чтобы порт вашего контейнера redis был доступен для logstash, а не наоборот. Вы должны удалить logstash ссылку в своей службе redis и добавить redis ссылку в свою службу logstash. Итак:

 logstash:
  <snip>
  links:
    - elasticsearch
    - redis
  

Однако я не могу с уверенностью сказать, что это является причиной сообщения об ошибке.

Редактировать: конфигурация для ввода redis также может быть неправильной. Согласно документации, порт должен быть указан как отдельное свойство, подобное этому:

 redis {
    host => "redis"
    port => 6379
}
  

Комментарии:

1. Другой возможной ошибкой является host => "redis:6379" . Я думаю, что порт должен быть указан отдельным port свойством. Итак, что-то похожее на: host => «redis» port => 6379 Стоит попробовать.