DevOps Brain 🧠
1.21K subscribers
127 photos
16 videos
119 links
Пишу про kubernetes, terraform, linux, сети, автоматизации и полезные тулзы. Без спама и щитпостинга.

Хотите пообщаться? @devopsbrain_chat

Автор: @itcaat
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы snitch

Нашел htop для сетевых соединений - назвается snitch.

Открываешь и сразу понятно:
• кто слушает порт
• какой PID
• какой процесс
• какие соединения висят в established
• куда сервис вообще ходит
• можно прибить прямо из интерфейса

Также можно фильтровать TCP/UDP, отдельно LISTEN, отдельно ESTABLISHED, искать, сортировать.

Ставится "изи-пизи":


brew install snitch

или


go install github.com/karol-broda/snitch@latest


Забрать тут: https://github.com/karol-broda/snitch

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11😁21
Информации стало слишком много и нужно что-то с этим делать. Сколько у вас там сохранных статей и видео, которые вы скорее всего никогда не прочитаете и не посмотрите?

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

И проблема даже не в том, что мы плохие и ленивые - дело в контексте. Мы думаем да - это классная статья, я сохраню и потом прочитаю. Но когда настает время прочитать появляется другая классная статья. А через какое-то время еще и еще… А ваш контекст уже переключился на что-то другое и вот в вашей коллекции еще один артифакт.

А что по поводу внезапных идей? Мы идем по улице и БАЦ к вам приходит какая то мысль: это может быть какое улучшение, новый сервис или вы поняли как решить проблему, которую не могли решить уже несколько дней. Хочется куда записать… В голосовухи? В телегу в Saved Messages который итак уже скоро разорвет от хаоса внутри? Короче, это боль. Я умею структурировать данные, я просто не хочу больше это делать. Мне надело быть “оператором ЭВМ” (в 90-е была такая профессия кстати).

И вчера вечером я немного завис над созданием Telegram-бота в роли персонального мультиагентного асситента с памятью о всех переписках и данных которые в него попадут. Я хочу мини-монстрика, в который кормишь просто любую инфу, узкопрофильные вопросы (например по автомобилю, бизнесу, ветеринарии для кошки и тд), свои календари, внутренню базу знаний и оно автоматом все структурирует. Пока цель MVP просто кидаю текст, голос, ссылку или документ в pdf формате в бота и потом могу обращаться через бота к этим данным, например также отправив голосовуху: “Напомни мою идею про то как починить прод =)”. А еще сразу хочу, чтобы если мог попросить ответить голосом, на случай если я за рулем, то оно слало голосовуху.

Почему не взять готовые инструменты? Не хочу. Да, вот так тупо. Мне интерсно поковыряться в векторных базках и построить что-то сложное на базе n8n. В итоге поставил selfhosted n8n + supabase на тестовую вмку где-то в Нидерландах, что бы накрутить MVP и сразу получил в бубен по утилизации =)).

Ну и вопрос к вам - вы как у себя решаете эту проблему структурирования информации и сколько оно отнимает у вас времени и сил?

---
Telegram | Github | YouTube | Twitter
🔥16❤‍🔥3😁2
В продолжении вчерашнего поста про идею создать себе AI-ассистента на базе telegram+ n8n…Решил немного поделиться с вами к чему я пришел и где я продолбался.

👏 Скажу сразу у меня получилось собрать MVP. Из плюсов – оно работает и у меня уже есть какой-то базовый ассистент. Я могу в него голосом говорить, фотки документов отправлять (кстати надо добавить туда юриста) через телегу, могу сохранять ссылки, создавать события в календаре, есть финансовый консультант и даже DBA/Sysadmin/Sre и сетевик в одном лице =) И это ОФИГЕТЬ КАК УДОБНО!

Первым делом я выпилил selfhosted supabase (нафиг он нужон то был?!) и воткнул обычный postgres + vector extension. И теперь моей виртуалочке не так больно, а то load avarage в 178 это было жоска. Ну и прикрутил туда cloudbeaver, чтобы в базку ходить и запросики выполнять. Избыточно, но просто давно хотел посмотреть на веб-версию dbeaver.

✍️ Дальше нарисовал схемку бд со слоями памяти:

conversations (рабочая память) – всё что я говорил и что отвечал ассистент. Используется для контекста текущего и прошлых разговоров. С вектором embedding можно семантически искать релевантные прошлые сообщения.

user_rules(правила пользователя) – это для оркестратора. Если ассистенту сказали “Запомни, меня надо называть МОЙ ПОВЕЛИТЕЛЬ”, то он будет так обращаться. Еще для примера можно сказать “Запомни, всегда отвечай кратко”. Суть вы поняли – через эту штуку можно корректировать поведение.

agent_memories(память конкретных агентов) – это отдельный слой, который ты спрашиваешь. Каждый агент (путешественник, финансист, айтишник и т.д.) хранит свои наблюдения о пользователе – например, психолог запомнит "у пользователя тревожность по поводу работы”.

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

☔️ Ну а теперь где я продолбался. И это (барабанная дробь …) single-hop архитектура. Я протупил в самом начале и теперь оркестратор выбирает одного агента и на этом цепочка заканчивается. Таким образом агенты изолированы – ни один из них не может вызвать другого.

Разберем на реальном примере: "Найди когда нам надо на прививку коту и создай запись в календаре". Orchestrator может выбрать только одного. Если выберет Ветеринара – тот ответит датой, но не создаст событие. Если выберет Календарь – у него нет знаний о прививках. А это явно не то что хочется получить в конце.

Система полностью stateless, нет multi-turn диалога. Если я попрошу создать в календаре событие – агент просто это сделает. Он не проверяет, свободно ли 15:00. По хорошему надо добавить (добавить List Events перед Create) и агент должен сказать: "В 15:00 занято, создать всё равно?". Принять следующее сообщение "да" / "нет" / "тогда в 16:00" в контексте этого вопроса и действовать от этого. Что бы это решить надо pending_actions табличку чтобы контекст не терялся. Ну и прикрутить какой то таймаут для контекста.

Короче, получается как в известном меме: “Миша, всё … – давай по новой” (с)

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

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43😁4
🔖 Приватная сеть в ZeroTier за пару минут

Ребята, решил я недавно поиграться с Dokploy в рамках экспериментов n8n и AI-ассистента. Ну и пока настраивал, заодно решил показать вам ZeroTier.

ZeroTier – это сервис, который позволяет объединить устройства через интернет так, будто они находятся в одной локальной сети.

На самом деле очень крутая штука, тем более что в рамках free-тарифа можно добавить до 10 устройств. Таким образом у нас будет крутая overlay-сеть и мы можем изи-пизи объединить все наши VPS, ноутбуки и телефоны. И самое главное, что будет не важно, что они сидят за NAT. А вся настройка отнимет у вас минут 10:

1. Регаемся на сайте https://www.zerotier.com и прыгаем в личный кабинет.

2. Там создаем новую сеть. Cохраняем себе Network ID. Он понадобиться чтобы к сети присоединиться. У меня это 3b19b3a716137783.

3. Идем на страницу загрузки клиентов https://www.zerotier.com/download. Копируем команду установки и ставим на VPS сервер:

curl -s https://install.zerotier.com | sudo bash


4. Теперь подключимся сразу к новой сети pets. После выполнения получите 200 join OK.


sudo zerotier-cli join 3b19b3a716137783


5. Переходим в админку в нашу сеть pets и авторизуем клиента.

6. Теперь я добавлю локальную машинку. Качаю клиента под свою ОС чтобы оказаться в приватной сети с VPS. Там ввожу Network ID для подключения и делаю апрув в админке.

7. Zerotire нам выдаст рандомный ойпешник в приватной сети. Давайте слегка это исправим. Нырнем в админке в устройство 8b26a132b7 (это VPS) и пропишем в Managed IPs красивый ойпешник 10.75.142.1.

На этом базовая настройка завершена. Устройства будут видеть друг друга в рамках приватной сети 10.75.142.0/24.

Но для большей безопасности и удобства (иначе зачем это всё?) надо настроить firewall. У меня стоит Dokploy, поэтому я хочу сделать открытыми порты 80 и 443. А всё остальное будет открыто только в сети ZeroTier. (ens3 - это внешний интерфейс на VPS, zt+ - это интерфейсы ZeroTier)

8. Подключимся к VPS 10.75.142.1ЭТО ВАЖНО и забекапим текущие правила на всякий.

iptables-save > /root/iptables.backup.$(date +%F_%H%M).rules


9. Закрываемся от мира. Обратите внимание – после применения этих правил доступа к ssh по внешнему интерфейсу не будет. Но так и задумано!


# Сначала базовые allow (в начало)
iptables -I INPUT 1 -i zt+ -j ACCEPT
iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 3 -i lo -j ACCEPT

# Публично только 80/443 через ens3
iptables -I INPUT 4 -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -j ACCEPT

# Всё остальное входящее — DROP
iptables -P INPUT DROP

iptables -F DOCKER-USER

# Разрешаем ответы
iptables -A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# ZeroTier полный доступ
iptables -A DOCKER-USER -i zt+ -j ACCEPT
iptables -A DOCKER-USER -o zt+ -j ACCEPT

# Контейнерам можно инициировать соединения наружу
iptables -A DOCKER-USER -i docker0 -j ACCEPT

# Снаружи (ens3) только 80/443
iptables -A DOCKER-USER -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -i ens3 -p tcp --dport 443 -j ACCEPT

# Остальное снаружи в docker — DROP
iptables -A DOCKER-USER -i ens3 -j DROP

iptables -A DOCKER-USER -j RETURN


Установим iptables-persistent и сохраним правила, чтобы не отрыгнуло после ребута


apt-get update && apt-get install -y iptables-persistent && netfilter-persistent save


В итоге мы получаем приватную сеть с нашими девайсами, которые видят друг друга напрямую. А для внешнего интерфейса открыт только 80 и 443 – в моем случае это Traefik в docker. И теперь на VPS если я сделаю гадость вот так:


docker run -d --name my-redis -p 6379:6379 redis:latest


То порт 6379 будет доступен только в приватной сети:


$ nmap 138.124.75.165 -p6379 -PN
PORT STATE SERVICE
6379/tcp filtered redis

$ nmap 10.75.142.1 -p6379
PORT STATE SERVICE
6379/tcp open redis


ZeroTier подходит и для более сложных кейсов. Но это уже другая история...

А статью со скриншотами можно почитать тут.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы termshark

Иногда кажется, что сообщество просто постепенно переписывает весь GUI в терминал 🙂

В продолжении цикла постов про крутые TUI-тулзов сегодня на очереди инструмент termshark. Это по сути Wireshark в терминале.

Что умеет:

• открывать pcap-файлы
сниффить интерфейсы в реальном времени
• использовать display filters из Wireshark
• смотреть TCP/UDP стримы
• анализировать network conversations по протоколам
• копировать диапазоны пакетов прямо из терминала

Работает это всё через tshark, так что под капотом тот же Wireshark-движок. Особенно удобно, когда ты сидишь на удалённом сервере, а рядом лежит pcap на пару десятков гигабайт, и идея тащить его к себе через scp выглядит сомнительно.

Просто скармливаешь pcap и спокойно разбираешь трафик прямо по SSH:


termshark -r dump.pcap


https://github.com/gcla/termshark

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁21
Не смотря на то, что ИИ вылез уже из каждой дырки, а важность знаний обесценивают с каждым днем – я считаю, что чтение хороших книг дает тот самый важный фундамент, на котором может и должна строиться карьера инженера.

Пусть все говорят «можно спросить у ИИ». Но это как списывать решения, не понимая, как они получены. Книга в первую очередь заставляет думать. Медленно, местами больно, иногда с возвращением назад и перечитыванием.

Но именно в этот момент и происходит магия🪄формируется мышление. Не просто набор ответов, а способность задавать правильные вопросы, видеть причинно-следственные связи и понимать, где у решения границы применимости. Так что ИИ – это ускоритель. Книги – это база. Без базы ускорять нечего.

Я тут подумал – давайте разыграем одну из книг, которые лично мне помогали формировать ту самую базу. Единственное, что мне надо будет чуть времени, чтобы разобраться как делают розыгыши в телеге. А пока выберите какую книгу – через пару минут я скину голосовалку :loading:

• «Высоконагруженные приложения. Программирование, масштабирование, поддержка» — Мартин Клеппман.
• «Site Reliability Engineering. Надежность и безотказность как в Google» – Б. Бейер, К. Джоунс, Дж. Петофф, Н. Р. Мёрфи.
• «Основы инженерии данных» – Джо Райс, Мэтт Хаусли.
• «Распределенные данные» – Алекс Петров.
• «System Design: подготовка к интервью» – Алекс Сюй.
• «System Design: пережить интервью» – Чжиюн Тань.
• «Чистая архитектура. Искусство разработки программного обеспечения» – Роберт Мартин.
• «Семь баз данных за семь недель» – Эрик Редмонд, Джим Уилсон.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤‍🔥6
Отпуск закончился, а вместе с ним и семейная поездка в Шанхай. Хочу поделиться с вами фотографиями и поделиться нюансами, если вы тоже решите туда сгонять. Long story short: “стоит ли туда вообще лететь? Однозначно да!”.

💳 Обязательно ставим AliPay. Я регистрировался просто по email, так как SMS не приходила. Вообще alipay must have в Китае. Вы сможете там и на наличку жить, но это очень неудобно. Например, меню большинства рестиков это qr-код на столе. Сканите прямо в alipay, закаываете, тут же платите и заказ приносят. Обязательно пройдите KYC. В интернетах есть инструкции.

Бабки загонять можно через крипту p2p в приложении HTX. Процесс максимально простой: переводите свою крипту на кошелек в HTX и дальше просто выбираете CNY → Размещаете ордер → Кидаете свой QR в чат с покупателем → Он вам переводит на алик, а вы подтверждаете получение. Ни разу не подводило.

🏝 Обязательно ставим trip.com. Супер нужное приложение для путешествия по Китаю и не только. Там вы можете за рубли купить ESIM, билеты на любые достопримечательности, поезда, авиабилеты, выставки. Также вы сможете почитать опыт других путешественников. Это такой комбайн с соцсетью внутри - прям мастхев.

ESIM активируйте до вылета в Китай. Там конечно будет WIFI в аэропорту Шанхая, но мало-ли - лучше сделать заранее. И включите роумнинг на esim, а то я затупил и ходил ругался что ничего не работает. =)

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

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

🎧 В общем - не забывайте ходить, ездить или ползти в отпуска. А то тут видел недавно твит: чел радовался айфону в качестве компенсации, что он 2 года в отпуске не был.

А мой отпуск всё и я побежал делать свои задачки и пойду готовить для вас интересные посты. Кстати книгу скоро разыграем тоже - я помню =)

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
Ребята, привет. У меня тут накопилось какое-то количество апдейтов по всякому непотребству.

Возможно вам что-то из этого будет полезно 🙂

1. Grafana + Proxmox
Пошарил дашборд Multi-Cluster Proxmox Pulse Overview.
Даёт быстрый обзор нагрузки по нодам и VM — удобно для первичной диагностики без лишнего кликанья.

2. cli-stash → bulk insert
Добавил возможность массово загружать команды (спасибо sai21-learn за пулик). Напомню тем кто не знает – это тулза для часто используемых и сложных CLI-команд – сильно ускоряет работу.


# Bulk add commands
cli-stash add "echo 'hello world'" "ls -la"
cli-stash add --bulk "git status, docker ps, kubectl get pods"

# Add commands from a file
cli-stash add --file commands.txt


3. Smart Tabs 1.0.20 → виджеты
В дополнении для хрома Smart Tabs теперь можно встраивать произвольные данные (например, метрики из Prometheus) прямо в интерфейс. Будет отображаться на отдельной панели виджетов внизу.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥13
Никогда не было и вот опять... Доброе утро 🫣

‼️🚨 BREAKING: An AI found a Linux kernel zero-day that roots every distribution since 2017. The exploit fits in 732 bytes of Python. Patch your kernel ASAP.

https://copy.fail/

---
Telegram | Github | YouTube | Twitter
7