使用docker-compose的redis + elk堆栈

时间:2016-10-06 09:28:48

标签: docker docker-compose elastic-stack

我正在尝试使用docker设置redis + ELK堆栈。我希望使用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 个答案:

答案 0 :(得分:0)

我可以看到一个直接的问题。在logstash.conf文件中指定redis主机名:

redis {
    host => "redis:6379"
}

在您的docker-compose文件中,您实际上并未将redis服务链接到您的logstash服务中:

logstash:
  <snip>
  links:
    - elasticsearch

而是将您的logstash服务链接到您的redis服务。据我所知,您希望redis容器的端口可用于logstash,而不是相反。您应该删除redis服务中的logstash链接,并在您的logstash服务中添加redis链接。所以:

logstash:
  <snip>
  links:
    - elasticsearch
    - redis

我不能肯定地说这是错误信息的原因。

编辑:redis输入的配置也可能有误。根据{{​​3}},端口应指定为单独的属性,如下所示:

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