Золотые сигналы SRE для веб-сервера

Где бы мы были без веб-серверов? Вероятно, без интернета вообще ...

В наши дни простой веб-сервер имеет две основные функции: обслуживание простого статического содержимого, такого как HTML, JS, CSS, изображения и т. Д., И передачу динамических запросов в бэкэнд приложения, например, PHP, Java, PERL, C, COBOL и т. Д.Таким образом, веб-сервер обслуживает большинство наших критически важных сервисов, включая динамический веб-контент, API-интерфейсы и всевозможные специализированные сервисы, даже базы данных, поскольку в наши дни все, кажется, общается по HTTP.

Поэтому получать хорошие показатели работы (сигналы) для веб-серверов - критично.

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

  • Использовать очень ограниченные встроенные отчеты о состоянии или страницы о состоянии.
  • Собирать и агрегировать логи HTTP веб-сервера для этих важных данных.
  • Использовать показатели вышестоящих балансировщиков нагрузки, если есть такая возможность

Последний вариант - использовать метрики для каждого внутреннего сервера LB обычно является наилучшим способом, и в приведенном выше разделе «Балансировщик нагрузки» подробно описано, как это сделать.

Однако не все системы имеют правильный тип LB, и не все системы мониторинга поддерживают получение данных такого типа бэкэнда - например, это довольно сложно в Zabbix, так как он пытается получить данные об одном хосте (веб-сервере) от другого хоста (LB). И AWS ELB/ALB также имеют ограниченные данные.

Поэтому, если следует обратить внимание на страницы состояния веб-сервера и журналы HTTP, ниже приведены несколько болезненных, но стоящих способов.

Подготовка к сбору метрик веб-сервера

Есть несколько вещей, которые должны быть готовы, чтобы получить информацию о журналах и статусе:

Включить мониторинг состояния

Необходимо включить мониторинг состояния. Как для Apache, так и для Nginx лучше всего обслуживать его через другой порт (например, 81) или ограничить его для локальной сети, систем мониторинга и т.д., чтобы злоумышленники не могли получить к нему доступ.

  • Apache - Включить mod_status, включая ExtendedStatus. См. руководство по Apache от DataDog.
  • Nginx - включить модуль stub_status_module. См. руководство DataGog по Nginx.

Включить логирование

Нам нужны журналы, а это значит, что нужно их настроить, поместить в удобное место и в идеале разделить их с помощью vhost.

Нам нужно получить время отклика для журналов, что, к сожалению, не является частью стандартного формата или формата по умолчанию. Следует отредактировать веб-конфиги, чтобы получить это: