Не так давно возникла задача мониторинга проекта, который не бежит внутри Kubernetes и простые настройки Prometheus не совсем подходят. Знать нагрузки на сервис интересно, но не хочется много накручивать и писать дополнительный код (к тому же проекты работают весьма успешно на PHP). Посмотрев что может отдать стандартный nginx понял, что в принципе базовую нагрузку вытащить будет довольно легко. Приступаем:
- Экспорт метрик nginx. Для этого редактируем наш default.conf и добавляем:
location = /nginx_stats { stub_status; # we can close status endpoint from public and put allowed IP-s: #allow 127.0.0.1; #only allow requests from localhost #deny all; #deny all other hosts }
Перезапускаем nginx, убеждаемся что все работает и по адресу nginx_stats мы получаем метрики:
Active connections: 1 server accepts handled requests 419 419 8411 Reading: 0 Writing: 1 Waiting: 0
- Воспользуемся Prometheus Exporter, который будет забирать метрики в формате nginx и переводить их на формат Prometheus:
docker run -p 9113:9113 nginx/nginx-prometheus-exporter:0.8.0 -nginx.scrape-uri https://my-site/nginx_stats
Теперь если сделаем curl localhost:9113/metrics мы должны будем видеть привычные для нас метрики Prometheus.
- Решение выше отлично работает локально. В следующей серии покажу как можно запускать экспортер внутри Kubernetes чтобы собирать метрики «домашним» Prometheus.