Статьи

ActiveMQ как брокер сообщений для Logstash

При масштабировании Logstash обычно добавляется посредник сообщений, который используется для временной буферизации входящих сообщений до их обработки одним или несколькими узлами Logstash. Данные передаются посредникам либо через грузоотправителя типа Бивера, который читает журнальные файлы и отправляет каждое событие посреднику. В качестве альтернативы приложение может отправлять события журнала напрямую, используя что-то вроде приложения Log4j.

обзор

Распространенным вариантом является использование Redis в качестве посредника, который хранит данные в памяти, но также возможны другие варианты, такие как Apache Kafka. Иногда организации не очень хотят внедрять множество новых технологий и хотят повторно использовать существующие магазины. ActiveMQ — это широко используемая платформа для обмена сообщениями и интеграции, которая поддерживает различные протоколы и выглядит просто идеально для использования в качестве брокера сообщений. Давайте посмотрим варианты его интеграции.

Настройка ActiveMQ

ActiveMQ можно легко настроить с помощью прилагаемых к нему скриптов. В Linux это просто вопрос ./activemq console . Используя консоль администратора по адресу http://127.0.0.1:8161/admin/, вы можете создавать новые очереди и даже ставить сообщения в очередь для тестирования.

админ-панели

Использование сообщений с AMQP

Очевидным способом подключения ActiveMQ к Logstash является использование AMQP, расширенного протокола очереди сообщений . Это стандартный протокол, который поддерживается различными платформами обмена сообщениями.

Раньше был вход Logstash для AMQP, но, к сожалению, он был переименован в rabbitmq-input, потому что RabbitMQ — основная поддерживаемая система.

Давайте посмотрим, что произойдет, если мы попытаемся использовать ввод с ActiveMQ.

01
02
03
04
05
06
07
08
09
10
11
12
13
input {
    rabbitmq {
        host => "localhost"
        queue => "TestQueue"
        port => 5672
    }
}
 
output {
    stdout {
        codec => "rubydebug"
    }
}

Мы говорим Logstash прослушивать localhost на стандартном порту в очереди с именем TestQueue. Результат должен быть просто выведен на стандартный вывод. К сожалению, Logstash только выдает ошибки, потому что не может подключиться.

1
2
Logstash startup completed
RabbitMQ connection error: . Will reconnect in 10 seconds... {:level=>:error}

В журналах ActiveMQ мы видим, что наши параметры верны, но, к сожалению, обе системы говорят на разных диалектах AMQP.

1
2
3
WARN | Connection attempt from non AMQP v1.0 client. AMQP,0,0,9,1
org.apache.activemq.transport.amqp.AmqpProtocolException: Connection from client using unsupported AMQP attempted
...

Так что везет с этим вариантом.

Использование сообщений с помощью STOMP

Точно названный Simple Text Oriented Messaging Protocol является еще одним вариантом, который поддерживается ActiveMQ. К счастью, для этого есть специальный вклад . Он не включен в Logstash по умолчанию, но может быть легко установлен.

1
bin/plugin install logstash-input-stomp

После этого мы можем просто использовать его в нашей конфигурации Logstash.

01
02
03
04
05
06
07
08
09
10
11
12
input {
    stomp {
        host => "localhost"
        destination => "TestQueue"
    }
}
 
output {
    stdout {
        codec => "rubydebug"
    }
}

На этот раз нам лучше: Logstash действительно может подключиться и вывести наше сообщение на стандартный вывод.

1
2
3
4
5
6
7
bin/logstash --config stomp.conf
Logstash startup completed
{
       "message" => "Can I kick it...",
      "@version" => "1",
    "@timestamp" => "2015-07-22T05:42:35.016Z"
}

Использование сообщений с JMS

Хотя ввод stomp работает, есть еще одна опция, которая еще не выпущена, но уже может быть протестирована: jms-input поддерживает Java Messaging System, стандартный способ обмена сообщениями в JVM.

В настоящее время вам нужно создать плагин самостоятельно (который не работал на моей машине, но должен быть вызван моей устаревшей локальной установкой jruby).

Получение данных в ActiveMQ

Теперь, когда мы знаем о способах получения данных из ActiveMQ, пришло время подумать о том, как вводить данные. При использовании Java вы можете использовать что-то вроде Log4j- или Logback -Appender, которые отправляют события журнала непосредственно в очередь, используя JMS.

К сожалению, когда дело доходит до доставки данных, ни одно из более популярных решений не может отправить данные в ActiveMQ. Если вы знаете какое-либо решение, которое можно использовать, было бы здорово, если бы вы могли оставить комментарий.

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

Ссылка: ActiveMQ в качестве брокера сообщений для Logstash от нашего партнера по JCG Флориана Хопфа в блоге Dev Time .