Инди-разработчик изучает мониторинг чужого проекта (кадр из «Кремниевой долины»)
Инди-разработчик изучает мониторинг чужого проекта (кадр из «Кремниевой долины»)

Привет, я Паша из Ozon. В рабочее время занимаюсь тестированием поиска, а по вечерам надеваю маску инди-разработчика. И моя самая частая задача — написать скрипт → залить его на сервер → периодически мониторить, что сервер доступен. Эта статья как раз и будет строиться вокруг последнего пункта.

Вы наверняка в курсе, что существуют Grafana, Prometheus, Kibana, LogDNA и другие инструменты для мониторинга, визуализации и анализа данных. C первыми двумя я вплотную познакомился в Ozon, а про Kibana слышал когда-то давно и только в паре со словом «логи». Чтобы графики в Grafana рисовать — придется штат аналитиков нанять (ба-дум-тсс). Для пет-проекта это перебор, нужно что-то сильно проще (с точки зрения стоимости, простоты настройки и удобства). Ниже расскажу, какие готовые инструменты для мониторинга небольших проектов я нашёл в пучинах интернета, а также оставлю комментарии и рекомендации по использованию.

Disclaimer: все проекты рассматриваются с точки зрения маленького сайта/скрипта/бота/приложения, поэтому видение автора может сильно отличаться от видения enterprise-разработчиков.

Netdata

Из заголовка сайта проекта многое сразу понятно: Monitor everything in real time. For free. Про него уже есть статья на Хабре, не вижу смысла описывать детальнее. Очень просто устанавливается. Одна команда «скачать», вторая «запустить» — и графики уже можно смотреть.

Дашборд Netdata 
Дашборд Netdata 

С помощью Netdata можно отслеживать огромнейшее количество показателей: статистику использования процессора, потребления памяти, операций ввода-вывода и прочего. Netdata разработана для администраторов, DevOps и разработчиков. Так что если сложно — есть раздел с документацией, рекомендую на старте, помогает внести ясность по базовым метрикам и настройке алертов.

Плюсы

  • легко устанавливается;

  • есть алерты;

  • огромное количество метрик;

  • «для DevOps».

Минусы

  • масштабирование (на кластер поставить нельзя, только отдельно на каждый сервер);

  • нужно следить за логами (сколько их и где они);

  • конфигурация через SSH;

  • «для DevOps».

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

«Для DevOps» и в плюсах, и в минусах — зависит от того, кто читает. Я не смог настроить алерты, поэтому использую как дашборд: смотрю средние значения по нагрузке на CPU.

Monitoror

Предыдущий инструмент, Netdata, я нашел случайно по запросу "dashboard". Но это не совсем то, чего я хотел. Я бы хотел красивые плитки с простой и гибкой настройкой. Первое, что лежит на поверхности — Smashing. Но с ним у меня не задалось. Написан на Ruby, и я его даже запустить не смог, не то что настроить. А посмотрев обзоры и готовые доски — еще и не захотел.

Как оказалось, я всё время искал то, что сделали разработчики Monitoror. Потрясающе гибкая (во всех смыслах) доска с поддержкой CI/CD провайдеров. Просто взгляните на скриншоты:

Источник: Google
Источник: Google
Рабочий дашборд Monitoror
Рабочий дашборд Monitoror

Устанавливается легко, через бинарник. Настраивается через JSON файл. Выглядит он примерно так:

{
    "version": "2.0",
    "columns": 3,
    "tiles": [      
        {
            "type": "HTTP-RAW",
            "label": "plumber stars",
            "params": {
                "url": "https://github.com/pashkatrick/Plumber",
                "regex": "(\\d+) users starred"
            }
        },
        {
            "type": "HTTP-RAW",
            "label": "grpc-client",
            "params": {
                "url": "https://marketplace.visualstudio.com/items?itemName=pashkatrick.grpc-client",
                "regex": "(\\d+) installs"
            }
        },
        {
            "type": "HTTP-RAW",
            "label": "udecoder",
            "params": {
                "url": "https://marketplace.visualstudio.com/items?itemName=pashkatrick.vscode-udecoder",
                "regex": "(\\d+) installs"
            }
        },
        {
            "type": "HTTP-RAW",
            "label": "vscode-etcd",
            "params": {
                "url": "https://marketplace.visualstudio.com/items?itemName=pashkatrick.vscode-etcd",
                "regex": "(\\d+) installs"
            }
        }
    ]
}

Кому интересно подробнее — оставлю ссылку на официальную документацию. От себя скажу лишь, что помимо HTTP-RAW есть HTTP-FORMATTED и HTTP-STATUS. Но это для типа плитки HTTP соответственно. Поддерживаются следующие типы плиток:

Скриншот из документации Monitoror
Скриншот из документации Monitoror

Плюсы

  • дизайн и удобство;

  • простая и понятная настройка.

Минусы

  • чем больше блоков — тем хуже читаемость;

  • отсутствие алертов.

Подходит как для маленьких проектов, «сервачков», сбора интересных цифр (таких как количество скачиваний), так и для стартапов средней величины, где уже выстроен процесс доставки кода.

Сам я CI/CD не настраивал, не было необходимости. Жаль, алертов никаких, да и в проекте последняя активность была год назад. Но в целом очень нравится; все, что нужно — есть. 

Поскольку оповещений нет — пришлось сделать свою парсилку логов. Это простой Python-скрипт, который внутри себя запускает Monitoror в debug-режиме, а после выполнения складывает логи рядом с собой. Соответственно, если ответ не «200 ок» — можно послать уведомление. Сыро, но, если будут звезды, можем докрутить до рабочего состояния.

N8N (etc.)

Следующий пункт в обзоре — no-code платформы, где можно «собрать» систему оповещения под свои нужды. 

Например:

Я выбрал N8N как бесплатную для тех, у кого есть Docker. Установка потребует некоторых IT-навыков, но в целом ничего сложного.

Рабочее пространство N8N
Рабочее пространство N8N

Есть хорошая статья с разбором мониторинга базы данных. Но покажу на своём примере:

Пусть каждые 15 сек отправляется запрос на все мои сайты, и если в ответ приходит НЕ «200 ОК», то отправляется уведомление о проблеме. После собираем отчёт по всем сайтам и отправляем его менеджеру на почту и в Notion.

Пара минут на придумывание flow + соединить всё стрелочками + пару часов на все credentials и API-ключи. Получается довольно быстро c полным соответствием поставленным требованиям.

Рабочее пространство N8N (1)
Рабочее пространство N8N (1)

Плюсы

  • абсолютная гибкость;

  • несложная установка;

  • хорошее комьюнити;

  • документация/инструкции/туториалы;

  • своих денег стоит.

Минусы

  • не нашел.

Сфера применений широчайшая. От бэкенда (можно RabbitMQ, Postgres, Redis — все есть) до управления автоматической поилкой собаки. Процесс масштабирования непростой, но авторы сделали инструкции на популярные кейсы, так что вопросов не остается. А если остаются — в комьюнити можно быстро найти на них ответ.

Крайне рекомендую N8N, к тому же можно добавлять свои/новые сервисы. Мейнтейнеры проекта проверяют пулл-реквест около недели и присылают рекомендации, если потребуются.

Уже не на коленке

На десерт оставил сервисы из категории «всё уже написано за нас». Установка не требуется, только регистрация. Рекомендую посмотреть: 

Скриншот из Hyperping (источник: Google) 
Скриншот из Hyperping (источник: Google) 

На борту: мониторы сайтов, значение uptime'a за настроенные периоды (98% за год), отчёты, страница status page (которую можно показывать всем желающим, хвастаясь стабильностью), а также функция пинга сайтов из разных точек мира и VPN/Proxy запросы. Лично не пробовал, но звучит интересно.

Много функций — конечно, хорошо, но разделение на команды внутри сервиса и инцидент-менеджмент кажутся лишними... Лично мне только уведомления нужны на случай, если что-то сломается. Но тут уже на вкус и цвет.

Плюсы

  • SaaS и всё из него вытекающее;

  • красиво и удобно;

  • алерты, отчеты, интеграции.

Минусы

  • очень платно (начинаются от 30$ в месяц);

  • бывает перегружен интерфейс (например, инцидент-менеджмент).

Я пользуюсь Better Uptime: интерфейс приятный и понятный, да ещё и раз в неделю приходит отчет по всем сайтам. Бесплатного тарифа хватает, но буду ещё тестировать уведомления в Slack/Telegram. Также хочу посмотреть на Proxy-пинг, который доступен по умолчанию, — интересно.

Скриншот из Better Uptime
Скриншот из Better Uptime

Конец

Не люблю стандартные итоги в стиле «выбор сервиса зависит от поставленной задачи», так что скажу так: пробуйте, пользуйтесь, делитесь опытом и находками!

Если я не упомянул еще более крутые сервисы — сообщите мне любым способом, например, в комментариях к статье. Я увижу, запущу сервис, оценю и обновлю статью. Благодарю за внимание!

P.S.

По итогу «аналитической работы» я решил делать свой сервис с отчетами, алертами и запахом смузи. Там пока ничего нет, но если интересно поучаствовать — welcome

Комментарии (20)


  1. kesn
    10.08.2021 15:30

    Там пока почти ничего нет

    Так там вообще ничего нет. Лицензия не считается.


    1. pashkatrick Автор
      10.08.2021 15:37

      Так и есть, над формулировкой поработаю.

      UPD: убрал "почти"


  1. nibb13
    10.08.2021 16:57

    Микро-мониторинг на shell-script для SOHO-роутеров: YAMon


    1. pashkatrick Автор
      10.08.2021 17:07

      Спасибо!


  1. denaspireone
    10.08.2021 17:02

    N8N — из минусов, что даже с докой не ясно, как оно настраивется под разные erp/crm, вроде кажется, что все просто, а на деле нужно писать дополнение для n8n дабы оно работало верно т.к. готовое решение работает в сторону создать что-то в erp, а не оповестить, тебя от неё в мессенджере и не только. В целом все упирается в typescript, но тогда какой смысл? :D


    1. pashkatrick Автор
      10.08.2021 17:16

      нужно писать дополнение для n8n дабы оно работало верно т.к. готовое решение работает в сторону создать что-то в erp, а не оповестить, тебя от неё в мессенджере и не только.

      Если я правильно понял, не хватает какой-то функции в уже готовом модуле?

      Оповещения от erp скорее всего настраиваются на стороне erp (в данном случае операции добавления хватит). Если нужно больше, путей два:

      • Ждать, пока конкретную erp/crm добавят в пул модулей. (не подходит)

      • Использовать модуль http. С ним 90% интеграций можно закрыть.


      1. denaspireone
        10.08.2021 17:18

        Оповещения от erp скорее всего настраиваются на стороне erp

        Именно, там готовые интеграции только со Slack/etc которые идут по партнерке с ними, а что-то типа Telegram — нужно городить свои webhooks и это печалит… Да и сам сервис не особо заинтересован слать халявные алерты в халявный Telegram ;)


        PS: речь об clickup.com
        даже есть integration request https://feedback.clickup.com/integrations/p/telegram


        а бота забросили https://github.com/HosseinYousefi/clkupbot


        1. pashkatrick Автор
          10.08.2021 17:26

          Не так прочитал, прошу простить :)

          В таком случае да... сервис решает сам


          1. denaspireone
            10.08.2021 17:29

            Проблема в typescript — простой смертный менеджер не умеет кастовать в него. То, что вы привели это ок. Но на деле то, что я искал не умеет в webhooks даже https://i.imgur.com/Lrw0B3Z.png из коробки. А раскуривать API — это тянет на платный проект с фриланс биржи.


            1. pashkatrick Автор
              10.08.2021 17:43

              Вижу clickup в списке готовых интеграций https://n8n.io/integrations. Веб хук есть. Посмотрел настройки - нужен access token и вроде все. Не пробовали подключить?


              1. denaspireone
                10.08.2021 17:44

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


                1. pashkatrick Автор
                  10.08.2021 17:53

                  могу помочь, в телеграм напишите, ник такой же, как здесь :)


  1. edo1h
    11.08.2021 06:06

    Чтобы графики в Grafana рисовать — придется штат аналитиков нанять (ба-дум-тсс)

    что-то мне кажется, что вы сильно преувеличиваете )
    ввёл выражение (sql-запрос, запрос прометея, …) — получил график, куда уж проще?


    1. pashkatrick Автор
      11.08.2021 09:14

      это шутка такая ) Конечно, сервисы аля Гафана дают такой опыт взаимодействия, что грех жаловаться. Но задача в другом. Проще - get запрос на 200 ок %)


  1. NosovK
    12.08.2021 19:18

    Кстати n8n можно поднять на heroku, он будет успешно работать с вебхуками.

    https://heroku.com/deploy?template=https://github.com/nosovk/n8n-heroku/tree/test-build

    Но увы из-за специфики бесплатного тарифа в heroku воспользоваться cron в бесплатном режиме не выйдет.

    Если же нужно обрабатывать вебхуки - то вполне себе рабочее решение (по крайней мере бесплатное и не требует администрирования вообще)


    1. NosovK
      12.08.2021 19:27

      По поводу интеграций с N8N - мы для одного из наших продуктов делали интеграцию.

      Интегрировали https://app.mailcheck.co/docs - вот PR https://github.com/n8n-io/n8n/pull/1690/files

      Ребята из n8n стараются максимально помочь всем желающим интегрироваться, вплоть до того что в нашем случае сами сняли обучающее видео как получить ключи для интеграции - https://www.youtube.com/watch?v=Bv1YANfYhUo

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


      1. pashkatrick Автор
        13.08.2021 08:43

        Согласен с каждым словом :)


  1. papurin
    13.08.2021 08:43

    У Netdata можно собирать некоторые метрики в Prometheus https://learn.netdata.cloud/docs/agent/backends/prometheus/ по http://host:19999/api/v1/allmetrics и соот-но настроить алерты в prometheus. Для grafana есть готовые дашборды, например - https://grafana.com/grafana/dashboards/7107

    Дополнительно можно использовать fping на нужные хосты/порты https://learn.netdata.cloud/docs/agent/collectors/fping.plugin. Можно написать свой коллектор на python, bash, js


    1. pashkatrick Автор
      13.08.2021 08:45

      Благодарю за наводки!

      https://grafana.com/grafana/dashboards/7107

      Для чего дашборд в графане, если свои из горобки есть? симпотичнее/удобнее для тех, кто привык?


      1. papurin
        13.08.2021 10:25

        В netdata можно хранить данные, но они же занимают место на серверах. Prometheus в долгосрочной перспективе выгоднее и не надо бегать по все серверам в netdata dashboard, а просто переключаться на нужный сервер/группу серверов в grafana

        Если речь про node-exporter, то он в real-time не покажет данные будет задержка, хотя из коробки в grafana отличные графики, соглашусь