将heroku日志流失连接到logstash

时间:2018-08-21 02:41:45

标签: elasticsearch heroku logstash

我在Elastic Cloud上创建了一个Elasticsearch集群,并试图从Heroku发送日志。到目前为止,我还没有收到数据。

我有以下问题:

  1. 运行heroku Drains:add时应使用哪个URL进行日志泄漏?当我访问Kibana时,我的URL是https://my_id.us-east-1.aws.found.io:9243。我应该用那个吗?还是删除端口?

  2. 我应该如何设置Logstash配置?现在,我已经在GitHub上使用this gist对其进行了设置。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

运行heroku时我应该使用什么URL进行日志清除

它应该是运行Logstash的实例的URL。该URL应包含Logstash正在侦听的端口。

例如,如果您使用https://my_id.us-east-1.aws.found.io作为实例地址,并使用您提到的要点作为logstash配置,则URL应为:

https://my_id.us-east-1.aws.found.io:1514
  

我应该如何设置Logstash配置?

嗯,这取决于。您提到的要点可能是一个好的开始。但这很陈旧。因此,如果它不起作用,请考虑以下几点:

  • 根据Heroku官方文档的“日志泄漏”页面中的“ HTTPS drains”部分,heroku发送的日志是 syslog格式的

      

    对于HTTPS耗尽,Logplex会缓冲日志消息,并通过POST请求将消息批处理提交给HTTPS端点。 POST正文包含syslog格式的消息...

  • 在ElasticSearch官方文档的“ Logstash配置示例”页面的“处理Syslog消息”部分中,有一个Logstash配置示例,它将解析syslog格式的消息。

    这是完整的示例:

    filter {
      if [type] == "syslog" {
        grok {
          match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
          add_field => [ "received_at", "%{@timestamp}" ]
          add_field => [ "received_from", "%{host}" ]
        }
        date {
          match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
        }
      }
    }
    
    output {
      elasticsearch { hosts => ["localhost:9200"] }
      stdout { codec => rubydebug }
    }
    

    注意:在此配置中,您需要将localhost:9200更改为您在Elastic Cloud上的Elasticsearch集群的地址。


此外,这是一个sample应用程序代码,用编写。它不涉及Logstash。而是对日志数据进行自定义处理。