logstash和集中式redis问题

时间:2013-12-10 21:06:29

标签: redis logstash

我正在尝试使用文档作为示例在集中式设置中使用logstash:

http://logstash.net/docs/1.2.2/tutorials/getting-started-centralized

我的web服务器上运行了logstash(作为索引器),redis,elasticsearch和独立kibana3。然后我需要在另一台服务器上运行logstash作为代理来收集apache日志并通过redis将它们发送到Web服务器。代理的数量会增加,日志会有所不同,但是现在我只想让它工作!

我需要将所有内容作为服务运行,以便重新启动后一切正常。所有服务器都在运行Ubuntu。

对于所有logstash实例(索引器和代理),我使用以下init脚本(Ubuntu版本,第二个要点):

https://gist.github.com/shadabahmed/5486949#file-logstash-ubuntu

为了将redis作为服务运行,我按照这里的说明进行操作:

http://redis.io/topics/quickstart(更正确地安装redis)

Elasticsearch也作为服务运行。

在Web服务器上,正在运行redis-cli会返回PONG。导航到正确的Elasticsearch URL会返回正确的JSON响应。导航到Kibana3网址给了我仪表板,但没有数据。 UFW设置为允许redis端口(目前来自任何地方)。

在Web服务器上,我的logstash.conf是:

input {
    file {
      path => "/var/log/apache2/access.log"
      type => "apache-access"
      sincedb_path => "/etc/logstash/.sincedb"
    }
    redis {
      host => "127.0.0.1"
      data_type => "list"
      key => "logstash"
      codec => json
    }
}

filter {
  grok {
    type => "apache-access"
    pattern => "%{COMBINEDAPACHELOG}"
  }
}

output {
  elasticsearch {
    embedded => true
  }
  statsd {
    # Count one hit every event by response
    increment => "apache.response.%{response}"
  }
} 

从代理服务器,我可以成功telnet到Web服务器IP和redis端口。 logstash正在运行。 logstash.conf文件是:

input {
  file {
    path => "/var/log/apache2/shift.access.log"
    type => "apache"
    sincedb_path => "/etc/logstash/since_db"
  }
  stdin {
     type => "example"
   }
}

filter {
  if [type] == "apache" {
    grok {
      pattern => "%{COMBINEDAPACHELOG}"
    }
  }
}

output {
  stdout { codec => rubydebug }
  redis { host => ["xx.xx.xx.xx"] data_type => "list" key => "logstash" }
}

如果我注释掉stdinstdout行,我仍然无法得到结果。 logstash日志不会给我任何连接错误 - 只有关于已弃用的grok设置格式的警告。

我也试过从命令行运行logstash(确保首先停止妖魔化服务)。 apache日志文件在终端中正确输出,所以我知道logstash正在正确访问日志。我可以编写随机字符串,并以正确的logstash格式输出。

网络服务器上的redis日志显示没有任何问题......

令人沮丧的是,这已经奏效了一次。来自stdin的一条消息一直延伸到弹性搜索。在获得所有设置之后,这就是今天早上。从那以后,我没有运气,我不明白为什么!

任何提示/指示感激不尽......解决我的问题会阻止我撕掉更多的头发,这也会让我的妻子开心......

更新

而不是填写评论......

感谢@Vor和@rutter,我已经确认运行logstash的用户可以读/写logstash.log文件。

我使用-vv运行代理,并使用例如:

填充日志
{:timestamp=>"2013-12-12T06:27:59.754000+0100", :message=>"config LogStash::Outputs::Redis/@host = [\"XX.XX.XX.XX\"]", :level=>:debug, :file=>"/opt/logstash/logstash.jar!/logstash/config/mixin.rb", :line=>"104"}

然后我将随机文本输入到终端并获得stdout结果。但是,在AFTER终止logstash代理之前,我在日志中看不到任何内容。代理终止后,我在logstash.log中获得这样的行:

{:timestamp=>"2013-12-12T06:27:59.835000+0100", :message=>"Pipeline started", :level=>:info, :file=>"/opt/logstash/logstash.jar!/logstash/pipeline.rb", :line=>"69"}

{:timestamp=>"2013-12-12T06:29:22.429000+0100", :message=>"output received", :event=>#<LogStash::Event:0x77962b4d @cancelled=false, @data={"message"=>"test", "@timestamp"=>"2013-12-12T05:29:22.420Z", "@version"=>"1", "type"=>"example", "host"=>"Ubuntu-1204-precise-64-minimal"}>, :level=>:info, :file=>"(eval)", :line=>"16"}

{:timestamp=>"2013-12-12T06:29:22.461000+0100", :level=>:debug, :host=>"XX.XX.XX.XX", :port=>6379, :timeout=>5, :db=>0, :file=>"/opt/logstash/logstash.jar!/logstash/outputs/redis.rb", :line=>"230"}

但是当我在stdout中收到消息时,我在其他服务器上的redis中什么都没得到。然而,我可以telnet到另一台服务器上的正确端口,我在telnet中得到“ping / PONG”,因此另一台服务器上的redis正在工作.....并且redis日志中没有错误等。

在我看来,非常喜欢logstash托运代理上的redis插件没有按预期工作,但对于我的生活,我无法看到故障来自哪里.....

0 个答案:

没有答案