Мониторинг и статистика

Материал из Artem Aleksashkin's Wiki
Перейти к навигации Перейти к поиску

Munin

Munin - на мой взгляд, надежный базовый мониторинг хостов основанный на RRDTool, с помощью которого можно смотреть на состояние хоста сверху укрупненно. Дает ясную картину по базовым вещам - сколько ресурсов есть у машины в целом.

Он кастомизируется, но для узких вещей я бы ставил более точные и интерактивные решения вроде Graphana + Prometeus.

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

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

Точно должны быть под мониторингом:

  • Процессор
  • Память
  • Диск
  • Сеть
  • Хостовый Nginx
  • Все базы данных работающие на этом хосте
sudo apt install munin munin-node spawn-fcgi nginx
cat /etc/hostname
<HOSTNAME>
sudo nano /etc/munin/munin.conf
#[<HOSTNAME>]
#    address 127.0.0.1
#    use_node_name yes

Plugins

sudo nano /etc/munin/plugin-conf.d/munin-node 
sudo /etc/init.d/munin-node restart
cd /etc/munin/plugins
sudo ln -s /usr/share/munin/plugins/mysql_ mysql_mydb

NGINX

server {
    listen 172.17.0.1:64000;

    root /var/cache/munin/www;
    index index.html;

    access_log  /var/log/nginx/munin.access.log;
    error_log   /var/log/nginx/munin.error.log info;

    location / {
        alias /var/cache/munin/www/;
    }

    location /static/ {
        alias /etc/munin/static/;
    }

    location ^~ /cgi-bin/munin-cgi-graph/ {
        fastcgi_split_path_info ^(/cgi-bin/munin-cgi-graph)(.*);
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock;
        include fastcgi_params;
    }

    location /munin/ {
        fastcgi_split_path_info ^(/munin)(.*);
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass unix:/var/run/munin/fastcgi-html.sock;
        include fastcgi_params;
    }
}

Troubleshooting

sudo munin-check
# сбор данных
sudo -u munin /usr/share/munin/munin-update --debug --nofork
sudo -u munin /usr/share/munin/munin-limits --debug
sudo -u munin /usr/share/munin/munin-graph --debug --nofork
sudo -u munin /usr/share/munin/munin-html --debug --nofork
sudo -u munin munin-cron --debug --nofork

Нет HTML файлов

sudo munin-check

Исправляем ошибки

sudo -u munin /usr/share/munin/munin-html --debug --nofork

Смотрим ERROR и исправляем

Нет данных у плагина

sudo munin-check

Исправляем ошибки

sudo munin-run -d myplugin

Смотрим выхлоп - должно быть в виде показатель число.

Обычно проблема в том, что нет нужного расширения PERL или нет доступа. Проверяем доступ вручную и доставляем расширения PERL

Например, для nginx

sudo apt install libwww-perl

Например, для mysql

sudo apt install libdbi-perl libcache-cache-perl libdbd-mysql-perl

Project

  • NS серверы подвязаны к домену
host -t ns artem.aleksashkin.com
dig ns artem.aleksashkin.com
  • Резолвятся ли NS серверы с 2х серверов
dig ns1.aleksashkin.net
dig ns2.aleksashkin.net
  • Пингуются ли NS серверы с 2х серверов
ping ns1.aleksashkin.net
ping ns2.aleksashkin.net
  • Резолвят ли NS серверы домен корректно
dig ns1.aleksashkin.net artem.aleksashkin.com
dig ns2.aleksashkin.net artem.aleksashkin.com
  • Пинг домена с 2х адресов - время пинга должно быть адекватным
ping artem.aleksashkin.com
  • Проверка открытости портов 80 и 443 для ip адреса домена
nmap -p80,443 artem.aleksashkin.com
  • Проверка кода ответа для домена 200 или 301 для http
curl -I http://artem.aleksashkin.com
  • Проверка сертификата для 443 https - валидность / как скоро истечет
curl --insecure -vvI https://artem.aleksashkin.com
openssl s_client -connect artem.aleksashkin.com:443 </dev/null 2>/dev/null | openssl x509 -inform pem -text
  • Проверка кода ответа для 443 https = 200 не пустой
curl -I https://artem.aleksashkin.com
  • Проверка статусного endpoint - код ответа и парсинг статуса
curl https://artem.aleksashkin.com/api/status
  • Выборочная проверка endpoint's
curl https://artem.aleksashkin.com/api/status
curl https://artem.aleksashkin.com/api/version
...

Zabbix

Check that node is online

zabbix_get -s 172.17.0.1 -p 10050 -k agent.ping

Must be 1, if zabbix_get [18]: Check access restrictions in Zabbix agent configuration - change Server config

Agent

PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
DebugLevel=0
Server=172.16.0.0/12,192.168.0.0/16
ListenPort=10050
ListenIP=0.0.0.0
ServerActive=172.17.0.1:10051
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf


Grafana

By Service

Nginx

MySQL

BIND9

RabbitMQ

ElasticSearch

Memcached