Мониторинг nginx (500) с телеграфом
Я хотел бы понять, что возвращает мой экземпляр nginx и кого он просит обрабатывать запросы. Какая часть моих запросов обрабатывается рельсами, какая часть обрабатывается непосредственно nginx, какая часть направляется в nginx_status и т. Д.
Точно так же я хотел бы понять такие вещи, как то, сколько из которых HTTP-кодов результата я возвращаю. Если будет пик в 500-х, я бы хотел знать.
Плагин telegraf nginx предоставляет некоторую базовую статистику по nginx, но не более того. Я видел несколько смутно сложных решений для кодов результатов, которые в основном включают настройку инфраструктуры мониторинга журналов. Эти данные кажутся настолько фундаментальными, что я чувствую, что что-то упустил.
Я не видел ничего, что поможет мне понять, кто на самом деле обрабатывает запросы (то есть, какой обработчик).
Все это интересно, потому что (1) светский рост в распределениях обработчиков может указывать на проблемы масштабирования более понятными способами, чем простая загрузка на машины обработчиков, и (2) пики в любом случае могут сигнализировать о проблемах.
Есть указатели?
3 ответа
Если это актуально, я хотел бы написать свой собственный конфиг. Он основан на плагине хвостового телеграфа.
- Добавить специальный журнал в раздел http
log_format codes_combined 'code=$status ts=$time_iso8601';
- Используйте этот формат в разделе сервера
access_log /var/log/nginx/codes.log codes_combined;
- Отредактируйте /etc/telegraf/telegraf.conf:
[[inputs.tail]]
files = ["/var/log/nginx/codes.log"]
data_format = "logfmt"
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)
- Не забудьте проверить /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/ необходимо и соответствует предполагаемому варианту использования или потребностям в устранении неполадок.