Перейти к основному содержимому
Версия: 1.10

Nginx

warning

Раздел в активной разработке, часть информации может быть неактуальной!

Настройте интеграцию, чтобы загрузить данные с Nginx в Sage.

Выполните минимальные настройки для начала сбора телеметрии с Nginx:

  • загрузка метрик;
  • загрузка логов;
  • настройка дашборда на основе метрик;
  • настройка алерта на основе метрик.

Логи

Настройте загрузку логов Nginx в Sage:

  1. Определите группу доступа, в которую будут загружаться данные.

  2. Установите коллектор логов Vector согласно документации.

  3. Убедитесь, что Nginx генерирует логи в формате combined. Для этого добавьте в конфигурационный файл строку:

    access_log /dev/stdout combined;
  4. Сконфигурируйте настройки загрузки логов.

    Пример конфигурационного файла:

    # Source-секция
    [sources.source_nginx]
    # Сборка логов docker-контейнера
    type = "docker_logs"
    # Список лейблов, логи которых нужно собрать
    include_containers = [ "nginx" ]

    # Transform-секция
    [transforms.transform_nginx]
    # Список source-секций, данные из которых будут включены в transform-секцию
    inputs = [ "source_nginx" ]
    # Предназначение секции — обогащение загружаемых данных
    type = "remap"
    source = '''
    # Анализ текста сообщения, оценка уровня критичности записи
    if .stream == "stderr" {
    .parsed = parse_nginx_log(.message, "error") ?? { "message": .message }
    .parsed.level = "ERROR"
    } else {
    .parsed = parse_nginx_log(.message, "combined") ?? { "message": .message }
    .parsed.level = "INFO"
    }

    # Выставление метки времени
    if exists(.parsed.timestamp) {
    .parsed.@timestamp = del(.parsed.timestamp)
    } else {
    .parsed.@timestamp = .timestamp
    }

    # Дополнительное обогащение события необходимыми полями:
    # окружение, в котором работает обрабатываемая система
    .parsed.env = "<env>"
    # группа, которой принадлежит обрабатываемая система
    .parsed.group = "default"
    # имя хоста, на котором запущена система
    .parsed.inst = "host-with-nginx.example.com"
    # имя системы
    .parsed.system = "nginx"

    . = .parsed
    '''
    drop_on_abort = true
    drop_on_error = false

    # Sink-секция
    [sinks.sink_kafka]
    # Отправка логов в Sage Kafka
    type = "kafka"
    # Список секций, данные из которых нужно отправить в Sage
    inputs = [ "transform_nginx" ]
    # Алгоритм сжатия данных
    compression = "lz4"
    # Адреса брокеров Sage Kafka
    bootstrap_servers = "kafka-1.your.sage.domain:9092,kafka-2.your.sage.domain:9092"
    healthcheck = true
    # Имя топика, в который должны загружаться логи
    topic = "sage-logs-default"
    # ID клиента Kafka
    librdkafka_options."client.id" = "default_logs"
    encoding.codec = "json"
  5. Проверьте наличие логов в системе. Для этого укажите в запросе группу и имя системы, определенные для загрузки данных, например:

    group="default" system="nginx"

    Результат запроса вернет данные по системе nginx в группе default.

    • Если поиск не вернул данных, проверьте корректность настроек, а также формат и структуру загружаемых логов.
    • Если поиск вернул только часть данных, проверьте индекс dead-letters. Возможно, данные загрузились, но не соответствуют установленному формату.

Метрики

Настройте загрузку метрик Nginx в Sage:

  1. Установите экспортер nginx_prometheus_exporter для сбора метрик согласно инструкции. Метрики должны загружаться в формате Openmetrics.

  2. Зарегистрируйте таргеты для загрузки метрик в Sage с помощью Frost. Для этого создайте конфигурационный файл config.yml:

    # Группа в Sage, в которую будут загружаться метрики
    group: default
    # Имя клана, используемое при установке Sage (значение может быть произвольным)
    clan: example
    # Имя дата-центра, из которого загружаются метрики
    datacenter: dc01
    # Имя окружения, в котором расположен экспортер
    env: test

    # Адрес Sage API
    base_url: https://your.sage.domain/sauron/api

    systems:
    # Имя регистрируемой системы
    new-exporter:
    # Порт, на котором экспортер принимает запросы
    port: 9113
    # Лейблы, которые необходимо добавить к метриками системы
    staticLabels:
    job: exporter-metrics
    collection:
    target:
    # Список имен хостов, на которых установлены экспортеры
    - my-01.lovely.exporter
    - my-02.lovely.exporter
  3. Чтобы применить конфигурацию, выполните запрос:

    curl -i https://your.sage.domain/api/v1/targets \
    -X POST \
    --data-binary @config.yml \
    -H 'Authorization: Bearer eyJraWQ...FLw'

    Примечание: Запросы в Sage API должны включать Bearer-авторизацию с помощью JWT-токена, который передается в запросе в заголовке Authorization.

  4. Проверьте наличие метрик в системе. Для этого выполните поисковый запрос с метрикой up, указав в качестве лейблов интересующие параметры, например:

    pql up{group="sage", env="test", system="cybertruck", instance="apps-sage-1.ds.sage.local"}

    В результатах поиска найдите поле value, в которое передается одно из двух значений:

    • 1 — скрейпинг таргета выполняется успешно;
    • 0 — скрейпинг не работает по причине некорректных настроек или отсутствия доступов.

Grafana

Визуализируйте данные, загруженные в Sage, с помощью Grafana. Для этого:

  1. Перейдите на вкладку Grafana в интерфейсе приложения и авторизуйтесь.

  2. Выберите пункт меню Dashboards в боковой панели. На странице выберите из списка папку SageTemplates.

    Поиск дашбордов в Grafana

  3. Скопируйте из папки пример дашборда для Nginx. Если загрузка данных была настроена успешно, на дашборде отобразится соответствующая информация.

Пример дашборда в Grafana:

Пример дашборда в Grafana

Алерты

Настройте алерты на основе загруженных метрик Nginx.

Чтобы создать алерт в Sage:

  1. Подготовьте поисковый запрос, который будет использован в качестве условия в алерте. Для этого используйте метрики, экспортируемые с помощью nginx_prometheus_exporter (список см. в документации).

  2. Создайте адрес, на который будут приходить оповещения по алерту.

  3. Задайте логику выполнения алерта с помощью скрипта.

    Пример алерта для отслеживания статуса Nginx:

    // Запрос в Sage, который возвращает данные по указанной метрике за последнюю минуту
    const dead_systems = await mage({
    start: '-1m',
    query: 'pql step=1m nginx_up == 0',
    });

    // Фильтрация результата запроса по уникальному имени системы
    const dead_instances = [
    ...new Set(dead_systems.map(point => point.instance))
    ]

    // Отправка оповещения при условии, если найдена хотя бы одна неисправная система
    if (dead_instances.length > 0) {
    // Конкатенация имен неисправных систем в одну строку
    const instances_str = dead_instances.join('\n')

    // Отправка оповещения дежурному
    await page({
    // Список адресов для отправки оповещения
    addresses: ['slack:sage-alerts'],
    // Строка с текстом оповещения
    message: `Nginx does not respond!\Reported by:\n${instances_str}`,
    cooldownKey: `my-sys-cooldown`,
    cooldownDuration: 3600,
    });
    }
  4. В результате при выполнении указанных условий на заданный адрес будет доставлено оповещение.