Мониторинг nginx#

Attention

Эта статья — января 2021 года. Вероятно, ситуация поменялась, по состоянию на ноябрь 2022-го я не вижу в репозитории и документации плагина python.d для nginx (есть для nginx Plus, но он не годится для обычного nginx).

Как и предполагал ранее, имеет смысл перейти на использование плагинов nginx и weblog на go.d.

Статью оставлю в текущем виде для понимания общего порядка действий (специфика для go.d может отличаться). В частности, оставлю более не актуальные ссылки на документацию плагинов.

Note

Мы в настоящее время используем плагины python.d.

Есть также аналогичные плагины на go.d.

Мне не удалось найти информацию по сравнению производительности, стоит ли переключаться с плагинов python.d на плагины go.d.

Модуль nginx (статистика коннектов к серверу в целом)#

Attention

Как пояснил выше, ссылка нерабочая. Оставляю в архивных целях.

https://learn.netdata.cloud/docs/agent/collectors/python.d.plugin/nginx/

Подсказки из /etc/netdata/nginx.conf:

# You must have ngx_http_stub_status_module configured on your nginx server
# for this plugin to work. The following is an example config.
# It must be located inside a server { } block.
#  
# location /stub_status {
#   stub_status;
#   # Security: Only allow access from the IP below.
#   allow 192.168.1.200;
#   # Deny anyone else
#   deny all;
#  }

Настройка nginx#

sudo vim /etc/nginx/conf.d/default.conf

# Добавляем в блок server
location /21QSv6cP_nginx_status {
           stub_status on;
           access_log off;
           allow 127.0.0.1;
           deny all;
       }

Перезапускаем nginx:

sudo nginx -t
sudo nginx -s reload

Настройка модуля nginx для Netdata:#

Hint

В /etc/netdata/conf.d/[module] (по умолчанию) хранится дефолтная конфигурация. Менять её не следует (она будет перезаписана при обновлении).

Все изменения нужно хранить в /etc/netdata/[module], где module — название модуля или плагина Netdata.

Использование edit-config автоматизирует процесс хранения изменений конфигурации отдельно от конфигурации по умолчанию, но то же самое можно делать и вручную.

Официальный способ (если Netdata установлена скриптом с официального сайта, при установке из пакета в настоящее время не работает):

cd /etc/netdata
sudo ./edit-config python.d/nginx.conf

При установке из пакета в настоящее время edit-config не работает, делаем то же самое вручную:

# Нужно выполнить только один раз,
# при установке/настройке первого плагина python.d
sudo mkdir /etc/netdata/python.d

# Нужно выполнить только один раз,
# при первичной настройке плагина nginx
# Не стоит перезаписывать, если файл уже существует!
sudo cp -nv /etc/netdata/conf.d/python.d/nginx.conf \
  /etc/netdata/python.d/nginx.conf

sudo vim /etc/netdata/python.d/nginx.conf

Добавляем:

localipv4_default:
  name : 'local'
  url  : 'http://127.0.0.1/21QSv6cP_nginx_status'

Перезапускаем Netdata, чтобы применить изменения:

sudo systemctl restart netdata.service

Дебаг плагина python.d/nginx:#

/usr/libexec/netdata/plugins.d/python.d.plugin \
  nginx trace debug

Модуль web_log (анализ логов — для каждого сайта в отдельности)#

Attention

Как пояснил выше, ссылка нерабочая. Оставляю в архивных целях.

https://learn.netdata.cloud/docs/agent/collectors/python.d.plugin/web_log/

Настройка доступа к файлам логов nginx#

Требуется, когда демон Netdata запущен от имени пользователя с ограниченными правами, в частности, при установке из пакета EPEL.

Нужно:

  • либо включить пользователя netdata в группу, которой принадлежат файлы логов nginx:

    # если логи nginx принадлежат группе nginx
    sudo usermod -aG nginx netdata
    
  • либо дать всем доступ на чтение к логам nginx:

    sudo chmod 644 /var/log/nginx/*.log
    sudo for my_dir in /srv/sites/*; \
      do chmod -v 644 ${my_dir}/logs/*.log; \
      done
    

    Во втором случае также нужно изменить права на файлы логов в конфигурации logrotate:

    sudo vim /etc/logrotate.d/nginx
    sudo vim /etc/logrotate.d/nginx-sitefactory
    

    — меняем строку create 640 nginx adm на create 644 nginx adm.

Настройка плагина web_log для Netdata#

Hint

В /etc/netdata/conf.d/[module] (по умолчанию) хранится дефолтная конфигурация. Менять её не следует (она будет перезаписана при обновлении).

Все изменения нужно хранить в /etc/netdata/[module], где module — название модуля или плагина Netdata.

Использование edit-config автоматизирует процесс хранения изменений конфигурации отдельно от конфигурации по умолчанию, но то же самое можно делать и вручную.

Официальный способ (если Netdata установлена скриптом с официального сайта, при установке из пакета в настоящее время не работает):

cd /etc/netdata
sudo ./edit-config python.d/web_log.conf

При установке из пакета в настоящее время edit-config не работает, делаем то же самое вручную:

# Нужно выполнить только один раз,
# при установке/настройке первого плагина python.d
sudo mkdir /etc/netdata/python.d

# Нужно выполнить только один раз,
# при первичной настройке плагина web_log
# Не стоит перезаписывать, если файл уже существует!
sudo cp -nv /etc/netdata/conf.d/python.d/web_log.conf \
  /etc/netdata/python.d/web_log.conf

sudo vim /etc/netdata/python.d/web_log.conf

Добавляем следующий блок (для ПРОДа):

# -------------------------------------------------------
# Alexey 2021-01-18: Manual config
# -------------------------------------------------------

nginx_log_otkrytka:
 name: 'nginx_otkrytka'
 path: '/srv/sites/otkrytka.appworks.ru/logs/access.log'

nginx_log_appindex:
 name: 'nginx_appindex'
 path: '/srv/sites/appindex.ru/logs/access.log'

nginx_log_apppress:
 name: 'nginx_apppress'
 path: '/srv/sites/press.appworks.ru/logs/access.log'

nginx_log_vozvratnalogov:
 name: 'nginx_vozvratnalogov'
 path: '/srv/sites/vozvratnalogov.online/logs/access.log'

— я добавил перед

# -------------------------------------------------------
# AUTO-DETECTION JOBS

но можно и в конец файла.

Перезапускаем Netdata, чтобы применить изменения:

sudo systemctl restart netdata.service

Дебаг плагина python.d/web_log:#

/usr/libexec/netdata/plugins.d/python.d.plugin \
  web_log trace debug