Статьи

Альтернатива реке Твиттер — индекс твитов в Elasticsearch с Logstash

В течение некоторого времени я использовал реку Twitter Elasticsearch для потоковой передачи твитов с конференций в Elasticsearch . Река проходит по узлу Elasticsearch, отслеживает API потоковой передачи Twitter для ключевых слов и напрямую индексирует документы в Elasticsearch. Поскольку реки уже устарели, пришло время перейти к рекомендуемой замене: Logstash .

С Logstash поиск данных из Twitter выполняется в другом процессе, возможно, даже на другом компьютере. Это помогает в масштабировании Logstash и Elasticsearch по отдельности.

Установка

Установка Logstash почти так же проста, как и для Elasticsearch, хотя вы не можете запустить его без конфигурации, которая сообщит ему, что вы хотите от него сделать. Вы можете скачать его , распаковать архив и есть скрипты для его запуска. Если вы хорошо используете встроенный экземпляр Elasticsearch, вам даже не нужно устанавливать его отдельно. Но вам нужен файл конфигурации, который сообщает Logstash, что именно делать.

конфигурация

Конфигурация для Logstash обычно состоит из трех разделов: вход, дополнительные фильтры и выходной раздел. Существует множество существующих компонентов для каждого из доступных . Структура файла конфигурации выглядит следующим образом (взято из документации):

01
02
03
04
05
06
07
08
09
10
11
12
13
# This is a comment. You should use comments to describe
# parts of your configuration.
input {
  ...
}
 
filter {
  ...
}
 
output {
  ...
}

Мы используем вход Твиттера , вывод упругого поиска_http и никаких фильтров.

щебет

Как и при любом взаимодействии с Twitter API, вам необходимо иметь учетную запись и настроить токены доступа.

01
02
03
04
05
06
07
08
09
10
11
input {
    twitter {
        # add your data
        consumer_key => ""
        consumer_secret => ""
        oauth_token => ""
        oauth_token_secret => ""
        keywords => ["elasticsearch"]
        full_tweet => true
    }
}

Вы должны передать все учетные данные, а также keywords для отслеживания. full_tweet опцию full_tweet вы можете индексировать намного больше данных, по умолчанию есть только несколько полей и отсутствует интересная информация, такая как хэштеги или упоминания.

Река Twitter, похоже, имеет имена, отличные от тех, которые отправляются с необработанными твитами, поэтому кажется, что невозможно легко проиндексировать данные журналов Twitter вместе с данными, созданными рекой Twitter. Но это не должно быть большой проблемой, чтобы изменить имена полей Logstash, а также с фильтром.

Elasticsearch

Есть три плагина, которые обеспечивают вывод в Elasticsearch : asticsearch , asticsearch_http иasticsearch_river . asticsearch предоставляет возможность связываться с кластером Elasticsearch в виде узла или с помощью транспорта ,asticsearch_http использует HTTP API, аasticsearch_river связывается через реку RabbitMQ. Версия http позволяет вам использовать разные версии Elasticsearch для Logstash и Elasticsearch, именно эту я использую. Обратите внимание, что плагинasticsearch также предоставляет опцию для установки протокола на http, который также, кажется, работает.

1
2
3
4
5
6
7
output {
    elasticsearch_http {
        host => "localhost"
        index => "conf"
        index_type => "tweet"
    }
}

В отличие от реки Твиттер, плагин Logstash не создает специального отображения для твитов. Я не просмотрел все поля, но, например, координаты, кажется, не отображаются правильно в geo_point и некоторые поля анализируются, что, вероятно, не должно быть (URL, имена пользователей). Если вы используете их, возможно, вы захотите подготовить свой индекс, предоставив ему пользовательское сопоставление.

По умолчанию твиты будут отправляться в Elasticsearch каждую секунду, что должно быть достаточно для любого анализа. Вы даже можете подумать об уменьшении этого с помощью свойства idle_flush_time .

Бег

Наконец, когда вся конфигурация установлена, вы можете выполнить Logstash, используя следующую команду (при условии, что конфигурация находится в файле twitter.conf):

1
bin/logstash agent -f twitter.conf

Ничего не остается, кроме как дождаться появления первых твитов в вашем локальном экземпляре по адресу http: // localhost: 9200 / conf / tweet / _search? Q = *: * pretty = true.

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