3

所以我启动了一个 2 实例 Amazon Elasticsearch 集群。

我已经安装了logstash-output-amazon_es插件。这是我的logstash配置文件:

input {
    file {
        path => "/Users/user/Desktop/user/logs/*"
    }
}

filter {
  grok {
    match => {
      "message" => '%{COMMONAPACHELOG} %{QS}%{QS}'
    }
  }

  date {
    match => [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z" ]
    locale => en
  }

  useragent {
    source => "agent"
    target => "useragent"
  }
}

output {
    amazon_es {
        hosts => ["foo.us-east-1.es.amazonaws.com"]
        region => "us-east-1"
        index => "apache_elk_example"
        template => "./apache_template.json"
        template_name => "apache_elk_example"
        template_overwrite => true
    }
}

现在我从我的终端运行它:

/usr/local/opt/logstash/bin/logstash -f apache_logstash.conf

我得到错误:

Failed to install template: undefined method `credentials' for nil:NilClass {:level=>:error}

我想我完全错了。基本上我只想通过logstash向我的亚马逊elasticsearch集群提供一些虚拟日志输入。我应该如何进行?

编辑存储类型为实例,访问策略设置为可供所有人访问。

编辑

output {
    elasticsearch {
        hosts => ["foo.us-east-1.es.amazonaws.com"]
        ssl => true
    index => "apache_elk_example"
         template => "./apache_template.json"
          template_name => "apache_elk_example"
          template_overwrite => true

    }
}
4

3 回答 3

3

我也遇到了同样的问题,我通过在主机名后面提到端口来解决它。发生这种情况是因为主机名hosts => ["foo.us-east-1.es.amazonaws.com"]指向foo.us-east-1.es.amazonaws.com:9200的不是 aws elasticsearch 的默认端口。所以通过更改主机名来foo.us-east-1.es.amazonaws.com:80解决问题。

于 2017-02-15T19:12:08.797 回答
2

您需要提供以下两个参数:

  • aws_access_key_id
  • aws_secret_access_key

尽管它们被描述为可选参数,但代码中有一条注释说明了这一点。

此>插件当前需要 aws_access_key_id 和 aws_secret_access_key 才能正常工作。后续版本的凭证解析逻辑如下:

于 2016-06-13T09:15:59.210 回答
2

我能够在没有 AccessKeys 的情况下与 AWS Elasticsearch 一起运行 logstash,我在 ES 服务中配置了策略。

如果您手动启动logstash,它可以在没有密钥的情况下工作,如果您将logstash 作为服务启动,则插件不会工作。

https://github.com/awslabs/logstash-output-amazon_es/issues/34

于 2016-06-16T06:49:31.437 回答