We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

К списку статей

Аналитика логов веб‑приложений в реальном времени: Loki, Promtail и Grafana Loki‑pipeline для PHP и Django‑сервисов

В современном мире разработки веб-приложений, эффективная работа с логами является критически важной задачей. Не только для отладки и мониторинга, но и для обеспечения безопасности, соответствия требованиям регуляторов (например, ФЗ-152 «О персональных данных») и проведения расследований инцидентов. В данной статье мы рассмотрим комплексное решение для аналитики логов в реальном времени, основанное на Loki, Promtail и Grafana Loki-pipeline, с акцентом на интеграцию с PHP и Django-сервисами, и обсудим аспекты соответствия актуальному законодательству РФ.

Законодательные требования к ведению логов в РФ

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

Архитектура решения

Наше решение состоит из трех основных компонентов:

  • Loki: Система хранения и запросов к логам, разработанная компанией Grafana Labs. В отличие от традиционных систем, Loki индексирует только метаданные логов, а сами логи хранятся как неструктурированный текст. Это делает Loki более экономичным и масштабируемым.
  • Promtail: Агент, собирающий логи с серверов и отправляющий их в Loki. Promtail поддерживает различные форматы логов и может настраиваться для фильтрации и обогащения данных.
  • Grafana Loki-pipeline: Позволяет выполнять сложные преобразования логов перед их индексацией в Loki. Это включает в себя парсинг, фильтрацию, маскирование конфиденциальных данных и обогащение логов дополнительной информацией.

Схема взаимодействия:

Веб-приложение (PHP/Django) -> Promtail -> Loki-pipeline -> Loki -> Grafana (для визуализации)

Интеграция с PHP

Для интеграции с PHP-приложением вам потребуется настроить систему логирования для записи логов в стандартный вывод (stdout) или в файл. Promtail будет собирать эти логи. В качестве примера, можно использовать библиотеку Monolog:

<?php
require 'vendor/autoload.php';

$log = new MonologLogger('app');
$log->pushHandler(new MonologHandlerStreamHandler('php_app.log'));

$log->info('Приложение запущено');
$log->error('Произошла ошибка');

?>

Настройка Promtail для сбора логов из файла php_app.log:

scrape_configs:
  - job_name: php-app
    static_configs:
      - targets: ['localhost']
        labels:
          job: php-app
          path: /var/log/php_app.log

Интеграция с Django

Django имеет встроенную систему логирования, которая позволяет легко настроить запись логов в различные источники. В файле settings.py необходимо настроить логирование:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

Настройка Promtail для сбора логов из stdout:

scrape_configs:
  - job_name: django-app
    static_configs:
      - targets: ['localhost']
        labels:
          job: django-app
          path: /var/log/django.log # Если Django пишет в файл, укажите путь к нему

Loki-pipeline: Обеспечение соответствия законодательству

Loki-pipeline позволяет нам выполнять критически важные операции для соответствия требованиям законодательства:

  • Маскирование персональных данных: Используйте регулярные выражения для удаления или замены конфиденциальной информации, такой как номера телефонов, адреса электронной почты, идентификаторы пользователей.
  • Фильтрация ненужных логов: Исключите из индексации логи, не имеющие значения для аудита и безопасности.
  • Обогащение логов: Добавьте дополнительную информацию, такую как географическое местоположение пользователя или идентификатор сессии.

Пример pipeline для маскирования IP-адресов:

pipeline_stages:
  - regex:
      expression: '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
      replacement: 'XXX.XXX.XXX.XXX'
  - json:
      expressions:
        ip_masked: masked_ip
  - labels:
    ip_masked: ip_masked

Визуализация данных с помощью Grafana

Grafana предоставляет мощные инструменты для визуализации логов, создания дашбордов и настройки оповещений. Вы можете использовать LogQL – язык запросов Loki – для поиска и анализа логов.

Заключение

Использование Loki, Promtail и Grafana Loki-pipeline позволяет создать эффективную систему аналитики логов для веб-приложений на PHP и Django. Правильная настройка Loki-pipeline и соблюдение требований законодательства РФ являются ключевыми факторами для обеспечения безопасности и соответствия нормативным актам.

Услуги РыбинскЛАБ

Компания РыбинскЛАБ предлагает полный спектр услуг по разработке веб-приложений, включая интеграцию систем логирования, настройку Loki, Promtail и Grafana Loki-pipeline, а также консультации по вопросам соответствия требованиям российского законодательства. Мы поможем вам создать надежную и безопасную систему мониторинга и анализа логов, которая будет соответствовать вашим потребностям и требованиям регуляторов. Свяжитесь с нами для обсуждения вашего проекта!

Материал подготовлен и отредактирован для практического применения. Перед внедрением в продакшен проверьте код и команды на своём окружении.

Поделиться материалом

Нужна сложная backend-разработка?

Проектирование архитектуры, PHP/Python backend, интеграции API, боты, автоматизация и оптимизация существующих систем.

Обсудить проект
Поддержать проект