Netdata - удобная система мониторинга с упором на realtime с поддержкой уведомления о событиях, телеграмов, uptime|io|mem badges, и прочих блекджеков.

Установка

Установка описана в их официальном мануале, но дабы не рвать контекст, приведу её тут.

Запускаем их kickstart-скрипт. Он установит нужные зависимости и склонирует репу.

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

Теперь идём и ставим из склонированной репы сам netdata.

cd /usr/src/netdata.git/
./netdata-updater.sh

На debian stretch|jessie встает само и без проблем. Установщик создаст нам сразу стартер systemd - netdata.service. Netdata теперь живёт на 19999 порту. Можно сразу проверить валидность установки. Но вырубим его пока, дабы не светил во внешний мир своими красотами.

(systemd конфиг живёт в /etc/systemd/system/netdata.service)

systemctl stop netdata.service

Настройка

План по настройке прост:

  • проксировать всё это дело через nginx с поддержкой nginx stubs + basic http auth;
  • включить отправку событий в telegram;
  • создать юзера для postgresql, ибо оно не мониторится у меня из коробки, а всякие там trust я не люблю - trustno1.

Настраиваем nginx

Создадим общий конфиг netdata, который будем инклудить. Бросим его куда-нибудь в /etc/nginx/snippets/netdata.conf:

access_log off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Connection "keep-alive";

proxy_store off;
proxy_redirect off;
proxy_read_timeout 1500;
proxy_connect_timeout 1500;
proxy_http_version 1.1;
proxy_pass_request_headers on;

gzip on;
gzip_proxied any;
gzip_types *;

Конфиг я выделил в сниппет по причине того, что github не поддерживает встраивание ссылок с авторизацией, т.е. ![](https://user:password@example.com/1.svg) работать там не будет. А мне хочется открывая свою приватную репу на гитхабе видеть сразу аптаймы, память и т.д. Поэтому придётся частично пожертвовать безопасностью и сделать плашки world-readable.

Создадим файлик с паролями, как предлагают в мануале:

printf "\nadmin:$(openssl passwd -crypt 'azaza')" >> /etc/nginx/passwords

Поднимем upstream:

upstream netdata {
    server 127.0.0.1:19999;
    keepalive 64;
}

Допишем в желаемый nginx server что-то типа:

location /__mon__/ {
  auth_basic "Protected";
  auth_basic_user_file passwords;
  include snippets/netdata.conf;
  proxy_pass http://netdata/;
}

location /__mon__/api/v1/badge.svg {
  auth_basic off;
  include snippets/netdata.conf;
  proxy_pass http://netdata/api/v1/badge.svg?$query_string;
}

Верхний location прикрывает безобразие паролем, нижний разрешает подсматривать.

Теперь включим stubs:

location = /__stub_status__ {
  stub_status on;
  access_log off;
  allow 127.0.0.1;
  deny all;
}
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Теперь запретим web-морде netdata слушать кого попало. В секции [web] конфига /etc/netdata/netdata.conf bind to назначим 127.0.0.1.

Запускаем:

systemctl start netdata.service

Теперь по адресу example.com/__mon__/ должен открываться web ui netdata.

Настраиваем web_log для virtualhost'ов

Для каждого виртуалхоста со своим nginx access log пишем в конфиг /etc/netdata/python.d/web_log.conf нечто типа:

login_log:
  name: 'SSO_login'
  path: '/var/log/login.example.com/nginx-access.log'

Рестартим netdata:

systemctl restart netdata.service

Подключаем оповещения через telegram

  1. У @BotFather создаём бота: /newbot. Сохраняем токен.
  2. Узнаём id каналов куда наш бот будет слать оповещения. Для этого приглашаем в свой групповой (или локальный) чат бота @myidbot.
  3. Для себя вызываем /getid, для группового чата вызываем /getgroupid. Группа начинается со знака -.

Дальше в /etc/netdata/health_alarm_notify.conf находим и меняем строки:

SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="XXXXXXXXX:XXXXXXXXXXXXXXAAAAAAAXXXXXXXXXXXXXX"
DEFAULT_RECIPIENT_TELEGRAM="-000000000 111111111|critical"

Все alarm'ы бот будет высылать в канал, а все critical - в личку. Проверяем:

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

Добавляем в postgres пользователя netdata

CREATE USER netdata_ro WITH ENCRYPTED PASSWORD 'lolshto';
GRANT CONNECT ON DATABASE postgres TO netdata_ro;
GRANT USAGE ON SCHEMA public TO netdata_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO netdata_ro;

В /etc/netdata/python.d/postgres.conf пишем: 

tcp:
    name     : 'local'
    database : 'postgres'
    user     : 'netdata_ro'
    password : 'lolshto'
    host     : 'localhost'
    port     : 5432

Все остальные секции с настройками подключения можно спокойно закомментировать.

night-crawler
Просмотров: 60
blog comments powered by Disqus