Статьи

Отправка сообщений о событиях PHP на удаленный Logstash в Windows

Эта статья была рецензирована Верн Анчетой , Скоттом Молинари и Джеффом Мэдсеном . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!


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

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

Ведение журнала и аналитика с графикой иллюстрации

Краткое введение в сообщения о событиях и Logstash

С помощью сообщений о событиях мы собираем информацию о событиях, которые происходят в наших приложениях, будь то бизнес-ориентированные решения пользователей приложений, решения, принимаемые самими приложениями, или их сбои. Каждое событие, помимо сообщения, которое оно передает, обычно определяется меткой времени и типом, таким как информационное сообщение, предупреждение или ошибка. Запись события — это журнал событий.

Кроме того, есть также Event Sourcing — несколько иная, но в то же время похожая концепция, которую вы, возможно, захотите проверить.

Существует множество инструментов, созданных специально для отправки журналов в хранилища данных для последующего анализа и принятия решений, основанных на знаниях. Logstash является одним из них, и из-за огромного количества плагинов ввода, вывода, кодеков и фильтров, которые он предлагает, является самым популярным. Из коробки он может читать журналы приложений Heroku , веб-хиты GitHub или API потоковой передачи Twitter , создавать новые события и отправлять их в Graylog , IRC или JIRA .

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

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

Издательские события

Для быстрого сравнения давайте сначала рассмотрим публикацию событий в Linux с помощью Rsyslog , любимого системного журнала многих компьютерных систем.

Запуск этого простого oneliner напишет «Hello Wold!» В системный журнал.

php -r "openlog('greeting', LOG_NDELAY, LOG_USER); syslog(LOG_INFO, 'Hello World!');" 

Поскольку и Rsyslog, и Logstash используют RELP , протокол на основе TCP для надежной доставки сообщений о событиях, отправка этого сообщения в Logstash требует добавления только двух коротких операторов в файл конфигурации Rsyslog.

 $ModLoad omrelp if $source == 'PHP-5.5.37' then :omrelp:centralserv:2514 

при условии, что Logstash прослушивает centralserv , порт 2514 .

В этом примере мы также фильтруем сообщения по источникам, так что будут отправляться только те сообщения, которые сделаны с нашим PHP.

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

Но на всякий случай, если вы хотите узнать больше об этой установке Linux, вот две ссылки качества.

Публикация событий на Windows

Мы будем получать инструкции на этом этапе. Найдите себе Windows-бокс и запустите oneliner ранее в командной строке . PHP кроссплатформенный. На этот раз это означает, что приветствие записывается службой журнала событий Windows, и вы можете увидеть его в средстве просмотра событий .

Просмотр событий можно найти в окне поиска Cortana . Или нажмите клавиши Windows + R, чтобы открыть окно «Выполнить» , введите eventvwr и нажмите «ОК», чтобы открыть окно «Просмотр событий».

После того, как программа просмотра событий открыта, разверните Журналы Windows в представлении дерева консоли слева, нажмите «Приложение» и прокрутите вниз отображаемые журналы в центральной части окна, если необходимо, чтобы получить доступ к ранее созданному журналу.

На этом этапе вы должны получить что-то вроде этого:

"Привет, мир!" сообщение видно в окне просмотра событий

Information уровне соответствует первому аргументу LOG_INFO мы передали в вызов syslog() а Source PHP-5.5.37 соответствует версии CLI PHP, которую мы запустили (обновите, чтобы соответствовать вашему). Зная это, вы также можете отфильтровать журнал приложений или создать пользовательское представление, нажав на соответствующие действия на панели действий справа.

Примечание. Если вы также видите такое сообщение:

Описание для Event ID 2 из исходного PHP-5.5.37 не может быть найдено.

тогда ваша установка PHP не добавила необходимую информацию в реестр Windows, поэтому вы должны сделать это вручную. Загрузите /win32/syslog.reg из репозитория исходного кода PHP, откройте его в текстовом редакторе, настройте версию PHP и путь к файлу dll, например, измените имя ключа из HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\PHP-5.3.99-dev в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\PHP-5.5.37 и значение EventMessageFile от g:\\test\\srctrunkinstall\\php7ts.dll до C:\\xampp\\php\\php5ts.dll и импортируйте ключ в реестр, дважды щелкнув значок файла.

Потоковая передача сообщений о событиях в Logstash с помощью агента Windows Rsyslog

Остальным шагом является передача таких сообщений в Logstash. Мы покажем вам, как это сделать с помощью Rsyslog Windows Agent , службы Windows, созданной Rsyslog и RELP. Агент автоматически отслеживает журнал событий и позволяет вам определять правила и действия.

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

фильтры

Мы собираемся отправлять только сообщения, сгенерированные PHP, поэтому, как только откроется Configuration Client, перейдите в диалог фильтров, щелкнув метку Filters в древовидном представлении в левой части окна. Нажмите на узел AND в центральном древовидном представлении, это графическое представление логического выражения, которое мы собираемся создать.

Теперь нажмите Add Filter> кнопку справа. В раскрывающихся меню выберите « Добавить фильтр» > « Монитор журнала событий V2» > « Источник события» . Нажмите, чтобы сфокусировать вновь созданное выражение, и на вкладке « Сведения » ниже измените « Операция сравнения из contains в», и в поле « Задать значение свойства» введите имя источника ваших журналов. В нашем примере это PHP-5.5.37 .

Состояние желаемых фильтров

Мы сделали правило. Далее мы собираемся создать действие.

действия

Удалите действие по умолчанию под меткой « Действия» в древовидном представлении слева, щелкнув его правой кнопкой мыши и выбрав « Удалить действие» в раскрывающемся меню. Затем добавьте новое действие, щелкнув правой кнопкой мыши на ярлыке Actions и выбрав Add Action > Send RELP из контекстного меню.

Добавлено действие Отправить RELP в виде дерева

Теперь, когда действие Send RELP сфокусировано, вы можете установить имя сервера RELP и порт RELP . Также для начала измените формат сообщения на %msg% . Это передаст сообщения на сервер RELP, как они есть, без их изменения.

Желаемое состояние отправки Отправить RELP

Запуск сервиса и отладка

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

Хотя вы подтверждаете, что установка действительно работает, полезно знать, что агент самостоятельно выдает сообщение об ошибке в случае, если сообщение, сообщение вашего приложения, не может быть получено сервером RELP. Вы можете увидеть служебные сообщения, как и следовало ожидать в средстве просмотра событий, но также щелкнув узел « События службы» в древовидном представлении в левой части окна клиента конфигурации.

Вывод

К настоящему времени вы получили общее представление о том, что такое Logstash и Rsyslog, узнали, что их можно использовать для создания распределенной системы на основе событий, и приобрели некоторый практический опыт.

А теперь давайте послушаем, что вы хотите сказать. Вы разрабатываете для Windows и используете Logstash на производстве или хотите использовать его сейчас? Большой! Мы также хотели бы услышать о ваших случаях использования или вопросах в комментариях ниже.

Ссылки