aidaho6

aidaho6

На Пикабу
705 рейтинг 9 подписчиков 7 подписок 9 постов 6 в горячем

GUI — это хорошо, но большие дяди хотят IaC

Вечерело, накрапывал морозный дождь… шел 7-й год разработки Roxy-WI. Понимание необходимости автоматизации пришло давно, поэтому был разработан API. Он был, скажем так, кривой и местами нелогичный, но работал. После создания RMON и написания к нему "нормального" API было решено создать API и для Roxy-WI с поддержкой CRUD и Swagger.

GUI — это хорошо, но большие дяди хотят IaC Linux, Системное администрирование, IT

После консультаций с опытными разработчиками API было принято решение написать его на Flask с использованием views и перейти на JWT-авторизацию. Старый API был разработан на фреймворке Bottle, но поскольку Roxy-WI был переписан на Flask, наличие двух фреймворков в одном проекте не казалось хорошей идеей. На тот момент я уже довольно хорошо изучил Flask. JWT был внедрён, чтобы объединить авторизацию в WEB-версии и API, так как до этого в API использовалась самописная авторизация.

И вот, спустя месяц была выпущена 8 версия! Помимо API и JWT также была внедрена валидация входящих данных на базе Pydantic. Pydantic оказался очень мощным инструментом, но я сопротивлялся использованию библиотеки очень долго - сам уже не знаю почему. И вот, API готов, но необходима документация, поэтому был нужен Swagger. Описывать самому структуру чуть-чуть (очень сильно, капец, как сильно, я же не YAML разработчик) не хотелось. И я решил попробовать ИИ, который предлагает JetBrains за 10 у.е. в месяц (зря что ли плачу?!). Так вот, роботы поработят нас еще не скоро и без работы не оставят :-p. В итоге получилось, правда пришлось поматериться пару вечеров.

GUI — это хорошо, но большие дяди хотят IaC Linux, Системное администрирование, IT

Редактирование конфиг

API готово, значит пора писать Terraform-провайдер. Долго ли, коротко ли, но первая версия была выпущена и там уже и я подключился к разработке провайдерая и обратился к за помощью. Rocky_Break написал первую версию провайдера и прислал мне книгу по Go. Оказалось, что мало написать API, оно должно еще быть консистентным. Долго ли, коротко ли, но первая версия была выпущена и там уже и я подключился к разработке провайдера (как же не удобно писать на Go, после Python :`( ).


Кстати! Чтобы была возможностью управлять HAProxy полностью терраформом было необходим доработать работу с конфигурациями HAProxy - теперь после "накликивания" себе конфига, его можно так же кликами изменить.

Так что теперь есть IaC вэй для создание HA-кластеров с возможностью создание UDP и HAProxy балансиров ;).

Показать полностью 2

Как случайно написать систему мониторинга (еще одну)

Интересно как-то у меня выходит - мои пет проекты получаются случайно. Нет финальной цели, есть только импульс: "О! А это звучит интересно, как же это можно сделать?". И все: "сон для слабаков", "пиво в пятницу? конечно не буду!" и все в таком духе. Как говорится - есть только путь. И это история началась примерно так же... Вечерело На работе мне было нечем заняться, нужно было поставить некоторое количество серверов и сервисов на мониторинг, но из-за большой бюрократии в компании сделать это было не просто, да и сама мониторинговая система работала на базе SNMP, вот только где взять SNMP у самописного сервиса? И тут в голову пришла гениальная идея попробовать самому. К тому же сложным это не выглядело: мониторинг портов, http и куда-нибудь отправить алерт. "Почему бы и не да" - подумал я, к тому же больше познаю Python. И так появился он...

Простенький мониторинг, который как-то, что-то делает, что-то показывает и даже консольная тулза есть:

Как случайно написать систему мониторинга (еще одну) DevOps, Системное администрирование, Мониторинг, Длиннопост

Спустя пару лет я вспомнил о том, что у меня был самопальный мониторинг и почему бы его не добавить в мой основном пет проект, в Roxy-WI. Сказано - сделано. Ведь чем больше функций тем лучше! И так получилось, что со временем мониторингу стало "тесно" в стенах Roxy-WI: с одной стороны надо развивать веб интерфейс, с другой мониторинг, чтобы не было перевеса в одной из сторон я решил вынести мониторинг в отдельный проект. Приветствуйте - RMON! Да... с именами у меня так себе.

Как случайно написать систему мониторинга (еще одну) DevOps, Системное администрирование, Мониторинг, Длиннопост

RMON история проверок

Пф... еще один мониторинг, какой уже по счету?

100500? Да, пожалуй так, так же наверное говорили про Prometheus в свое время: "Зачем ведь есть Zabbix?!", а до этого и про Zabbix: "Зачем ведь есть SNMP, MRTG и Nagios?!". Да, есть, но почему нет? Вдруг получится сделать в чем-то лучше. Конечно я пока не ставлю RMON в ряды с этими системами мониторинга, пока не ставлю. А вдруг получится сделать чем-то лучше ;)?

В чем я вижу "конкурентное преимущество" RMON над существующими системами мониторинга, прежде всего над Prometheus (как промышленный стандарт) и Uptime Kuma (как более близкий по функционалу)? Основных, киллер фич, как по мне, минимум пять:

  1. Агенты - можно установить несколько штук как внутри периметра, так и снаружи и мониторить доступность из нескольких точек. Агенты можно объединять в "регионы" для балансировки чеков, шарить между группами.

  2. API.

  3. Ролевая модель доступа к агентам.

  4. Простота установки и настройки, Web интерфейс и Status pages.

  5. 7 метрик HTTP соединения + мониторинг протухания SSL серта.

Так же есть мониторинг Ping-ом, DNS записей и TCP. В будущем планирую расширять возможности проверок.

Как случайно написать систему мониторинга (еще одну) DevOps, Системное администрирование, Мониторинг, Длиннопост

Мы все это уже видели

Да, агенты по сути реализованы в Prometheus и Blackbox exporter: Blackbox exporter-ы тоже можно поставить в разных точках и мониторить от туда, +- тоже самое. Да, Uptime Kuma даже легче поднимается и тоже имеет web интерфейс. API можно заменить тем же Ansible, например. Но есть одно но - этого нет и там и там. Нельзя отдать playbook человеку и сказать: "Вон на тех экспортерах ничего не создавай, тебе низя!", надо будет поднимать несколько инстансов, чтобы разделить доступ, плюс его надо обучить работать с Ansible. А еще нельзя автоматизировать работу с проверками. Точнее скорей всего можно, но это костыли и высокий уровень входа.

Как итог и тем кто будет писать: "Web отстой, консоль наше все!"

Да, временами так и есть, а временами - нет. Порой даже самые передовые и технологически правильные решения не подходят. Где-то жалко тратить время и ресурсы, где-то неохота погружаться, а где-то надо "через 2 минуты, чтобы все было". А временами передовые решения просто не нужны и удобней работать с тем что попроще. Надо исходить из конкретной ситуации, а не загонять всех в рамки: "%UserName%, используй только %ProgrameName% во всех случаях жизни!".

P.S. если захотите попробовать, то пишите, с удовольствием покажу/объясню :).

Показать полностью 3

Как я перестал пользоваться консолью (почти)

Я достаточно давно, уже больше 18 лет (капец я уже старый :`( ), использую консоль. Пробовал разные оболочки: bash, sh, zsh, ksh, но остановился на тех, что стоят по умолчанию на системах. Пожалуй, это моя лень, перенастраивать оболочки и терминалы под себя - никогда не было моим любимым занятием. А ещё меня всегда бесило редактирование конфигов: ок, если открыл, нашел нужный кусок, поправил, закрыл, перезагрузил сервис, а вот если: открыл, нашел нужный кусок, поправил, закрыл, перезагрузил сервис, а оно не работает... и опять: открыл, нашел нужный кусок, поправил, закрыл, перезагрузил сервис и так пока не заработает, N-ое количество раз.


Да, для этого можно открыть несколько терминалов: редактировать в одном, перезапускать в другом. Но тут тоже есть свои минусы, один из них - захламляется терминал вкладками.


Как вы наверное уже поняли - я ленивый админ, который любит красивенькие (и не очень) GUI. Поэтому, начав плотно работать с HAProxy, мне быстро надоело постоянно править конфиг на нескольких серверах. И, не обнаружив на просторах интернета ничего подходящего, я решил написать свой (ага, очень ленивый - 5 лет уже закончить не могу).


Общаясь с одним из пользователей Roxy-WI, я спросил: “А зачем тебе оно вообще?”, в ответ получил хорошую фразу: “Чтобы в консоль не лазить”. И я задумался. Действительно, после создания пользователя для подключения сервера к Roxy-WI (или можно без этого шага, если root нам не страшен) больше нет необходимости заходить на сервер.


Смотрите сами.

Допустим, мы захотели развернуть новый HA кластер с HAProxy/Nginx/Apache на новых серверах, и нам для этого надо всего-лишь заполнить пару полей и выбрать пару галочек:

Как я перестал пользоваться консолью (почти) Gui, Nginx, Длиннопост

И, через минуты полторы, будет поднят Keepalived с VIP адресом, который будет мониторить сервис HAProxy, затем будет установлен и сам HAProxy.


Ок, у нас есть HA кластер и он даже работает, но какой с него прок, если он пустой? Таки надо лезть в консоль? Конечно же нет! Дальше идем на страницу добавления секций и “накликиваем” то, что нам нужно:

Как я перестал пользоваться консолью (почти) Gui, Nginx, Длиннопост

Можно посмотреть, что получилось в итоге, а можно даже сохранить этот кусок конфига в основной конфиг! Делаем reload или restart на странице с сервисами и всё.


И да, Roxy-WI не пропустит конфиг с ошибками и не перезапустит сервис. У нас есть настроенный и рабочий HAProxy:

Как я перестал пользоваться консолью (почти) Gui, Nginx, Длиннопост

Ещё один приятный бонус от GUI - все видно в одном месте: состояние сервисов, их версию, адрес и кто из них master сейчас. А если нажать на сервис, то можно увидеть более подробную информацию:

Как я перестал пользоваться консолью (почти) Gui, Nginx, Длиннопост

И конечно же редактирование конфигов присутствует. Это не замена полноценному IDE, но куда удобней vi:

Как я перестал пользоваться консолью (почти) Gui, Nginx, Длиннопост

В 90% случаев, это избавит от открытия консоли, а для оставшихся 10 есть много удобных фич.

Но что делать, если, например, есть коллега, который не признает никакие GUI и надо отобрать у него доступ к серверу (это должно быть зачеркнуто)? В Terraform подобные люди порождают кучу проблем с импортом стейтов или дублированием ресурсов, Roxy-WI избавлен от этой проблемы: конфиг берется напрямую с сервера, по этому риск случайно что-то перезаписать крайне мал.


“Но как же так? Но почему? А как?” - есть такие вопросы? С удовольствием отвечу на них, либо напишу ещё одну статью, если вопрос будет слишком большой для комментария. Вы, главное, расскажите мне свою ситуацию, а я всегда рад поболтать ;)


P.S. Конечно же, я продолжаю активно пользоваться консолью и большую часть работы делаю в ней. Я лишь хотел продемонстрировать, что есть и другие способы управлять частью инфраструктуры и не консолью единой. Уверен, какой-то части людей этот инструмент будет полезен.

Показать полностью 5

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс Gui, Nginx, Длиннопост

С самого начал работы над Roxy-WI мы думали о максимальном упрощении жизни пользователя с помощью веб-интерфейса. Поэтому мы решили добавить в продукт возможность работы с WAF (Web Application Firewall), чтобы обеспечить защиту веб-сервисов от разного рода вредоносной активности. Естественно, всё то мы старались сделать максимально просто, чтобы даже начинающий пользователь смог без проблем всё настроить.



Введение: немного о WAF вообще и о ModSecurity в частности


Аббревиатура WAF (Web Application Firewall) дословно переводится на русский как “файервол для веб-приложений”. Так называют программные инструменты для защиты веб-приложений от атак и вредоносной активности: брутфорса, SQL-инъекций, XSS-атак, спам-активности в комментариях, попыток загрузки подозрительных файлов и многого другого (у разных WAF набор функций может различаться). Для распознавания злонамеренных действий в разных WAF используются разные технологии: от программно-аппаратных решений, завязанных на железо ― до облачных, в которых активно применяются искусственный интеллект и машинное обучение.

WAF ― это своего рода “пропускной пункт” для всех запросов, направляемых на веб-сервер. Вероятность зловредной активности снижается за счёт того, что запросы, не соответствующие заданным критериям, до сервера не доходят. Как правило, в случае получения такого запроса пользователь получает уведомление, на основании которого при необходимости может и дополнительно усилить меры безопасности. Анализ и фильтрация запросов происходят на основе заданных пользователем правил, называемых также политиками.

На основании применяемых политик все WAF можно разделить на две большие группы: запретительные (англ. blocklist и разрешительные (англ. allowlist). Запретительные, как и следует из названия, не пропускают запросы, которые не попадают под установленными критериями. Разрешительные же работают прямо противоположным образом: они пропускают только те запросы, которые пользователь включил в число дозволенных. Оба этих подхода имеют свои плюсы и минусы, обсуждение которых в задачи нашей статьи не входит. Отметим только, что в современном мире они редко используются в чистом виде: большинство современных WAF используют политики, основанные как на разрешительном, так и на запретительном принципе.

На рынке в настоящее время представлено много инструментов для защиты веб-приложений. Большинство наиболее эффективных WAF ― платные; зачастую они входят в комплекс услуг, предоставляемых облачными и хостинг-провайдерами. Интеграция таких инструментов с веб-приложениями и сервисами, как правило, не представляет никакого труда: большинство провайдеров предоставляют удобный веб-интерфейс, а иногда и API для интеграции. Всё это, как и было сказано выше ― решения коммерческие. Что касается решений с открытым исходным кодом, с помощью которых можно добавить функциональность WAF в собственный сервис, то здесь выбор не особо велик: ModSecurity, WebKnight, Naxsi, Shadow Daemon ― больше никаких известных названий на ум и не приходит.

Самым популярным и самым распространенным из них является, конечно же, ModSecurity ― свободно распространяемый WAF, созданный Иваном Ристичем в 2002 году и в настоящее время поддерживаемый компанией Trustwave SpiderLabs (см. официальный репозиторий на GitHub). Начинался он как модуль для веб-сервера Apache, но со временем проект расширился: появилась поддержка Nginx и HAProxy; впоследствии был выпущен ModSecuriy-модуль и для майкрософтовского веб-сервера IIS.

Начиная с версии 3 проект что ModSecurity по сути начал новую жизнь: внимание разработчиков переключилось с модулей на библиотеку libmodsecurity, с помощью которой стало возможным внедрять функциональность WAF в любые приложения и сервисы: балансировщики нагрузки, панели управления хостингом и другие. Библиотеку можно использовать в программах на C и C++ (в настоящее время ― только для OC семейства Linux); реализована также поддержка ModSecurity для программ на Python.

Продолжается поддержка модулей для Apache и для Nginx (это не совсем модуль в буквальном смысле слова; сами разработчики используют термин сonnector); имеется так же агент для HAProxy.


Именно ModSecurity используется в качестве WAF в Roxy-WI. Ниже мы покажем, как организована работа в нашем сервисе, но перед этим скажем несколько слов об общих принципах работы ModSecurity.



Как работает ModSecurity


Чтобы начать использовать ModSecurity, нужно составить набор правил. Такие наборы поставляются в готовом виде: в свободном доступе распространяется OWASP Core RuleSet (сокращенно OWASP CRS), который как раз и используется в Roxy-WI.

На основе этого набора правил можно защитить веб-приложение от наиболее распространенных атак, в том числе:


- брутфорса;

- shell-инъекций;

- фиксаций сессии;

- SQL-инъекций

- межсайтового скриптинга (XSS);

- локального и удаленного внедрения файлов;

- попыток эксплуатации уязвимостей серии Bashdoor/ShellShock.


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

Структуру и синтаксис правил в этой статье мы подробно разбирать не будем, а всех заинтересованных читателей отсылаем к официальной документации.

ModSecurity на основе правил OWASP CRS может работать в двух режимах. Первый режим ― автономный (используется по умолчанию в ModSecurity версий 2.x). Здесь всё просто: если какой-то запрос попадет под условия правила, то он будет заблокирован; при этом все остальные правила ModSecurity проверять не будет.

Второй режим называется режимом оценки аномалий (используется по умолчанию в ModSecurity версий 3): ModSecurity проверяет все правила и на основе проверки по каждому правилу присваивает проверяемому запросу/ответу определенное количество баллов. Полное совпадение запроса с условиями правила оценивается в 5 баллов, а полное совпадение ответа ― в 4. При достижении порогового количества баллов запрос считается атакой и блокируется.



Как всё сделано в Roxy-WI


Чтобы наглядно продемонстрировать, как всё работает, рассмотрим следующую схему:

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс Gui, Nginx, Длиннопост

Здесь всё просто: запрос поступает на бэкенд HAProxy с прописанным правилом, после чего передаётся WAF. Если запрос соответствует правилу, то он возвращается обратно, после чего пересылается на бэкенд-сервер. Если же запрос правилу не соответствует, WAF возвращает ошибку 401 или 404.

В нашей реализации возможности работы с ModSecurity через веб-интерфейс мы руководствовались перечисленными ниже принципами.

Во-первых, установка и подключение WAF должно быть максимально простыми. Чтобы установить WAF, достаточно одного нажатия кнопки:

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс Gui, Nginx, Длиннопост

По завершении установки в меню выбираем HAProxy → WAF, находим в списке нужный сервер и в выпадающем меню WAF Mode выбираем On:

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс Gui, Nginx, Длиннопост

Помимо привычных On и Off можно выбрать ещё и пункт DetectionOnly. В этом случае WAF будет работать только на обнаружение атак, не принимая при этом никаких действий по их обработке.

Во-вторых, мы хотели бы максимально облегчить пользователю работу по добавлению и редактированию правил. В Roxy-WI используется такая модель: по умолчанию устанавливается готовый набор OWASP CRS; некоторые правила из набор пользователь при необходимости может убрать (а потом в случае необходимости вернуть снова). Чтобы просмотреть список правил, нужно нажать на кнопку Open (графа Manage Rules в списке серверов). На скриншоте ниже показан фрагмент списка правил:

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс Gui, Nginx, Длиннопост

Здесь всё просто нужно исключить правило ― убираем чекбокс enabled, нужно вернуть ― ставим чекбокс обратно. Недавно была добавлена возможность просмотра правил: для этого нужно нажать на кнопку View. А вот редактировать правила через веб-интерфейс нельзя ― хотя бы потому, что пользователь (особенно неопытный) может наделать синтаксических ошибок. Да и цель у нас изначально другая: предоставить пользователю (в первую очередь ― пользователю начинающему, который может и не знать ничего о ModSecurity) базовый набор правил из коробки. Если возникает необходимость отредактировать правила, то это можно сделать непосредственно на сервере.

В-третьих, мы хотели бы предоставить пользователям возможность удобного просмотра логов ModSecurity и сбора метрик. Чтобы просмотреть логи, достаточно кликнуть по имени сервера в списке; логи в веб-интерфейсе отображаются так:

WAF в Roxy-WI: базовая защита веб-приложений через графический интерфейс Gui, Nginx, Длиннопост

Как видно из скриншота, через веб-интерфейс можно выполнять поиск по логам, а также просматривать логи за определенный период времени.



Заключение


Как обычно, приглашаем всех попробовать ― и поработать с WAF через Roxy-WI. Любые замечания и предложения по улучшению приветствуются.

Наш сайт: https://roxy-wi.org/

Наш GitHub: https://github.com/hap-wi/roxy-wi

Наш телеграм-канал: https://t.me/haproxy_wi


Также приглашаем высказаться в комментариях всех, кто имел дело с ModSecurity и его интеграцией в собственные сервисы: возможно, ваш опыт окажется для нас полезным.

В планах у нас, кстати, WAF для Nginx. Как только всё будет сделано, мы расскажем о нём подробнее в одной из следующих статей.

Показать полностью 5

HAProxy, Nginx и Docker: как это сделано в Roxy-WI

Продолжаем цикл статей о возможностях Roxy-WI. Сегодня мы поговорим ещё об одном важном наборе функций, связанных с управлением сервисами (а именно ― HAproxy и Nginx) в docker-контейнерах. Мы старались сделать эту функцию максимально простой и удобной в использовании. О том, что у нас получилось, и пойдёт речь ниже.

HAProxy, Nginx и Docker: как это сделано в Roxy-WI Web, Gui, Nginx, Длиннопост

Зачем запускать сервисы в контейнере?


Контейнеризация ― это актуальный тренд на протяжении вот уже многих лет (первая версия Docker вышла в 2013 году).  Самое главное преимущество контейнеров заключается в сведении к минимуму возни с установкой и запуском. Все проблемы с зависимости снимаются раз и навсегда. В контейнере мы получаем готовое приложение, которое достаточно просто загрузить на хост и запустить. Собственно, контейнеризованное приложение не будет установлено в систему в буквальном смысле слова: оно будет запущено в изолированном окружении и может быть в любой момент убрано из системы.



Зачем управлять контейнерами через графический интерфейс?


Вопрос, вынесенный в название параграфа, может возникнуть у многих читателей: управлять Docker-контейнерами через командную строку несложно; в свободном доступе опубликованы тысячи, если не сотни тысяч, руководств и обучающих материалов. Тем не менее, за 8 лет существования Docker было создано немало решений для работы с контейнерами через веб-интерфейс.  Какие преимущества даёт веб-интерфейс?


Первое преимущество ― это наглядность. Пользователь может видеть, какие приложения работают в контейнерах и как контейнеры взаимосвязаны между собой. Это актуально, например, для больших (десятки и сотни контейнеров) инсталляций Docker.


Второе преимущество заключается в удобстве наблюдения за работой сервисов: в большинстве существующих решений для управления контейнерами через веб-интерфейс предусмотрены просмотр и визуализация статистики (потребление ресурсов, процессы).


Третье преимущество заключается в упрощении многих операций, что полезно как для начинающих, так и для опытных (особенно при работе с большими инсталляциями) пользователей. Управлять через GUI сетями, томами, образами значительно проще, чем через командную строку.


Четвертое преимущество заключается в наличии дополнительных функций и возможностей: например, управление правами и списками доступа (разным пользователям могут быть доступны разные контейнеры; кроме того, для всех пользователей можно задавать индивидуальные права на выполнение тех или иных операций).  Настраивать всё это через графический интерфейс получается значительно проще и быстрее, чем устанавливать дополнительные инструменты, а затем прописывать необходимые  настройки в конфигурационном файле.



Как это сделано в Roxy-WI


В Roxy-WI мы стремились сделать работу с контейнерами максимально простой и удобной: по сути управление сервисом в контейнере не должно ничем отличаться от управлением тем же сервисом в неконтейнеризованном виде.


Для экземпляров сервисов, работающих в контейнерах, у нас предусмотрена визуализация: на странице HAProxy => Overview (или Nginx => Overview) они помечены значком “коробки”, то есть контейнер. Для них доступны те же функции, что и для всех обычных сервисов.


Начиная с текущей версии (5.3.0)  могут установить HAProxy и Nginx в контейнерах непосредственно через Roxy-WI. Всё очень просто: идём на страницу Servers page и нажимаем на кнопку Proxy installation.  В открывшемся окне выбираем чекбокс Install as a Docker container. После этого всё, начнётся установка.


По умолчанию контейнеры получают имена haproxy и nginx.  Если эти имена требуется изменить, нужно перейти на страницу Settings и отредактировать значения параметров haproxy_container_name и/или nginx_container_name


Для контейнеров используются пути к конфигурационным файлам, которые указаны в настройках. Именно эти пути пробрасываются в Docker. Если по тем или иным причинам требуется использовать нестандартные пути, то их нужно прописать заранее перед установкой.



Заключение


В этой статье мы кратко рассказали об особенностях работы с Docker через Roxy-WI. Чтобы усовершенствовать соответствующий набор функций, нам необходима обратная связь от актуальных и потенциальных пользователей. Приглашаем всех попробовать управлять контейнерами; любые пожелания и предложения приветствуются.


https://roxy-wi.org  - официальный сайт и документация проекта;


https://github.com/hap-wi/roxy-wi - репозиторий проекта (можно не только высказывать своё мнение, но и присылать пулл-реквесты);


https://t.me/haproxy_wi  - наш телеграм-канал; подписывайтесь и будьте в курсе всех новостей.

Показать полностью

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =)

Продолжаем серию публикаций о нашем веб-интерфейс для HAProxy. Сегодня мы поговорим о специализированном сервис под названием Checker, предназначенном для мониторинга сервисов HAProxy и Nginx, а также бэкендов HAProxy. Если один из сервисов падает, то Checker рассылает уведомления через Telegram или Slack.

Это очень удобно: не нужно "прикручивать" сторонний инструмент мониторинга, да и умеет Checker (причём из коробки) гораздо больше. Впрочем, обо всём по порядку.

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =) Nginx, Gui, Длиннопост, Интерфейс

Структура и функции


Сервис Cheсker состоит из управляющего компонента (Master Checker в терминологии Roxy-WI) и рабочих компонентов (Worker Checkers в терминологии Roxy-WI)

Рабочие компоненты на текущий момент имеются для HAProxy и Nginx.C функциями управляющего компонента всё понятно - он отвечает за функционирование рабочих компонентов.


Рассмотрим их функции более подробно. Рабочий компонент для HAProxy умеет проверять статус сервиса HAProxy, а также статус бэкендов, а также рассылать уведомления в Теlegram, Slack или в оба мессенджера одновременно. Важный момент: ещё он умеет проверять, приближается ли число установленных соединений к заданному лимиту, и отправлять соответствующие уведомления. При использовании сторонних инструментов мониторинга это возможно, но всё сложнее: для того же Prometheus надо прописывать отдельные правила. У нас же никаких дополнительных настроек не нужно.Рабочий компонент для Nginx умеет проверять статус сервиса Nginx, и рассылать уведомления, если статус изменился. В планах — создание рабочего компонента для Keepalived. Он будет проверять состояние сервиса, а также отправлять уведомления при каждом переключении между мастером и бэкапом.


Установка


Дисклеймер: для выполнения всех описанных ниже действий у вас уже должен быть установлен Roxy-WI. Если вы его ещё не установили, читайте здесь, как это сделать.


Установить Checker можно с помощью стандартного менеджера пакетов:


#yum
$ sudo yum install roxy-wi-checker
#apt
$ sudo apt-get install roxy-wi-checker

После установки нужно запустить Checker. Для этого в главном меню выбираем пункт Admin Area => Services, находим в списке roxy-wi-checker (он там идёт первым) и нажимаем на значок "Play"


Затем потребуется включить Checker для серверов, для которых мы планируем получать уведомоления. Выбираем в главном меню пункт HAProxy => Overview или Nginx => Overview. На экране мы увидим список серверов, в котором каждый сервер будет представлен в виде отдельной карточки, например:

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =) Nginx, Gui, Длиннопост, Интерфейс

Здесь всё просто: выбираем соответствующий чекбокс — и Checker включен. Уведомления обо всех событиях будут приходить прямо в браузере и сопровождаться звуковым сигналом —’это удобно, например, для дежурных системных администраторов и сотрудников служб технической поддержки.


Информация обо всех событиях, которые регистрирует Checker, сохраняется в истории (Monitoring => Checker history в главном меню):

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =) Nginx, Gui, Длиннопост, Интерфейс

Она может оказаться полезной при диагностике и устранении неисправностей.Состояние как управляющего (Master), так и рабочих (Worker) компонентов Checker можно отследить на главной странице Roxy-WI в разделе Services status:

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =) Nginx, Gui, Длиннопост, Интерфейс

Практический кейс: настраиваем уведомления через Telegram


Рассмотрим возможности Checker более подробно. Попробуем сделать так, чтобы сервис рассылал сообщения об изменения состояния сервисов через Telegram.


Для этого потребуется:


1. создать Telegram-бота;

2. создать Telegram-канал;

3. предоставить боту права администратора канала;

4. активировать Checker для серверов, информацию о которых вы планируете получать


Краткая инструкция по созданию бота опубликована на сайте Roxy-WI. По завершению всей процедуры BotFather (служебный бот, который управляет всеми ботами в Telegram) выдаст токен. Скопируем токен и выберем в главном меню Admin Area => Services.


Интерфейс для управления Telegram-уведомлениями выглядит так:

What does the Checker check, или как организовать удобный мониторинг через веб-интерфейс =) Nginx, Gui, Длиннопост, Интерфейс

Вставляем Token в соответствующее поле, в поле Channel name вводим имя канала (обязательно со знаком @). Далее нужно будет выбрать группу, для которой будут рассылаться тестовые уведомления. В нашем случае это группа dev.


Вообще серверы на группы можно делить на любых основаниях, и создавать неограниченное количество групп (пункт Admin Area => Groups в главном меню).Заполнив все поля, нажимаем на кнопку test — в канал будет отправлено тестовое уведомление.


Заключение


В этой статье мы кратко рассказали о возможностях нашего внутреннего инструмента мониторинга и рассмотрели практический кейс. Приглашаем всех желающих поэкспериментровать — и высказать своё мнение. Все предложения по улучшению проекта приветствуются.


Наш репозиторий — https://github.com/hap-wi/roxy-wi

Наш Telegram-канал — https://t.me/haproxy-wi

Показать полностью 5

Как редактировать конфиг через Web-GUI для Haproxy (и не только)

О том, как написать Web GUI для HAProxy, мы уже говорили в двух статьях (1 и 2). С момента публикации последней статьи прошёл год; сейчас, по прошествии времени, очевидно, что о многих вещах (важных и полезных) мы так и не рассказали подробно. Сегодня мы возвращаемся на Пикабу - и постараемся публиковать статьи на более или менее регулярной основе. В этих статьях мы подробно расскажем о специфике работы c Roxy-WI, о возможностях и преимуществах нашего решения. Начнём с набора функций, о котором мы в предыдущих статьях упоминали, но мало. Речь идёт о работе с конфигурационными файлами.

Как редактировать конфиг через Web-GUI для Haproxy (и не только) Web, Nginx, Длиннопост

С помощью Roxy-WI можно работать с конфигурационными файлами для трёх сервисов: HAProxy, Nginx и Keepalived. Через веб-интерфейс пользователи могут выполнять следующие операции:


1. редактировать конфигурационные файлы;

2. визуализировать структуру сети;

3. сравнивать текущую версию конфигурационного файла с предыдущей;

4. сохранять все предыдущие версии конфигурационных файлов и откатываться на старую версию в случае необходимости;


Рассмотрим каждую из этих функций подробнее.



Зачем вообще редактировать конфигурационные файлы через веб-интерфейс?


Такой вопрос может возникнуть у многих читателей. Действительно, многие из нас привыкли работать с конфигурационными файлами в текстовом редакторе, и никаких сложностей в этом на первый взгляд нет. Но есть нюансы. Начнём с того, что конфигурационный файл может иметь очень сложную структуру. Сориентироваться в нём бывает сложно, особенно начинающему пользователю. В графическом интерфейсе Roxy-WI всё просто и наглядно. Возьмём в качестве примера конфигурационный файл для HAProxy. Итак, выбираем в главном меню HAProxy => Configs, в выпадающем меню выбираем нужный сервер и нажимаем на кнопку Open. После этого видим такую картину (приводим небольшой фрагмент конфига, секции global и defaults):

Как редактировать конфиг через Web-GUI для Haproxy (и не только) Web, Nginx, Длиннопост

Всё вполне понятно; если кликнуть по ссылке Edit, откроется форма для редактирования:

Как редактировать конфиг через Web-GUI для Haproxy (и не только) Web, Nginx, Длиннопост

После внесения изменений можно нажать на кнопку Check config и проверить конфигурационный файл на наличие синтаксических ошибок.

Для начинающего пользователя HAProxy (а также Nginx и Keepalived) на таком интерфейсе очень хорошо учиться. Опытному пользователю графический интерфейс поможет не запутаться в сложных конфигах и тем самым снизить вероятность ошибок из-за человеческого фактора.

Ещё Roxy-WI может существенно упростить жизнь, если серверов много: все конфиги можно редактировать в одном месте. Если вы изменили конфиг на master-сервере и применили одно из указанных на кнопках со скриншота выше действий, аналогичные изменения произойдут и на slave-сервере.



Визуализация


Просто читая конфигурационный файл HAProxy, не всегда можно сразу представить, а как именно всё устроено. Именно для этого в Roxy-WI предусмотрена функция визуализации. Выбираем нужный сервер, нажимаем на кнопку Map и видим:

Как редактировать конфиг через Web-GUI для Haproxy (и не только) Web, Nginx, Длиннопост

Такая возможность очень полезна для всех, кто только учится работать с HAProxy.

Кроме того, она может очень пригодится в ситуации, когда нужно что-то наглядно объяснить коллегам, которые с HAProxy вообще дела не имели или имели, но очень мало (менеджерам, тестировщикам. техническим писателям и многим другим — здесь возможны варианты).



Работа с версиями


Представьте себе такую гипотетическую ситуацию: вы что-то изменили в конфиге, и нужный вам сервис (тот же HAProxy или Nginx) не запускается. Для таких случаев в Roxy-WI предусмотрена возможность сравнения конфигурационных файлов.

Как редактировать конфиг через Web-GUI для Haproxy (и не только) Web, Nginx, Длиннопост

Выбираем нужные версии, нажимаем на кнопку Compare — и на видим diff двух конфигов. Выглядит он так же, как дифф файлов на GitHub:

Как редактировать конфиг через Web-GUI для Haproxy (и не только) Web, Nginx, Длиннопост

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


Так как Roxy-WI сохраняет все версии конфигурационных файлов, то в случае возникновения неисправностей всегда можно откатиться на предыдущую версию. Например, если после изменения конфига возникли ошибки, вы можете откатиться на старую (рабочую) версию, и сервисы будут доступны, пока вы ищете и исправляете ошибки в новой.


Набор функций по работе с версиями мы планируем расширять. В Roxy-WI серверы могут получать статус protected. Для этих серверов мы планируем сделать следующее:, полноценное редактирование будет доступно только администраторам, а остальные пользователи смогут только предагать изменения. После проверки админом эти изменения могут быть или приняты, или отклонены — принцип такой же, как при работе с мердж-реквестами на GitHub.



Заключение


В этой статье мы рассказали о возможностях работы с конфигурационными файлами через Roxy-WI. Приглашаем всех попробовать и приводим полезные ссылки:


https://roxy-wi.org/ - официальный сайт проекта (здесь же документация);

https://github.com/hap-wi/roxy-wi - официальный репозиторий проекта.


Любые пожелания по улучшению работы с конфигурами приветствуются - добро пожаловать в комментарии.

Показать полностью 5

Как случайно продолжить писать Web-GUI для Haproxy

Прошло уже пол года, как я написал Как случайно написать Web-GUI для Haproxy, а воз уже давно не там — все меняется и развивается и HAProxy-WI старается соответствовать этой тенденции. За два года было проделано много работы, об основных изменениях я и хочу сейчас рассказать, так что: добро пожаловать под «кат».

Как случайно продолжить писать Web-GUI для Haproxy Nginx, Gui, Web, Длиннопост

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

Как случайно продолжить писать Web-GUI для Haproxy Nginx, Gui, Web, Длиннопост

В комментариях к предыдущему посту мне несколько раз говорили что использование bash скриптов для установки сервисов — это стреляние себе в ногу. Я с ними согласен и по этому 95% всех установок сейчас проходят через Ansible. Действительно удобно, да к тому же надежнее. Одни плюсы вокруг!


Как можно не изобрести велосипед в велосипеде? Ребенок велосипеда, так сказать… Маленький такой велосепедик, трех колесный пожалуй: возможность простого мониторинга портов на предмет доступности порта, ответа HTTP и проверка ответа по ключевому слову. Да, не много функций, но зато ставить и админить легко :)


Очень крутая работа с HAProxy RunTime API. Почему очень крутая? Такая есть только у нас и… пожалуй все. Конечно звучит немного претенциозно, но мне правда нравится как это работает. Как например выглядит работа со многими любимыми и ненавидимыми в тоже время stick-table:

Как случайно продолжить писать Web-GUI для Haproxy Nginx, Gui, Web, Длиннопост

А с версии 5.0.0.0 можно развернуть сервера в AWS и в DigitalOcean!

Как случайно продолжить писать Web-GUI для Haproxy Nginx, Gui, Web, Длиннопост

Т.к. для этого используется Terraform, то сервер можно редактировать и даже удалить!


А ну и сайт стал значительно красивей, на нем появились "Хоутушки" и более детально описаны разделы.

Показать полностью 3
Отличная работа, все прочитано!