Мониторинг. · 22 min read · Nov 30, 2025

Как установить и мониторить сервисы с помощью инструмента мониторинга Netdata на Rocky Linux 8

Netdata — это система мониторинга с открытым исходным кодом для операционных систем на базе Linux. Она предоставляет мониторинг производительности в реальном времени с помощью красивых и детализированных панелей управления. Она предлагает сотни инструментов для мониторинга серверов, использования CPU, памяти, системных процессов, использования диска, сетей IPv4 и IPv6, системного брандмауэра и приложений, таких как Nginx, MySQL, MongoDB, Redis, ElasticSearch, PostgreSQL, PHP-FPM и т. д. Она интегрируется с другими инструментами мониторинга, такими как Prometheus, Graphite, Kafka, Grafana и другими.

В этом учебном пособии вы научитесь устанавливать и мониторить различные сервисы с помощью инструмента Netdata на сервере Rocky Linux 8. Мы будем использовать Netdata для отслеживания метрик стека LEMP и движка Docker.

Предварительные требования

  • Сервер с установленным Rocky Linux 8.
  • Пользователь, не являющийся root, с правами sudo.
  • Полное доменное имя (FQDN), такое как netdata.example.com, указывающее на ваш сервер.
  • Учетная запись и рабочее пространство Slack для получения уведомлений.
  • Учетная запись SMTP с почтовым сервисом, таким как Amazon SES или Mailgun.
  • Отключите SELinux.

Шаг 1 - Настройка брандмауэра

Первый шаг — настроить брандмауэр. Rocky Linux использует брандмауэр Firewalld. Проверьте статус брандмауэра.

$ sudo firewall-cmd --state
running

Брандмауэр работает с различными зонами, и публичная зона является той, которую мы будем использовать по умолчанию. Перечислите все сервисы и порты, активные на брандмауэре.

$ sudo firewall-cmd --permanent --list-services

Он должен показать следующий вывод.

cockpit dhcpv6-client ssh

Разрешите порты HTTP и HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Проверьте статус брандмауэра еще раз.

$ sudo firewall-cmd --permanent --list-services

Вы должны увидеть аналогичный вывод.

cockpit dhcpv6-client http https ssh

Перезагрузите брандмауэр, чтобы применить изменения.

$ sudo firewall-cmd --reload

Шаг 2 - Установка NetData

Netdata поставляется со скриптом установки, который может работать на любой дистрибутиве Linux. Выполните следующую команду, чтобы загрузить и запустить скрипт установки.

$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Вас попросят ввести ваш пароль sudo для включения прав sudo. Введите Y, чтобы подтвердить добавление репозитория Netdata и его установку на ваш сервер.

Установщик Netdata автоматически включает и запускает сервис. Проверьте статус сервиса.

$ sudo systemctl status netdata
? netdata.service - Мониторинг производительности в реальном времени
   Loaded: loaded (/usr/lib/systemd/system/netdata.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-04-11 12:09:12 UTC; 13s ago
 Main PID: 19443 (netdata)
    Tasks: 32 (limit: 11412)
   Memory: 52.0M
   CGroup: /system.slice/netdata.service
           ??19443 /usr/sbin/netdata -P /var/run/netdata/netdata.pid -D
           ??19448 /usr/sbin/netdata --special-spawn-server
           ??19937 /usr/libexec/netdata/plugins.d/apps.plugin 1
           ??19944 /usr/libexec/netdata/plugins.d/go.d.plugin 1

Apr 11 12:09:12 netdata systemd[1]: Started Мониторинг производительности в реальном времени.
.......

Если ваш сервис не запущен или не включен, вы можете сделать это с помощью следующей команды.

$ sudo systemctl enable netdata --now

Выполните следующую команду, чтобы проверить открытые порты и процессы, использующие их.

$ sudo ss -plnt

Вы должны получить аналогичный вывод. Netdata использует порт 19999 для своей панели управления, что видно в приведенном ниже выводе. Netdata использует порт 8125 для получения статистики от других приложений.

State            Recv-Q           Send-Q                     Local Address:Port                      Peer Address:Port           Process
LISTEN           0                128                            127.0.0.1:8125                           0.0.0.0:*               users:(("netdata",pid=22496,fd=29))
LISTEN           0                128                              0.0.0.0:19999                          0.0.0.0:*               users:(("netdata",pid=22496,fd=6))
......
LISTEN           0                128                                [::1]:8125                              [::]:*               users:(("netdata",pid=22496,fd=28))
LISTEN           0                128                                 [::]:19999                             [::]:*               users:(("netdata",pid=22496,fd=7))

Шаг 3 - Установка SSL

Чтобы установить SSL-сертификат с помощью Let’s Encrypt, нам нужно установить инструмент Certbot.

Во-первых, вам нужно загрузить и установить репозиторий EPEL.

$ sudo dnf install epel-release

Выполните следующие команды для установки Certbot.

$ sudo dnf install certbot

Сгенерируйте SSL-сертификат.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d netdata.example.com

Вышеуказанная команда загрузит сертификат в директорию /etc/letsencrypt/live/netdata.example.com на вашем сервере.

Сгенерируйте сертификат группы Диффи-Хеллмана.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Создайте корневую директорию для проверки для автоматического обновления Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Создайте задачу Cron для обновления SSL. Она будет запускаться каждый день, чтобы проверить сертификат и обновить его при необходимости. Для этого сначала создайте файл /etc/cron.daily/certbot-renew и откройте его для редактирования.

$ sudo nano /etc/cron.daily/certbot-renew

Вставьте следующий код.

#!/bin/sh
certbot renew --cert-name netdata.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Измените разрешения на файле задачи, чтобы сделать его исполняемым.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Шаг 4 - Установка и настройка Nginx

Мы будем устанавливать последнюю версию Nginx. Создайте и откройте файл /etc/yum.repos.d/nginx.repo для редактирования.

$ sudo nano /etc/yum.repos.d/nginx.repo

Вставьте в него следующие строки.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Установите Nginx и инструменты HTTPD.

$ sudo dnf install nginx httpd-tools

Проверьте установку.

$ nginx -v
nginx version: nginx/1.20.2

Включите и запустите сервис Nginx.

$ sudo systemctl enable nginx --now

Создайте и откройте файл /etc/nginx/conf.d/netdata.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/netdata.conf

Вставьте в него следующий код.

# Определите upstream netdata
upstream netdata {
    server 127.0.0.1:19999;
    keepalive 64;
}

# Перенаправьте все незащищенные на защищенные
server {
    listen 80;
    listen [::]:80;
    server_name netdata.example.com;
    return 301 https://netdata.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name netdata.example.com;

    ssl_certificate     /etc/letsencrypt/live/netdata.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/netdata.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/netdata.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/netdata.example.com.access.log main;
    error_log  /var/log/nginx/netdata.example.com.error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
     proxy_pass http://netdata;
     proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
        auth_basic "NetData Private Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

После завершения сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Выполните следующую команду, чтобы сгенерировать файл паролей для включения HTTP-аутентификации.

$ sudo htpasswd -c /etc/nginx/.htpasswd netadmin
New password: 
Re-type new password: 
Adding password for user netadmin

Проверьте синтаксис конфигурационного файла Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите сервис Nginx, чтобы включить новую конфигурацию.

$ sudo systemctl restart nginx

Шаг 5 - Доступ и использование панели управления Netdata

Вы должны иметь возможность получить доступ к Netdata по URL https://netdata.example.com. В первый раз, когда вы получите доступ к нему, вам будет предложено ввести ваши данные для HTTP-аутентификации.

HTTP-аутентификация Netdata

Вы получите следующую панель управления.

Первая панель управления Netdata

Установите флажок Запомнить мой выбор и нажмите кнопку Позже, остаться на панели управления агента, чтобы закрыть всплывающее окно.

Вы можете приостанавливать, останавливать и запускать мониторинг в любое время, используя кнопку Воспроизведение на панели управления.

Кнопка воспроизведения/паузы Netdata

Вы можете получить доступ к различным панелям управления, щелкнув параметры в правом боковом меню. Нажмите кнопку UTC и выберите правильный часовой пояс, чтобы изменить его.

Изменение часового пояса Netdata

Шаг 6 - Настройка NetData

Netdata хранит свою основную конфигурацию в файле /etc/netdata/netdata.conf. Вы можете просмотреть эти настройки, посетив URL https://netdata.example.com/netdata.conf в вашем браузере.

Файл конфигурации Netdata в браузере

Файл разделен на различные секции, такие как [global], [web], [registry] и другие. Стандартная конфигурация достаточно, чтобы начать. Netdata собирает данные с помощью двух типов плагинов:

  1. внутренние плагины написаны на языке C и работают как потоки внутри демона netdata.
  2. внешние плагины написаны на различных языках, включая Python, Go и т. д., и запускаются как долгоживущие независимые процессы демоном netdata. Они общаются с демоном Netdata с помощью pipes.

Настройка использования памяти NetData

Использование RAM NetData определяется на основе времени, в течение которого вы хотите хранить записанные данные графиков, прежде чем они будут потеряны.

  • 3600 секунд или 1 час хранения данных графиков использует 15 МБ RAM.
  • 7200 секунд или 2 часа хранения данных графиков использует 30 МБ RAM.
  • 14400 секунд или 4 часа хранения данных графиков использует 60 МБ RAM.

Каждый раз, когда вы удваиваете время хранения данных графиков, требования к RAM также удваиваются. Эти требования к RAM основаны на количестве графиков, используемых стандартной панелью управления. Добавление большего количества графиков и приложений изменит эти оценки.

Откройте файл конфигурации Netdata.

$ sudo nano /etc/netdata/netdata.conf

Введите строку history = 14400 в секции [global].

[global]
..
        history = 14400
..

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Отключение телеметрии

По умолчанию Netdata собирает анонимную информацию об использовании с помощью платформы аналитики продуктов, Posthog. Каждый раз, когда демон Netdata запускается или останавливается, Netdata использует скрипт анонимной статистики для сбора следующей системной информации и отправки ее себе.

  • Версия Netdata
  • Название ОС, версия, id, id_like
  • Название ядра, версия, архитектура
  • Технология виртуализации
  • Технология контейнеризации
  • Дополнительная информация о сбоях клиента Netdata.

К счастью, вы можете отказаться от этого. Создайте пустой файл с именем .opt-out-from-anonymous-statistics в директории Netdata.

$ sudo touch /etc/netdata/.opt-out-from-anonymous-statistics

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

$ sudo systemctl restart netdata

Долгосрочное хранение

Netdata использует RAM и диск вашей системы для хранения исторических данных по умолчанию. Процесс Netdata по умолчанию собирает около 2000 метрик в секунду, что означает, что стандартная конфигурация будет хранить около двух дней метрик в RAM и на диске.

Чтобы хранить больше метрик, у вас есть следующие два варианта:

  1. Настроить Netdata для использования большего объема RAM и дискового пространства
  2. Архивировать метрики в внешнюю базу данных

Мы обсудим только первый вариант в этом учебном пособии. Для второго варианта вам следует обратиться к официальной документации Netdata.

Настройка Netdata для использования большего объема RAM и дискового пространства

Откройте файл /etc/netdata/netdata.conf для редактирования.

$ sudo nano /etc/netdata/netdata.conf

Вставьте следующие строки в секцию [global].

[global]
...
    memory mode = dbengine
    page cache size = 32
    dbengine disk space = 256

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Размер кэша страниц определяет объем используемой RAM, а dbengine disk space определяет использование диска. По умолчанию Netdata использует 32 МБ RAM и 256 МБ дискового пространства. Вы можете раскомментировать эти значения и изменить одно из двух значений по своему усмотрению.

Вы можете использовать калькулятор метрик хранения Netdata, чтобы определить, сколько RAM и дискового пространства вам нужно.

Уменьшение частоты сбора

Вы можете оптимизировать производительность Netdata, увеличив время между сбором метрик. По умолчанию Netdata собирает метрики каждую секунду.

Чтобы изменить это, откройте файл конфигурации Netdata для редактирования.

$ sudo nano /etc/netdata/netdata.conf

Введите следующую строку в секции [global]. Это увеличивает частоту до 5 секунд.

[global]
...
    update every = 5

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Шаг 7 - Настройка уведомлений Slack

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

Посетите страницу API Slack и нажмите кнопку Создать приложение, чтобы начать создание приложения.

Приложения Slack API

Нажмите на ссылку С нуля, чтобы создать приложение.

Всплывающее окно создания приложения Slack

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

Всплывающее окно имени приложения Slack

Откройте страницу Входящие вебхуки, выбрав опцию в меню Функции в левом боковом меню, а затем активируйте вебхук.

Входящие вебхуки приложений Slack

Нажмите кнопку Добавить новый вебхук в рабочее пространство внизу страницы и выберите ваше рабочее пространство и целевой канал для уведомлений.

Добавить приложение Netdata в рабочее пространство

Нажмите кнопку Разрешить, чтобы продолжить. Вернитесь на страницу Входящие вебхуки и скопируйте URL вебхука.

URL вебхука Slack

Вернитесь в терминал и перейдите в директорию /etc/netdata.

$ cd /etc/netdata

Netdata предоставляет скрипт edit-config для редактирования и создания файлов конфигурации Netdata. Выполните следующий файл, чтобы создать и открыть файл health_alarm_notify.conf с помощью вашего редактора по умолчанию.

$ sudo ./edit-config health_alarm_notify.conf

Прокрутите вниз до следующего раздела.

# Включить уведомление slack
SEND_SLACK="YES"

# Выберите вебхук slack
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxxxxxx"

# Канал по умолчанию для уведомлений
DEFAULT_RECIPIENT_SLACK="notifications"

Убедитесь, что переменная SEND_SLACK установлена в yes. Вставьте скопированный URL вебхука в переменную SLACK_WEBHOOK_URL. Введите имя вашего канала для переменной DEFAULT_RECIPIENT_SLACK.

Если ваш редактор — Vim, нажмите клавишу Escape, чтобы выйти из редактирования, введите :x и нажмите клавишу Enter, чтобы сохранить файл и выйти из редактора.

Если ваш редактор — Nano, сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

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

$ sudo systemctl restart netdata

Настройка уведомлений по электронной почте

Netdata использует sendmail по умолчанию для отправки уведомлений по электронной почте, но управление почтовым сервером — это не простая задача. Netdata не поддерживает SMTP, но вы можете установить пакет под названием msmtp клиент. Он позволяет вам отправлять почту на SMTP-сервер.

Установите msmtp.

$ sudo dnf install msmtp

Создайте и откройте файл конфигурации для msmtp.

$ sudo nano /etc/msmtprc

Вставьте в него следующий код.

# Установите значения по умолчанию для всех последующих учетных записей.
defaults

# Используйте порт отправки почты 587 вместо SMTP-порта 25.
port 587

# Всегда используйте TLS.
tls on

# SMTP-сервер вашего провайдера
account ses
host email-smtp..amazonaws.com
from [email protected]
auth on
user 
password 

# Установите учетную запись по умолчанию на isp
account default: ses

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Откройте файл /etc/netdata/health_alarm_notify.conf для редактирования.

$ sudo nano /etc/netdata/health_alarm_notify.conf

Прокрутите вниз до следующего раздела и введите путь к msmtp.

# внешние команды

# Полный путь к команде sendmail.
# Если пусто, будет выполнен поиск по системному $PATH.
# Если не найдено, уведомления по электронной почте будут отключены (тихо).
sendmail="/usr/bin/msmtp"

Найдите следующий раздел и введите данные отправителя и получателя и убедитесь, что отправка электронной почты включена.

# глобальные параметры уведомления по электронной почте

# несколько получателей можно указать так:
#              "[email protected] [email protected] ..."

# адрес электронной почты, отправляющий уведомления по электронной почте
# по умолчанию это системный пользователь, от имени которого работает netdata (обычно: netdata)
# Поддерживаются следующие форматы:
# EMAIL_SENDER="user@domain"
# EMAIL_SENDER="User Name "
# EMAIL_SENDER="'User Name' "
# EMAIL_SENDER="\"User Name\" "
EMAIL_SENDER="Server Admin <[email protected]>"

# включить/отключить отправку электронных писем
SEND_EMAIL="YES"

# если роль получателя не настроена, электронное письмо будет отправлено на:
DEFAULT_RECIPIENT_EMAIL="[email protected]"
# чтобы получать только критические тревоги, установите его в "root|critical"

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Шаг 8 - Тестирование каналов уведомлений

Давайте протестируем, работают ли уведомления Slack.

Войдите как системный пользователь netdata, созданный во время установки.

$ sudo su -s /bin/bash netdata

Запустите скрипт уведомления об аварии, чтобы отправить тестовое уведомление.

$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test

Выйдите из пользователя.

$ exit.

Откройте ваше приложение Slack, и вы должны получить следующие уведомления.

Тестовые уведомления Slack Netdata

Вы также получите три электронных письма о тестовых предупреждениях.

Тестовые уведомления по электронной почте Netdata

Шаг 9 - Настройка мониторинга системы

Теперь, когда мы настроили и протестировали уведомления, давайте настроим и протестируем уведомления для системы, такие как использование CPU.

Выполните следующие команды, чтобы создать и открыть файл конфигурации CPU.

$ cd /etc/netdata
$ sudo ./edit-config health.d/cpu.conf

Измените значения параметров warn и crit в разделе 10min_cpu_usage следующим образом.

warn: $this > (($status >= $WARNING)  ? (60) : (70))
crit: $this > (($status == $CRITICAL) ? (75) : (85))

Сохраните файл и выйдите из редактора.

Вышеуказанная настройка отправит предупреждение, если использование CPU будет находиться между 60 и 70%, и критическое предупреждение, когда использование CPU будет находиться между 75 и 85%.

Перезапустите сервис Netdata.

$ sudo systemctl restart netdata

Давайте протестируем настройку, установив приложение Stress.

$ sudo dnf install stress

Выполните следующую команду, чтобы увеличить использование CPU вашего сервера.

$ stress --cpu 2

Оставьте команду запущенной на 5-10 минут, и вы получите сообщения о высоком использовании CPU. Как только вы получите эти сообщения, вернитесь в терминал и выйдите из команды, нажав Ctrl + Z.

После остановки сервиса вы получите уведомление о восстановлении CPU в Slack.

Уведомления о использовании CPU в Slack

Шаг 10 - Настройка мониторинга Nginx

Одним из наиболее часто мониторируемых приложений с помощью Netdata являются серверы и пакеты SQL. Давайте мониторить сервер Nginx с помощью Netdata.

Чтобы включить мониторинг сервера Nginx, нам нужно использовать ngx_http_stub_status_module. Обычно он поставляется предустановленным с Nginx. Вы можете проверить, присутствует ли модуль.

$ nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module

Если вы не получите ответа, это означает, что ваша установка Nginx не поддерживает эту функцию. В этом случае вам нужно будет скомпилировать Nginx.

Откройте файл конфигурации по умолчанию Nginx /etc/nginx/conf.d/default.conf для редактирования. Местоположение файла отличается, потому что мы установили Nginx из его официального репозитория. Если вы устанавливаете Nginx из репозитория ОС, то местоположение файла будет /etc/nginx/nginx.conf.

$ sudo nano /etc/nginx/conf.d/default.conf

Введите следующий код внутри блока сервера перед последней закрывающей фигурной скобкой.

# Включить модуль stub_status
location /stub_status {
    stub_status;
    allow 127.0.0.1;        #разрешить только запросы с localhost
    deny all;               #отказать всем другим хостам
}

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Проверьте конфигурацию Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите сервер Nginx.

$ sudo systemctl restart nginx

Перезапустите сервис Netdata.

$ sudo systemctl restart netdata

Вы должны увидеть детали соединения Nginx на вашей панели управления Netdata.

Детали соединения Nginx Netdata

Мониторинг логов Nginx

Netdata также может мониторить журналы доступа Nginx. Для этого перейдите в директорию Netdata.

$ cd /etc/netdata

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

$ sudo ./edit-config python.d/web_log.conf

Прокрутите вниз до конца файла и найдите следующий раздел.

# -------------------------------------------
# nginx log on various distros

# debian, arch
nginx_log:
  name: 'nginx'
  path: '/var/log/nginx/access.log'

# gentoo
nginx_log2:
  name: 'nginx_site'
  path: '/var/log/nginx/localhost.access_log'

Измените путь для мониторинга соответствующих файлов журналов. Вы можете добавить столько разделов, сколько необходимо для мониторинга множества хостов и их файлов журналов доступа. Наш файл конфигурации выглядит следующим образом.

# -------------------------------------------
# nginx log on various distros

# debian, arch
nginx_log:
  name: 'nginx'
  path: '/var/log/nginx/access.log'

nginx_log2:
  name: 'nginx_site1'
  path: '/var/log/nginx/site1.access_log'

nginx_log3:
  name: 'nginx_site2'
  path: '/var/log/nginx/site2.access_log'

nginx_log4:
  name: 'nginx_site3'
  path: '/var/log/nginx/site3.access_log'

Сохраните и выйдите из редактора.

Чтобы получить доступ к файлам журналов, Netdata нужны разрешения для доступа к директории. По умолчанию системная группа adm имеет разрешение на доступ к файлам журналов. Чтобы предоставить Netdata доступ, нам нужно добавить пользователя netdata в группу adm.

$ sudo usermod -aG adm netdata

Перезапустите Nginx и сервис Netdata.

$ sudo systemctl restart nginx netdata

Перезагрузите панель управления Netdata, чтобы просмотреть данные вашего файла журнала.

Панель управления доступа Netdata

Шаг 11 - Настройка мониторинга MySQL/MariaDB

Мы установим MariaDB для нашего учебного пособия. Шаги остаются теми же, если вы используете сервер MySQL.

Добавьте репозиторий для MariaDB 10.6.

$ sudo nano /etc/yum.repos.d/MariaDB.repo

Вставьте в него следующий код.

# Список репозиториев MariaDB 10.6 CentOS - создан 2022-04-12 11:12 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://download.nus.edu.sg/mirror/mariadb/yum/10.6/centos8-amd64
module_hotfixes=1
gpgkey=https://download.nus.edu.sg/mirror/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Установите MariaDB.

$ sudo dnf install MariaDB-server

Включите сервер MariaDB.

$ sudo systemctl enable mariadb

Запустите скрипт безопасной установки MySQL. Имя файла отличается в случае MariaDB.

$ sudo mariadb-secure-installation
....
Enter current password for root (enter for none): (Нажмите Enter)
....
Switch to unix_socket authentication [Y/n] Y (Введите Y и нажмите Enter)
....
Change the root password? [Y/n] Y (Введите Y и нажмите Enter)
New password: 
Re-enter new password: 
Password updated successfully!
....
Remove anonymous users? [Y/n] Y (Введите Y и нажмите Enter)
....
Disallow root login remotely? [Y/n] Y (Введите Y и нажмите Enter)
....
Remove test database and access to it? [Y/n] Y (Введите Y и нажмите Enter)
....
Reload privilege tables now? [Y/n] Y (Введите Y и нажмите Enter)
....
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Откройте файл /etc/my.cnf.d/server.cnf для редактирования.

$ sudo nano /etc/my.cnf.d/server.cnf

Найдите секцию [mariadb] в файле и вставьте следующую строку, как показано ниже, чтобы включить плагин Userstats. Эта настройка работает только на MariaDB, а не на сервере MySQL.

[mariadb]
userstat = 1

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Запустите сервер MariaDB.

$ sudo systemctl start mariadb

Перезапустите сервис Netdata.

$ sudo systemctl restart netdata

Панель управления MariaDB/MySQL должна начать появляться на панели управления Netdata.

Панель управления MySQL/MariaDB NetData

Шаг 12 - Настройка мониторинга PHP-FPM

Вы можете мониторить один или несколько экземпляров PHP-FPM с помощью Netdata. Для нашего учебного пособия мы установим PHP 8.0, а затем включим его мониторинг.

Мы установим PHP с помощью репозитория Remi. Мы уже установили репозиторий EPEL на шаге 3. Установите репозиторий Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Проверьте доступные потоки PHP.

$ dnf module list php -y
Last metadata expiration check: 0:00:12 ago on Fri 03 Dec 2021 09:39:32 AM UTC.
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Версия по умолчанию — 7.2. Включите репозиторий PHP 8.0 Remi.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

Затем установите PHP и его расширения, необходимые для Firefly III. Пакет php содержит несколько зависимостей, которые требуются Firefly III, поэтому убедитесь, что вы их включили.

$ sudo dnf install php php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-intl php-bcmath php-gd php-ldap php-cli

Проверьте установку.

$ php --version
PHP 8.0.16 (cli) (built: Feb 15 2022 21:34:32) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.16, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.16, Copyright (c), by Zend Technologies

Настройка PHP

Откройте файл /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Нам нужно установить Unix-пользователя/группу процессов PHP на nginx. Найдите строки user=www-data и group=www-data в файле и измените их на nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Прокрутите вниз по файлу, чтобы найти опцию ;pm.status_path = /status. Уберите комментарий с этой строки, удалив точку с запятой перед ней, как показано ниже.

; Note: There is a real-time FPM status monitoring sample web page available
;       It's available in: @EXPANDED_DATADIR@/fpm/status.html
;
; Note: The value must start with a leading slash (/). The value can be
;       anything, but it may not be a good idea to use the .php extension or it
;       may conflict with a real PHP file.
; Default Value: not set
pm.status_path = /status

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Включите и запустите сервис PHP.

$ sudo systemctl enable php-fpm --now

Добавление настроек PHP в Nginx

Откройте файл конфигурации по умолчанию Nginx /etc/nginx/conf.d/default.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/default.conf

Введите следующий код внутри блока сервера перед последней закрывающей фигурной скобкой.

# определите мониторинг PHP-FPM
location ~ ^/(status|ping)$ {
    allow 127.0.0.1;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_pass   unix:/run/php-fpm/.sock; # Зависит от версии PHP и дистрибутива ОС
}

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Проверьте конфигурацию Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите сервер Nginx.

$ sudo systemctl restart nginx

Перезапустите сервис Netdata.

$ sudo systemctl restart netdata

Перезагрузите панель управления Netdata, и вы должны увидеть статистику PHP-FPM.

Статистика PHP-FPM NetData

Шаг 13 - Настройка мониторинга движка Docker и контейнеров

Netdata может мониторить как движок Docker, так и контейнеры Docker. Он также может мониторить приложения, работающие внутри этих контейнеров, но мы не будем охватывать это в этом учебном пособии.

Сначала давайте установим Docker.

$ sudo dnf install yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli containerd.io

Включите и запустите сервис Docker.

$ sudo systemctl enable docker --now

Чтобы мониторить движок Docker, вам нужно включить функцию метрик Docker.

Создайте и откройте файл /etc/docker/daemon.json для редактирования.

$ sudo nano /etc/docker/daemon.json

Вставьте в него следующий код.

{
  "metrics-addr" : "127.0.0.1:9323",
  "experimental" : true
}

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Перезапустите сервисы Netdata и Docker.

$ sudo systemctl restart docker netdata

Загрузите панель управления Netdata снова, и вы сможете увидеть статистику Docker.

Статистика контейнера Docker NetData

Вы увидите еще одну запись с названием Prometheus Metrics на вашей панели управления, потому что опция метрик была создана для панели управления Prometheus.

Статистика контейнера Docker Prometheus NetData

Следующий шаг — мониторинг контейнера Docker. Netdata использует контрольные группы, называемые cgroups, для мониторинга контейнеров Docker. Контрольные группы — это функция Linux, которая ограничивает и отслеживает использование ресурсов коллекцией процессов, в данном случае контейнеров. Если у вас есть работающие контейнеры Docker, когда вы устанавливаете Netdata, они автоматически отслеживаются. Однако если вы запускаете контейнер после установки Netdata, вам нужно будет перезапустить его.

Запустите тестовый контейнер.

$ docker container run -d nginx

Проверьте статус контейнера.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
938b2cf30927   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    pensive_lovelace

Имя контейнера — tender_murdock, как показано. Поскольку контейнер был запущен после установки Netdata, перезапустите сервис.

$ sudo systemctl restart netdata

Загрузите панель управления, и вы должны увидеть статистику контейнера.

Индивидуальная статистика контейнера Docker NetData

Заключение

На этом наше учебное пособие по установке и использованию системы мониторинга Netdata для мониторинга различных приложений, таких как Nginx, MySQL, PHP-FPM и Docker на сервере Rocky Linux, завершено. Если у вас есть какие-либо вопросы, оставьте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.