Graylog - це нестандартне рішення для ведення логів з можливістю налаштування оповіщень для певних подій, а також перегляду відфільтрованих подій в реальному часі. Він написаний на RoR, швидкий, надійний та має інформативні графіки.
Для зв'язки Symfony2 з Graylog2 bundle нам потрібно https://github.com/mlehner/gelf-php.
Встановлення бібліотеки mlehner/gelf-php
Додайте до composer.json пакет mlehner / gelf-php:
"mlehner/gelf-php": "v1.0"
І оновіть вендори:
$ php composer.phar update
Бібліотеку встановлено!
Налаштування виведення логів на сервері Graylog в Symfony
У конфігурації потрібного оточення (prod, dev, test) пишемо
parameters: graylog.hostname: localhost graylog.port: 12201 #standart port
Для різних середовищ можна налаштувати різні адреси хостів. Наприклад, для розробки і тестування (config_dev) підійде localhost, для Productions (config_prod) - централізований хост для логування.
У базовому конфігураційному файлі "config.yml" оголошуємо два нових сервіси:
У config.yml:
services: #... gelf.publisher: class: Gelf\MessagePublisher arguments: [%graylog.hostname%, %graylog.port%] monolog.gelf_handler: class: Monolog\Handler\GelfHandler arguments: [@gelf.publisher]
Перший "gelf.publisher" - це простий "відправник" повідомлень на сервер Graylog, а другий "monolog.gelf_handler" - це обробник монологу, якому передається попередній сервіс як параметр ([@ gelf.publisher]).
Іншими словами, ми створюємо своєрідний сервіс для підписки на монолог подій.
У конфігурації монологу (config.yml) ми повинні вказати його:
monolog: handlers: #... gelf: type: service id: monolog.gelf_handler level: debug
Ми можемо задати "рівень" повідомлень, починаючи з якого буде приходити лог. Якщо коротко, то ось список повідомлень рівнів у порядку зростання: INHERIT -> DEBUG -> INFO -> WARN -> ERROR -> FATAL. Оскільки у нас рівень "DEBUG", то ми отримуємо всі типи повідомлень, окрім "INHERIT".
Готово! Ви можете перевірити записи журналу на сервері Graylog.
Додавання додаткової інформації до журналу
У зв'язку з популярністю високопродуктивних серверів, а також хмарних сервісів, часто трапляється так, що один і той же сервер містить декілька віртуальних хостів. В такому випадку ми не зможемо відфільтрувати повідомлення в Graylog за окремими сайтами, повідомлення будуть виводитися в такому вигляді:
Щоб відфільтрувати повідомлення для різних віртуальних хостів, нам потрібно додати в лог додаткову інформацію, наприклад HTTP_HOST. Для додавання додаткової інформації необхідно написати свій сервіс-Процесор для монологу, або скористатися готовим з Monolog / Processor. Створення власного процесора описано тут
Ми готові підключити WebProcessor із Monolog. (Vendor / Monolog / Processor / WebProcessor).
Анонсуємо новий сервіс у файлі config.yml:
services: #... monolog.processor.web_processor: class: Monolog\Processor\WebProcessor tags: - { name: monolog.processor, method: __invoke }
Відкрийте GrayLog і подивіться додаткову інформацію в повідомленнях:
Тепер ви можете створювати окремі "потоки" в Graylog для кожного віртуального хоста і призначати різні рівні сповіщень для різних хостів.
Таким чином, ми підключили Symfony до Graylog з входом в детальну інформацію, задавши лише конфігурацію Graylog2 та налаштування Graylog2 без необхідності писати додатковий код.