NGINX: Amplify — SaaS мониторинг от NGINX

Автор: | 01/23/2018
 

NGINX Amplify — сервис для полноценного мониторинга NGINX и его рабочего окружения.

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

Суть работы весьма простая: регистрируемся на сайте сервиса, устанавливаем Amplify агент, получаем данные.

Бесплатен с определёнными ограничениями (5 агентов, 10 алертов и т.д.).

На момент написания был доступен для Amazon Linux, CentOS, Debian, Red Hat Linux и Ubuntu.

Домашняя страница — тут>>>.

Документация — тут>>>.

Начало работы — тут>>>.

Компоненты

  • NGINX Amplify Agent: агент на Python для установки на хостах, общается с бекендом по TLS/SSL, детальнее тут>>>
  • NGINX Amplify Web UI: веб-интерфейс с отображением полученных данных
  • NGINX Amplify Backend: корневой компоненты системы на стороне сервиса Amplify

Агент умеет собирать и передавать метрики о работе операционной системы, самого сервиса NGINX на хосте, метрики PHP-FMP (метрики MySQL в процессе добавления).

Регистрация

Для начала работы — прервым делом создаём аккаунт на странице регистрации проекта тут>>>:

На следующей странице сразу получаем все инструкции по установке и запуску:

Установка

Загружаем скрипт:

curl -L -O https://github.com/nginxinc/nginx-amplify-agent/raw/master/packages/install.sh

Передаём API ключ в переменных и запускаем скрипт:

API_KEY='967***e31' sh ./install.sh
--- This script will install the NGINX Amplify Agent package ---
1. Checking admin user ... root, ok.
2. Checking API key ... using 967***e31
3. Checking Python ... found python 2.7
4. Checking OS compatibility ... debian detected.
5. Adding public key ... done.
6. Adding repository ... added.
7. Updating repository ...
Ign http://cloudfront.debian.net jessie InRelease
Get:1 http://cloudfront.debian.net jessie-updates InRelease [145 kB]
...
OK, everything went just fine!
To start and stop the Amplify Agent type:
service amplify-agent { start | stop }
Amplify Agent log can be found here:
/var/log/amplify-agent/agent.log
After the agent is launched, it takes a couple of minutes for this system to appear
in the Amplify user interface.
PLEASE CHECK THE DOCUMENTATION HERE:
Public documentation for Amplify         https://github.com/nginxinc/nginx-amplify-doc        38 forks.        175 stars.        6 open issues.        Recent commits:                                                        Updated list of supported platforms, Andrei Belov                                                                Merge pull request #27 from pravdomil/patch-1set access_log off for nginx_status, GitHub                                                                Merge pull request #32 from megazoll/patch-1Debian Buster support, GitHub                                                                Removed link to external gist, Andrei Belov                                                                Note Debian Buster support, GitHub
Launching amplify-agent ...
All done.

Проверяем:

systemctl status amplify-agent
● amplify-agent.service - LSB: Stop/start nginx-amplify-agent
Loaded: loaded (/etc/init.d/amplify-agent)
Active: active (running) since Mon 2018-01-22 12:31:12 UTC; 1min 32s ago
Process: 2562 ExecStart=/etc/init.d/amplify-agent start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/amplify-agent.service
└─2614 amplify-agent
Jan 22 12:31:12 ip-172-31-43-63 systemd[1]: Started LSB: Stop/start nginx-amplify-agent.

Добавляем в автозагрузку:

systemctl enable amplify-agent
Synchronizing state for amplify-agent.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d amplify-agent defaults
Executing /usr/sbin/update-rc.d amplify-agent enable
  • настройки агента — /etc/amplify-agent/agent.conf
  • лог — /var/log/amplify-agent/agent.log

Используемые порты:

netstat -anp | grep amp
tcp       32      0 127.0.0.1:59718         127.0.0.1:443           CLOSE_WAIT  2614/amplify-agent
tcp        1      0 172.31.43.63:55972      169.254.169.254:80      CLOSE_WAIT  2614/amplify-agent
tcp        0      0 172.31.43.63:48593      52.36.73.123:443        ESTABLISHED 2614/amplify-agent

В дашборде уже появился сервис (слева):

Продолжаем настройку.

В каталоге /etc/nginx/conf.d создаём файл настроек stub_status.conf из примера:

server {
    listen 127.0.0.1:80;
    server_name 127.0.0.1;
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}

Проверяем, перечитываем файлы настроек:

nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Проверяем статус:

curl http://127.0.0.1/nginx_status
Active connections: 32
server accepts handled requests
9847 9847 54582
Reading: 0 Writing: 1 Waiting: 31

Последняя подсказка по настройкам:

Метрики

Сразу же доступны метрики операционной системы и ресурсов хоста:

И на главной:

Справа внизу доступна быстрая ссылка для настройки компонентов:

Но почему Metrics unavailable, если stub_status уже настроен?

Впрочем, после того как я сходил на обед — stub_status в Amplify уже отображался как «Confugired» (или просто помог service amplify-agent restart).

Добавим дополнительные метрики:

Документация — тут>>>.

В /etc/nginx/nginx.conf добавляем новый формат лога:

...
    log_format  main_ext  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$host" sn="$server_name" '
                      'rt=$request_time '
                      'ua="$upstream_addr" us="$upstream_status" '
                      'ut="$upstream_response_time" ul="$upstream_response_length" '
                      'cs=$upstream_cache_status' ;
...

Указываем логи — для error лога ставим в уровень warn, для access ставим тип main_ext, который добавили выше:

...
    access_log  /var/log/nginx/access.log  main_ext;
    error_log  /var/log/nginx/error.log warn;
...

Проверяем, перезагружаем конфиги:

nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

И по-прежнему ничего…

Проверяем доступ к каталогу /var/log/nginx от пользователя nginx:

sudo -H -u nginx bash -c 'ls -l /var/log/nginx'

Проверяем права:

ls -l /var/log/ | grep nginx
drwxr-xr-x 2 nginx       root   4096 Jan 22 12:31 amplify-agent
drwxr-x--- 3 www-data    adm    4096 Jan 22 14:41 nginx

Обновляем владельца каталога:

chown nginx /var/log/nginx/

Перезапускаем сервисы — проверяем:

systemctl restart amplify-agent
systemctl restart amplify-agent

Данные пошли:

Мониторинг PHP-FPM

Для мониторинг PHP-FMP — требуется опция pm.status_path, если её нет — добавляем в файл настроек пула, например /etc/php5/fpm/pool.d/rtfm.co.ua.conf:

...
pm.status_path = /status
...

Перезапускаем сервис:

service php5-fpm restart

Для проверки — устанавливаем пакет libfcgi-dev:

apt -y install libfcgi-dev

Проверяем:

vim -p SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/rtfm-php-fpm.sock
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Content-type: text/plain;charset=UTF-8
pool:                 rtfm.co.ua
process manager:      dynamic
start time:           22/Jan/2018:14:32:24 +0000
start since:          9
accepted conn:        7
listen queue:         0
max listen queue:     0
listen queue len:     0
idle processes:       2
active processes:     1
total processes:      3
max active processes: 3
max children reached: 0
slow requests:        0

Ждём минуту-две, проверяем вкладку PHP-FPM:

Analizer

Документация — тут>>>.

Пример анализа:

Добавление dashboard

И соберём всё интересующее в одном месте.

Создаём дашборд:

Добавляем графики (New graph справа):

Либо из готовых наборов — кнопка New set:

В результате получаем такую картинку:

Alerts

И пример добавления уведомления, если использование диска будет выше 90%:

Его срабатывание:

Вообще у Amplify много чего ещё интересного, те же теги — смотрите документацию.