Мониторинг nginx (500) с телеграфом

Я хотел бы понять, что возвращает мой экземпляр nginx и кого он просит обрабатывать запросы. Какая часть моих запросов обрабатывается рельсами, какая часть обрабатывается непосредственно nginx, какая часть направляется в nginx_status и т. Д.

Точно так же я хотел бы понять такие вещи, как то, сколько из которых HTTP-кодов результата я возвращаю. Если будет пик в 500-х, я бы хотел знать.

Плагин telegraf nginx предоставляет некоторую базовую статистику по nginx, но не более того. Я видел несколько смутно сложных решений для кодов результатов, которые в основном включают настройку инфраструктуры мониторинга журналов. Эти данные кажутся настолько фундаментальными, что я чувствую, что что-то упустил.

Я не видел ничего, что поможет мне понять, кто на самом деле обрабатывает запросы (то есть, какой обработчик).

Все это интересно, потому что (1) светский рост в распределениях обработчиков может указывать на проблемы масштабирования более понятными способами, чем простая загрузка на машины обработчиков, и (2) пики в любом случае могут сигнализировать о проблемах.

Есть указатели?

3 ответа

Если это актуально, я хотел бы написать свой собственный конфиг. Он основан на плагине хвостового телеграфа.

  1. Добавить специальный журнал в раздел http
    log_format codes_combined 'code=$status ts=$time_iso8601';
  1. Используйте этот формат в разделе сервера
    access_log /var/log/nginx/codes.log codes_combined;
  1. Отредактируйте /etc/telegraf/telegraf.conf:
[[inputs.tail]]
    files = ["/var/log/nginx/codes.log"]
    data_format = "logfmt"
  1. После перезапуска данные nginx и telegrap должны быть доступны в Graphana. Я настроил новый график
SELECT count("code") as code_2xx FROM "tail" WHERE $timeFilter AND code >= 200 AND code < 300 AND code  <> 204  GROUP BY time($__interval)
SELECT count("code") as  code_3xx  FROM "tail" WHERE $timeFilter AND code >= 300 AND code < 400 GROUP BY time($__interval)
SELECT count("code") as  code_4xx  FROM "tail" WHERE $timeFilter AND code >= 400 AND code < 500 GROUP BY time($__interval)
SELECT count("code") as  code_5xx  FROM "tail" WHERE $timeFilter AND code >= 500  GROUP BY time($__interval)
SELECT count("code") as code_204 FROM "tail" WHERE $timeFilter AND  code  = 204  GROUP BY time($__interval)
  1. Не забудьте проверить /etc/logrotate.d/nginx. Разрешения должны быть такими:
create 0644 www-data adm

Вы можете позволить telegraf собирать ваши логи доступа nginx. Затем вы можете проанализировать, сколько запросов имело какой код статуса HTTP (1xx, 2xx и т. Д.).

Добавьте это к вашему /etc/telegraf/telegraf.conf (и убедитесь, что у telegraf есть права доступа к лог-файлу, он не сообщит вам, если не имеет):

[[inputs.logparser]]
   files = ["/var/log/nginx/access.log"]
   from_beginning = true
   name_override = "nginx_access_log"

   [inputs.logparser.grok]
     patterns = ["%{COMBINED_LOG_FORMAT}"]
     measurement = "nginx_access_log"

Если вам нужно изменить права доступа к файлам в каталоге /var/log/nginx/, вы можете попробовать использовать следующую команду:

sudo chmod 777 /var/log/nginx/*

Запустив эту команду с привилегиями суперпользователя (sudo), вы предоставите всем пользователям (владельцу, группе и другим) разрешения на чтение, запись и выполнение для всех файлов в каталоге /var/log/nginx/.

Пожалуйста, соблюдайте осторожность при использовании chmod 777, поскольку он предоставляет полные разрешения всем пользователям, что может иметь последствия для безопасности. Обычно рекомендуется устанавливать более строгие разрешения в зависимости от ваших конкретных требований и правил безопасности.

Прежде чем продолжить, убедитесь, что изменение разрешений файлов в каталоге /var/log/nginx/ необходимо и соответствует предполагаемому варианту использования или потребностям в устранении неполадок.

Другие вопросы по тегам