Потоковые данные в amazon elasticsearch с помощью logstash?

Поэтому я развернул кластер 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}

Я думаю, что у меня что-то совсем не так. По сути, я просто хочу передать некоторые фиктивные входные данные журнала в мой кластер amazon elasticsearch через logstash. Как мне поступить?

Изменить Тип хранилища — Экземпляр, а политика доступа настроена на доступность для всех.

Изменить

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

    }
}

person Karup    schedule 13.06.2016    source источник


Ответы (3)


Вам необходимо указать следующие два параметра:

  • aws_access_key_id и
  • aws_secret_access_key

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

aws_access_key_id и aws_secret_access_key в настоящее время необходимы для правильной работы этого > плагина. Последующие версии будут иметь следующую логику разрешения учетных данных:

person Val    schedule 13.06.2016
comment
Вероятно, это не проблема с журналом, а скорее неправильный параметр безопасности на стороне AWS IAM. - person Val; 13.06.2016
comment
Да, я пытаюсь понять это. Тем временем я подумал об использовании только плагина вывода elasticsearch ... с этим я получаю: время подключения истекло {:class=›Manticore::ConnectTimeout, :level=›:error}< /i> Я добавил код для редактирования на случай, если вы что-нибудь предложите. - person Karup; 13.06.2016
comment
Я собираюсь обновить комментарий. Это было исправлено, и у нас есть много клиентов, разрешающих учетные данные с помощью профилей экземпляров. - person dejavu013; 15.06.2016

Я также столкнулся с той же проблемой, и я решил ее, упомянув порт после имени хоста. Это происходит потому, что имя хоста 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 решает проблему.

person anand    schedule 15.02.2017

Мне удалось запустить logstash вместе с AWS Elasticsearch без AccessKeys, я настроил политику в сервисе ES.

Он работал без ключей, если вы запускаете logstash вручную, если вы запускаете logstash как службу, плагин не работает.

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

person cpanato    schedule 16.06.2016
comment
Не лучшая идея, так как это означает, что ваш экземпляр elasticsearch общедоступен. - person stephen; 17.10.2019
comment
согласен, это не лучшее решение :) - person cpanato; 18.10.2019