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

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

Автор: @itcaat
Download Telegram
Интересно, а насколько AI уже успел изменить нашу работу в DevOps и SRE?

Мы всё чаще отдаём нейросетям написание конфигов, разбор логов, генерацию Terraform и даже диагностику инцидентов. Но вот дать AI доступ к проду и разрешить ему самостоятельно что-то чинить – тут, думаю, многие уже задумаются 😁

Ребята из DevCrowd запустили исследование про SRE, DevOps и платформенных инженеров. Лично мне любопытно посмотреть на результаты по AI и дежурствам. И больше всего: действительно ли AI снижает нагрузку на инженеров или просто позволяет навешивать на них ещё больше задач 😁

В этом году там довольно разнообразные темы:
• Насколько мы вообще доверяем AI и готовы ли пускать его в прод?
• Стало ли больше инцидентов из-за сгенерированного кода?
• Какие навыки инженера AI пока не способен заменить?
• Сколько на самом деле стоят дежурства, переработки и постоянная ответственность за прод?
• Как меняются зарплаты, обязанности и требования к инженерам?

Опрос анонимный, занимает 10-12 минут. Результаты будут в начале декабря.

➡️ https://survey.devcrowd.ru/sre-2026

Ну и вопрос к вам: вы бы уже доверили AI самостоятельно устранять инциденты в проде или рано? 🤩

—
Telegram | Github | YouTube | X
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥2❤‍🔥1
🔖 Expr для Go: динамические правила вместо цепочек if

Сегодня я хочу немного отойти от типичных тем канала и поговорить о разработке на Go, а именно о пакете Expr и задачах, которые она решает.

Вы уже наверняка написали какое-то количество сервисов или программ, дополняющих вашу инфраструктуру на GoLang.

Почти у каждого такого сервиса есть конфигурация по типу такой:


min_replicas: 3
max_error_rate: 0.05


Ну и классическая обработка выглядит примерно так:


if readyReplicas >= cfg.MinReplicas && errorRate < cfg.MaxErrorRate {
// продолжаем операцию
}


Пока конфигурация небольшая, этого достаточно. Но затем меняется уже форма правила: в production нужны три реплики, в остальных окружениях достаточно одной; во время maintenance проверку нужно пропустить; error rate учитывается только для части сервисов.

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

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


rule: >-
environment != "production" ||
maintenanceMode ||
(readyReplicas >= 3 && errorRate < 0.05)


При компиляции Expr проверит правило по Go-типам, а готовую программу затем можно многократно запускать с разными входными данными.

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


type ServiceState struct {
Environment string `expr:"environment"`
MaintenanceMode bool `expr:"maintenanceMode"`
ReadyReplicas int `expr:"readyReplicas"`
ErrorRate float64 `expr:"errorRate"`
}


Теперь загрузим строку из конфигурации и скомпилируем её:


program, err := expr.Compile(
config.Rule,
expr.Env(ServiceState{}),
expr.AsBool(),
)
if err != nil {
return fmt.Errorf("compile rule: %w", err)
}


После этого программу можно выполнить с реальными значениями:


state := ServiceState{
Environment: "production",
MaintenanceMode: false,
ReadyReplicas: 3,
ErrorRate: 0.02,
}

result, err := expr.Run(program, state)
if err != nil {
return err
}

allowed := result.(bool) // true


Приложение ничего не знает о внутреннем устройстве условия. В конфигурации можно изменить порог, добавить исключение или полностью заменить правило – код вокруг expr.Run останется прежним.

Внутри expr.Compile строка сначала превращается в abstract syntax tree. Затем checker связывает имена с полями ServiceState, optimizer упрощает дерево, а compiler создаёт инструкции для stack-based virtual machine. При expr.Run VM выполняет эти инструкции с переданными значениями.

Главный практический выигрыш Expr довольно простой: меняется правило – обновляется конфигурация; меняется набор доступных данных или поведение самого приложения – тогда уже пересобирается Go-код. Эта граница позволяет убрать растущие цепочки if, не превращая конфигурацию в полноценный язык сценариев.

Такое устройство и позволяет крутить правила динамически: дорогостоящую подготовку мы выполняем один раз на reload, а не для каждого запроса.

PS Playground и самая полная документация тут: https://expr-lang.org/

—
Telegram | Github | YouTube | X
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Ребята, делюсь с вами интересным бесплатным митапом от Orion soft и Онтико.

На митапе будут рассказывать про AI в проде и в задачах DevOps-инженеров.

• Orion soft про AI Gateway: единая точка входа для LLM, квоты, лимиты токенов, балансировка, фейловер и трейсинг. Отдельно затронут guardrails и фильтрацию чувствительных данных.
• VK Tech про свой опыт развития AI-агентов: от локального Codex/Claude до агента, встроенного в командные процессы. Jira, мессенджеры, ревью кода и деплой на стейдж после апрува.

📍 26 ноября, 18:30–22:00 · Москва + онлайн
После докладов — ужин 🍿, нетворкинг и шоу-игра.


Участие бесплатное 👏

Зарегистрироваться 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44