Всем привет. Давненько ничего не писал длиньше пары фраз в слаке, пришла пора, поехали…
Бросив играть в Дота 2, обнаружилось что каждый день у меня есть несколько свободных часов которые мне срочно надо на что-то потратить. А на что потратить свободное время программисту? Естественно, на очередной пет-прожект который должен принести кучу денег :)
Расскажите о себе и сути проекта?
Как появилась идея? Что вдохновило?
На всех проектах, с которыми мне приходилось работать была потребность в мониторинге. Так как я программист, то это всегда был джентльменский набор - sentry плюс что-то для мониторинга общего состояния сервера, например elk.
А как быть если вы менеджер / продакт_оунер?
Ок, устанавливаем sentry настраиваем оповещения - получаем кучу оповещений, первые Х раз кошмарим разработчика вопросами - в моём случае это в 95% были проблемы, не относящиеся напрямую к функционалу сервиса, например - если брать backend - ошибки в сторонних сервисах, ошибка подключения https, бывают, конечно и действительно ошибки требующие внимания, но, такие оповещения явно не для менеджеров.
Хорошо, есть grafana / alerta и прочее, но что если вы маленький сервис / сайт который живет на небольшой VPS - а на девопсов которые будут поддерживать этот зоопарк у вас нет средств, то такой вариант вам не подойдет.
Несколько лет назад, мне приходилось столкнуться с проектом, где в качестве мониторинга использовался okmeter, и мне очень понравилось, как оно работало и настраивалось. Захотелось сделать что-то похожее.
Какие основные функции хотелось в MVP?
⁃ Установка агента на сервер одной командой
⁃ Начинает работать без настроек
⁃ Несколько базовых тригеров для оповещений
⁃ Оповещения в телеграм и на email
Что вошло в прототип и сколько времени на него было потрачено?
В прототип вошел сбор логов с nginx, сбор общих метрик сервера - свободное место / загрузка ЦПУ. Потрачено было около месяца разработки одного меня, это если считать дни, когда я действительно занимался проектом, а не смотрел сериальчики и не залипал в ютубе.
Какой технологический стек вы использовали? Почему?
Думаю, что тут будет самое интересное, как минимум, поучительное! Стэк - изначально, хотелось, чтобы это был мини проект на пару недель не дольше. Поэтому был выбран Django на стандартных шаблонах. Был подключен django-crispy-forms, django-table2 - на этом стэке была написана авторизация, страница со списком серверов, просмотр сервера. И затем я начал добавлять разные графики, таблицы, делать обновление данных…
Я осознанно не хотел использовать SPA, я хотел просто, без ваших вебпаков и прочего - я прекрасно понимаю, о чем говорю :) у меня есть куча опыта разработки на много чём, включая angular, react, vue. В этот раз я хотел без них. Так вот, в процессе добавления таблицы с сортировкой, пагинацией - я понял, что придумываю велосипед, и вместо того чтобы делать что-то интересное, делаю то, что сделано миллион раз.
Решение пришло быстро (да и к тому же я так уже делал) подключаем Vue на существующую страницу и используем для конкретного компонента, например, для таблицы… Ок, подключаем vue прямо с cdn (я же не хочу заморачиваться с вебпаком), туда же подключаем bulma (не с нуля же рисовать ui) и пробуем взлететь… Взлетаем, но весь процесс заставляет меня страдать, так как вебпак подключать я не хочу, потому что не хочу получить ацкую смесь django / weback / vue (я видел что так работает клуб, но я так точно не хочу :) ) поэтому пишем на чистом js, без ваших там async / await и тому подобного…
Спустя пару дней страдания весь написанный фронт летит в мусор, устанавливается drf, создаётся отдельное приложение, уже на ангуляр (typescript - one love) туда же подключается taiga ui (спасибо ребятам и Тинькофф, перепробовал штук 5 разных ui-kit, но этот оказался лучшим). SPA опять победил, ну ок, зато теперь я кайфую, когда пишу код, а не пытаюсь натянуть сову на глобус.
А да, чуть не забыл, еще же для мониторинга нужен был агент, который пользователи будут устанавливать себе на сервер и он будет слать данные. Тут вопрос технологий не стоял, C/C++ я не умею и не хочу уметь, а вот Go несколько раз ковырял и мне понравилось. Берём google, пишем go how to listen nginx log
, go how to install as a service
, копируем куски кода - получаем рабочий агент.
С какими самыми неожиданными трудностями пришлось столкнуться?
Сложнее всего оказалось отлаживать сам агент, так как опыта с go у меня минимум. Агент всегда висит в памяти и не должен жрать много памяти или тратить много цп - важно не забывать закрывать все исходящие соединения, типа
response, err := http.DefaultClient.Do(request)
if response != nil {
defer response.Body.Close()
}
Так же было решено не слать каждое отдельное событие из агента, а группировать их по path / status / datetime
и слать их пачками. Я же рассчитываю, что у меня будут тысячи пользователей…
На сервере всё, довольно просто, я не стал использовать influxdb или что-то в этом роде на старте. Думаю, что Postresql более чем достаточно, как минимум до первых платящих пользователей. Да и по условиям, которые сам и придумал, в сервисе хранятся данные только за один месяц. Апишки отдающие данные для графиков во всю используют постгресовский Trunc и чувствуют себя отлично (возможно, потому что пользователей пока нет :))
С клиентом проблем совсем не было, разве что при выборе ui-kit. Мне нравится Bulma (https://bulma.io/), есть отличная адаптация для Vue, но вот для Angular я не нашел ничего хорошего. Написал в гугле angular ui kit 2022
и пошел тестить один за одним, но всё казалось не тем, где-то дизайн не тот, где-то надо писать вывод ошибок для форм, а мне лень… Тогда вспомнил что ребята из Тинькофф паблишили свой ui-kit, попробовал, понравилось, на нём и остановился - выглядит отлично, сам подход к компонентам мне тоже понравился.
Сколько потратили и заработали? Есть идеи как это можно монетизировать?
Пока не сколько не заработал, но планирую разбогатеть на этом сервисе, так как ничего раньше не было (шучу, знаю как минимум парочку таких сервисов). Монетизация - не вижу никаких других вариантом, кроме как просить денег за каждый добавляемый сервер. Так как мои расходы будут прямо пропорциональны их количеству. Крутится проект сейчас на моём маленьком VPS где крутится ещё куча всего. Поэтому расходов пока нет, разве что - время.
Какие планы на будущее?
Сервис уже содержит минимальное количество функционала, умеет отправлять сообщения по триггерам, умеет регистрировать пользователей - поэтому следующий шаг - поиск тех, кто будет его использовать, на начальном этапе - бесплатно.
Нужны ли какие-то советы или помощь Клуба?
Конечно, что может быть лучше хорошего совета, всегда открыт к конструктивной критике. Очень интересно что вы думаете об этом сервисе. Нужен ли он кому-то или считаете, что это зря потраченное время.
С точки зрения менеджмента первый вопрос - это вопрос рисков. Не уронит ли агент Noname компании наш сервер? А также нет ли в нём потенциальных дыр, через которые можно получить доступ к нашим данным.
Второй вопрос - вопрос документации. Если я бы захотел настроить агента сам, то мне потребовалась бы очень подробная документация с картинками и скриншотами. Я пробовал поднять zabbix на убунте, не смог. Это должна быть реально user-friendly установка.
Вопрос три - а как быстро происходит развитие продукта, какие у него инвестиции и какая команда? Не будет ли такого, что через полгода вы прекратите поддержку и нам придется искать новое решение для мониторинга?
Вопрос четыре - что на счет нестандартных отчетов? Например, у нас есть серия декораторов, которые висят на Django вьюхах, методах моделей и middleware. Эти декораторы умеют накапливать статистику и слать её через https в заббикс. То есть, мы следим за критическими местами и лендингами прямо из Django.
Возможно, вам стоит познакомиться и скооперироваться: https://vas3k.club/project/10256/
По-существу проекта: я не понял, кто твой клиент? Какую попоболь ты закрываешь? Как до сих пор твои клиенты живут без твоего сервиса?
Я пытался ответить на твои вопросы сам, но не смог. Навскидку кажется, что:
Так кто же твой клиент?
Лол, коммент вида "пиарюсь но не получу с этого деняк": мы примерно из таких же посылов делали https://okmeter.io - ставится без агента, мониторит логи и прочее "бм верхнеуровневое" а не только технические метрики, нужен "прошаренному" средняку (хороший анализ от Захара показывает что рынок, м, сложный). С окметром я больше не связан, поэтому за рекламу прошу не считать.
Агент кстати тоже написан на Го, сам детектив всякие запущенные нжинксы монги и пыхи. Начинали его мы делать правда в 2013-14 году и поэтому бекенд хранилище метрик тоже писали свое, а не брали просто Прометеус (или аналог) - ок ещё не было их.
Мне кажется, что это ошибка не просить деньги в самом начале.
Вдруг все захотят твой продукт бесплатно, но потом никто не захочет платить? Нужно сделать минимальный набор фич для тестирования гипотезы, и пытаться сразу находить людей, которым это может быть нужно и просить у них денег. Плюс человек будет понимать, за что он платит деньги и будет давать более качественный фидбек)