Pull to refresh
1066.12
OTUS
Цифровые навыки от ведущих экспертов

Symfony + Filebeat + Elasticsearch

Reading time3 min
Views3.7K
Original author: Fabien Paitry

Собираем логи Symfony в Elasticsearch с помощью Filebeat и Monolog

Observability (и, как следствие, сбор логов) — это важная составляющая наших материальных средств, без которой было бы очень трудно исследовать баги или обнаруживать брутфорс-атаки. Обычно приложение выводит логи в специальный файл журнала или стандартный вывод системы (stdout). Это, конечно, уже что-то, но отсюда вытекает несколько проблем:

  • Работа с логами в текстовой форме и в зачастую огромных файлах сложна и не очень удобна.

  • Необходимо иметь доступа к машине с логами (в случае, если логи хранятся в файлах журналов).

  • Коррелирование таких логов не представляется возможным. 

К счастью для нас, существуют решения, облегчающие централизацию и работу с логами приложений (Elastic, Grafana Loki и т.д.).

В этой статье мы с вами разберемся, как быстро настроить централизацию логов Symfony в Elasticsearch с использованием Monolog и Filebeat.

Elasticsearch: Elasticsearch — поисковая система на основе Apache Lucene. Она может похвастаться полнотекстовым индексированием и поисковый механизмом, доступный через HTTP (REST) интерфейс.

Monolog: Monolog — это PHP-библиотека для управления логами PHP и пересылки их в различные места назначения (файлы, стандартный вывод, Elasticsearch, Logstash и т.д.). Monolog реализована по стандарту PSR-3 и легко интегрируется с Symfony через специальный пакет.

Filebeat: Filebeat представляет из себя агента для сборки логов. Он может анализировать файлы журналов и перенаправлять логи в системы сбора данных, такие как Elasticsearch, Logstash или Kafka.

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

Приложение Symfony записывает свои логи в файл blog.log (с помощью Monolog). Затем Filebeat собирает эти файлы и индексирует их в Elasticsearch. Kibana в свою очередь использует API Elasticsearch для извлечения и представления этих логов в удной для пользователя форме.

Установка и настройка Monolog

Чтобы установить Monolog, вам будет достаточно запустить в Composer следующую команду:

composer require symfony/monolog-bundle

Откройте файл конфигурации monolog и добавьте туда следующие строчки, чтобы логи пересылались в файл /var/blog/app/blog.log:

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: error
            handler: nested
            excluded_http_codes: [404, 405]
            buffer_size: 50
        nested:
            type: rotating_file
            path: "/var/log/app/blog.log"
            level: debug
            formatter: 'monolog.formatter.logstash'
            max_files: 3
        console:
            type: console
            process_psr_3_messages: false
            channels: ["!event", "!doctrine"]

Режим форматировщика monolog.format.logstash позволяет форматировать логи сразу в формат Logstash. Этот формат нативно поддерживается Kibana и делает работу с вашими логами немного проще.

Хендлер типа rotating_file позволяет настроить ротацию файлов журналов по таймстемпам (1 файл в день). В данной конфигурации мы ограничиваемся максимум тремя файлами. Monolog позаботится об автоматическом удалении старых файлов журналов.

ПРИМЕЧАНИЕ: Вам не нужно заботиться об удалении файлов журналов, собранных Filebeat. Filebeat имеет встроенный механизм, который позволяет ему «сохранять» указатель на последний собранный файл журнала. Таким образом устраняется риск дублирования логов.

Установка и настройка Filebeat

Filebeat должен быть установлен в качестве PHP-агента на целевой машине: https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html

Чтобы Filebeat собирал записи из файла /var/log/app/blog.log, вам необходимо отредактировать раздел «input» файла конфигурации следующим образом:

# ============================== Входные данные Filebeat ===============================

filebeat.inputs:
  - type: log
    enabled: true

    json.add_error_key: true
    json.expand_keys: true
    json.keys_under_root: true
    json.overwrite_keys: true
    fields:
      event.dataset: blog
    fields_under_root: true
    paths:
      - /var/log/app/*.log

А чтобы Filebeat мог индексировать журналы в Elasticsearch, вам необходимо будет добавить следующие строки в раздел «output» файла конфигурации Filebeat:

# ================================== Вывод ===================================

# ---------------------------- Вывод Elasticsearch ----------------------------
output.elasticsearch:
  hosts: ["localhost:9200"]
  username: "elasticsearch_user"
  password: "elasticsearch_password"

Работа с логами в Kibana

Once the configuration is complete you can view the logs in Kibana by going to the Logs -> Stream section:

После всей этой несложной настройки вы уже сможете просмотреть логи в Kibana, просто перейдя в раздел «Logs» -> «Stream»:


Приглашаем всех желающих на открытое занятие «Фильтры в API Platform». Узнать подробнее и записаться на урок можно на странице курса "Symfony Framework".

Tags:
Hubs:
Total votes 6: ↑4 and ↓2+2
Comments3

Articles

Information

Website
otus.ru
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
OTUS