Господи, надеюсь я никогда не буду нести чушь инфоцыганщины
Иногда я буду писать про свою
продуктивность.Это могут быть технические советы уровня junior после курсов, а могут быть крайне высокоуровневые штуки, которые могут не пригодится никому ещё долгое время. Если вы всё знаете и умеете, то просто скипайте.
Начнём с самого простого. Настройка рабочего места.
Я часто могу пересаживаться с рабочего Windows стационарного ПК на surface планшет и потом и вовсе на макбук.
Мне надо иметь всегда идентичное рабочее место и утилиты, как минимум консольные, и алиасы.
У меня через MS
OneDrive (подписка MS office 365 family, ныне AI MS AI COPILOT AI 365 AI-
~/.bashrc файлаВ нём всякие alias, кастомизации prompt и многое важное
-
~/.gitconfig настройки GIT-
~/.ssh/config настройки SSH (например там у меня сетапы для jumphosts)-
~/.cargo/config.toml настройки Так же не маловажно отдельно выделю
ASDF пакетный менеджер.-
~/.tool-versions список утилит и их версий-
~/.asdfrc собственно сам конфиг asdf-
~/.asdf/plugins/ ТОЛЬКО для кастомных плагинов, у меня их всего 3Для тех, кто незнаком с пакетными менеджерами, а всё ещё пользуется скачиванием бинарей с гитхаба.
- установил
asdf один раз https://github.com/asdf-vm/asdf/releases
- установил нужные плагины один раз
asdf plugin add golang
asdf plugin add nodejs
asdf plugin add python
asdf plugin add helm
asdf plugin add kubectl
asdf plugin add k9s
asdf plugin add flux
asdf plugin add terraform
- Создаём
.tool-versions (один раз, потом иногда обновляем)golang 1.22.0 1.21.6
nodejs 20.11.0 18.19.0
python 3.12.1 3.11.7
helm 3.14.0 3.13.3
terraform 1.7.2 1.6.6
kubectl 1.29.1 1.28.4
k9s 0.31.7 0.31.6
flux 2.2.3 2.1.2
- установил все тулзы
asdf install
И всё, больше ничего.
В случае же моего синка можно лупануть башизмом на новой тачке нечто типа такого
cut -d' ' -f1 ~/.tool-versions | xargs -I{} asdf plugin add {} && asdf installВы только подумайте.
Потерял ПК/заменил ПК/пересел на другое место(тем, кто в офис ходит и там стационар)/переобулся и стал маководом - засинкал файлы(удобным вам способом), ввел пару команд и у вас на вашем ПК:
- все известные вам утилиты известных вам версий установлены
- все привычные алиасы и настройки баша так же доступны
Не надо тратить снова сутки на настройку рабочего места.
Скорость готовности рабочего места зависит лишь от скорости интернета при скачивании пакетов.
Я ещё люблю саму фичу:
- на маке, допустим, обновил helm до 3.8, пересел на винду, а у меня там уже helm3.8, а не старая 3.6.
Невероятно удобно. Идентичная среда везде и всегда, никаких багов.
* все пакеты качаются из официальных репозиториев, никаких левых пакетов!
** файлы с креденшлами НЕ синхронизируются и так делать нельзя
*** альтернативы OneDrive: google drive, icloud, dropbox, yandex.disk
**** все файлы выше это лишь базовый пример, так-то у меня синкается значительно больше вещей.
***** все файлы из
WSL2 залинкованы через ln -s /mnt/c/Users/alex/OneDrive/wsl2/.bashrc ~/.bashrc
Если вы хотите начать, но не знаете с чего начать с asdf, можете смело украсть примеры с гитхаба у людей.
https://github.com/search?q=path%3A**%2F.tool-versions+kubectl&type=code
Полный список плагинов можно найти тут https://github.com/asdf-vm/asdf-plugins
Раньше я ещё синкал
keybindings.json settings.json у VScode, но теперь это синкается автоматически через мой аккаунт средствами самого VScode.Please open Telegram to view this post
VIEW IN TELEGRAM
✍8🔥8👍4👀2
#пятница
Три темы писем, которые боюсь получать:
- Urgent: cloud cost anomaly detected
-⚠️ Prod is down. Last email alert. Slack is unavailable.
- 🎉🚀 2025 Performance Review. 🎉🚀
Бл, лучше бы сейчас пришло второе
Три темы писем, которые боюсь получать:
- Urgent: cloud cost anomaly detected
-
- 🎉
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9
Снова terragrunt.
Рано или поздно все хотят шаблонов.
Появляется структура каталогов, файлов, модулей.
Пишутся свои и переипользуются чужие.
Иногда приходим к подобным структурам(это лишь пример, это не бест практис):
При работе с такой структурой все красиво, удобно и замечательно происходит кроме одной вещи.
Неиспользование кеша провайдеров.
При запуске
При запуске
На помощь нам приходит простая переменная.
У меня это просто в башрс лежит
В этом случае у нас идёт пере использование бинарного файла.
В кратких тезисах это работает внутри:
- в директории
- в
- "тяжелые" бинари в
Пример
Насколько мне известно нельзя полностью перетащить файлы модуля терраформа к бинарям, так как
- разные модули могут требовать разные версии одного и того же кода
- при параллельном выполнении, например
Использование этой переменной нам дадут:
- многократное снижение утилизации диска по размеру
- быстрый старт при первом клонировании репозитории и запуска террагранта
* Эта переменная НЕ избавит вас полностью от создания директории
** Так же рекомендую добавить эту директорию в gitignore, для работа гита она не нужна.
#terragrunt #terraform
Рано или поздно все хотят шаблонов.
Появляется структура каталогов, файлов, модулей.
Пишутся свои и переипользуются чужие.
Иногда приходим к подобным структурам(это лишь пример, это не бест практис):
infrastructure/
├── terragrunt.hcl
├── modules/
│ ├── networking/
│ ├── database/
│ ├── kubernetes/
│ ├── monitoring/
│ ├── security/
│ ├── storage/
│ ├── compute/
│ ├── iam/
│ ├── logging/
│ └── dns/
└── environments/
├── dev/
│ ├── terragrunt.hcl
│ ├── networking/
│ │ └── terragrunt.hcl
│ ├── database/
│ │ └── terragrunt.hcl
│ ├── kubernetes/
│ │ └── terragrunt.hcl
│ └── ...
├── staging/
│ ├── terragrunt.hcl
│ ├── networking/
│ │ └── terragrunt.hcl
│ ├── database/
│ │ └── terragrunt.hcl
│ └── ...
└── prod/
├── terragrunt.hcl
├── networking/
│ └── terragrunt.hcl
├── database/
│ └── terragrunt.hcl
└── ...
При работе с такой структурой все красиво, удобно и замечательно происходит кроме одной вещи.
Неиспользование кеша провайдеров.
При запуске
terragrunt plan в каждой из директорий по сути качает в эту директорию и провайдер и копию модуля.При запуске
terragrunt run-all и вовсе может занять десятки минут и сожрать много места на вашем диске( у меня однажды было порядка 200 гигабайт).На помощь нам приходит простая переменная.
export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"
mkdir -p $HOME/.terraform.d/plugin-cache
У меня это просто в башрс лежит
>cat ~/.bashrc |grep -i terra
export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"
В этом случае у нас идёт пере использование бинарного файла.
В кратких тезисах это работает внутри:
- в директории
~/.terraform.d/plugin-cache хранятся только бинарные файлы провайдеров- в
.terragrunt-cache хранится рабочая копия нашего кода (модулей Terraform)- "тяжелые" бинари в
.terragrunt-cache имеют симлинк в ~/.terraform.d/plugin-cacheПример
environments/dev/networking/
├── terragrunt.hcl
└── .terragrunt-cache/
└── AbCdEfGh12345/
└── XyZaBcDe67890/ # хеш-директория
├── main.tf # копия нашего модуля терраформа
├── variables.tf
├── outputs.tf
├── .terraform/
│ └── providers/
│ └── registry.terraform.io/
│ └── hashicorp/
│ └── aws/
│ └── 4.67.0/
│ └── linux_amd64 -> ~/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.67.0/linux_amd64 # симлинк на провайдер в директории с кешем
└── ...
Насколько мне известно нельзя полностью перетащить файлы модуля терраформа к бинарям, так как
- разные модули могут требовать разные версии одного и того же кода
- при параллельном выполнении, например
terragrunt run-all нужны изолированные рабочие каталогиИспользование этой переменной нам дадут:
- многократное снижение утилизации диска по размеру
- быстрый старт при первом клонировании репозитории и запуска террагранта
* Эта переменная НЕ избавит вас полностью от создания директории
.terragrunt-cache/ ибо это невозможно насколько мне известно.** Так же рекомендую добавить эту директорию в gitignore, для работа гита она не нужна.
>cat .gitignore |grep -i terra
.terragrunt-cache/
#terragrunt #terraform
🔥4👍3
Slack приуныл по всему миру.Алёрты не приходят(во всяком случае ко мне не все).
TODO: продублировать критикал алёрты через https://slack-status.com/
👀1
"Busy busy busy busy, need a vacation"
Чертовски обожаю эту фразу из фильма Константин 2005 года
https://youtu.be/xoD44rohrtU?si=YFBoQT1OATUEP2z-&t=103
Эта фраза и выражение его лица описывает моё состояние, когда считаю чего у нас по тратам.
Как говорит моя супруга - не важно сколько ты зарабатываешь, важно понимать, сколько ты тратишь, девопс херов 🤣 .
Каждые 6 месяцев я провожу ревизию "а куда уходят деньги".
Сперва я хотел написать, что 2024 и 2025 были самыми затратными годами - эпоха ИИ, эра автоматизации и век подписок, но потом поднял записи за 2019-2021, когда я с ноги вкатывался в айти и убивал тонны денег на курсы и книги, там тоже траты невероятно огромные.
Отус, Скиллфактори и Слёрм выпивал все наши семейные деньги с кредитки подчистую.
Итак 2025 год:
- $477 в год - https://learning.oreilly.com/
Самый лучший сборник книг, курсов и планов развития
Например этот курс самый лучший курс в мире про линукс
https://learning.oreilly.com/course/red-hat-certified/9780137931521/
- $218 в год - https://account.jetbrains.com/ All Products Pack
Пользуюсь 6 софтинами(datagrip my love, idea, goland, dataspell, pycharm и writerside)из всего пака, остальные не зашли.
- $216 в год - https://claude.ai// PRO
ИИ номер два
- $300 в год https://grok.com/ SUPERGROK
ИИ номер ноль
- около $300-350 в год уходит на курсы с разных источников
Это не подписка, но в среднем так и выходит в год.
Например в августе 2024 года приобрёл прекрасный пак ALL THE THINGS на https://learn.cantrill.io/ за $200. Прошёл 35 часов пока.
Или в январе 2024 оплатил $89 за год подписки, качал себе навык https://www.educative.io/courses/grokking-the-system-design-interview .
Прошёл весь, правда не понял половины, придётся пересматривать.
- $99 в год MS office family 365 (5 юзеров из 6 используется)
Лучший софт для офиса, великолепное решение для облачного хранилища.
5 человек получают по 1терабайту с очень отличной скоростью. То есть каждому и пакет офис и каждому по 1 терабайту.
Выгодно всем, но плачу один я🤣
* когда платил в рублях до 2021 было вообще копейки, практически 4000 рублей в год, покупал на яндекс маркете.
- $40 в год на https://medium.com/
Вот сейчас пишу это и понимаю, что надо вырубить нафиг.
- 2600 рублей в год https://music.yandex.ru/home family на 4 человека
музыка русских исполнителей (не всё есть в спотифай)
- $20 в месяц https://www.perplexity.ai/
ИИ номер один
- $10 в месяц на дешёвые VPS
под VPN в разные направления. Этот мир стал не так прост без VPN.
- около $5-50 в месяц на работу с https://openai.com
Но тут скоро уже не буду платить, наигрался, брал для локальных игр с текстовыми моделями
- 360 рублей в месяц на VoIP в/из России с личным московским номеров https://www.telphin.ru/
увы, мой отец очень не молод и не смог в смартфоны, с его кнопочного можно звонить только на обычные номера, никаких вайбер/телеграм/ватсап
- ~$25-45 в месяц https://cloud.linode.com/
два моих пет-проекта, которые раньше приносили денег, а сейчас не приносят и я всё ещё надеюсь, что стрельнёт и всё плачу :(
- 30 евро в месяц - интернет 500/500
- 279 рублей в месяц esim RU
- 3 евро в месяц esim RS
- 360 рублей в месяц esim UZ
- $1.7 https://www.spotify.com/
не вся музыка есть на Яндекс музыке
- 3,5 евро в месяц на приложение wolt+
Доставка еды и товаров из магазинов. За счёт бесплатной доставки, частых заказов и промоцен - выгодно.
- 0.9-9 евро в месяц на https://www.amazon.de/amazonprime
Ну тут тоже из-за доставки быстрый/бесплатной/без обязательного минимума. Цена плавающая - купоны, скидки, спецпредложения.
- $15 в месяц https://codeium.com/
топовый ИИ IDE. Но я их часто меняю, был copilot+vscode, потом Cursor, теперь этот. Но в целом они вроде все в среднем так стоят.
Может через полгода переключусь на что-то другое.
Чертовски обожаю эту фразу из фильма Константин 2005 года
https://youtu.be/xoD44rohrtU?si=YFBoQT1OATUEP2z-&t=103
Эта фраза и выражение его лица описывает моё состояние, когда считаю чего у нас по тратам.
Как говорит моя супруга - не важно сколько ты зарабатываешь, важно понимать, сколько ты тратишь
Каждые 6 месяцев я провожу ревизию "а куда уходят деньги".
Сперва я хотел написать, что 2024 и 2025 были самыми затратными годами - эпоха ИИ, эра автоматизации и век подписок, но потом поднял записи за 2019-2021, когда я с ноги вкатывался в айти и убивал тонны денег на курсы и книги, там тоже траты невероятно огромные.
Отус, Скиллфактори и Слёрм выпивал все наши семейные деньги с кредитки подчистую.
Итак 2025 год:
- $477 в год - https://learning.oreilly.com/
Самый лучший сборник книг, курсов и планов развития
Например этот курс самый лучший курс в мире про линукс
https://learning.oreilly.com/course/red-hat-certified/9780137931521/
- $218 в год - https://account.jetbrains.com/ All Products Pack
Пользуюсь 6 софтинами(datagrip my love, idea, goland, dataspell, pycharm и writerside)из всего пака, остальные не зашли.
- $216 в год - https://claude.ai// PRO
ИИ номер два
- $300 в год https://grok.com/ SUPERGROK
ИИ номер ноль
- около $300-350 в год уходит на курсы с разных источников
Это не подписка, но в среднем так и выходит в год.
Например в августе 2024 года приобрёл прекрасный пак ALL THE THINGS на https://learn.cantrill.io/ за $200. Прошёл 35 часов пока.
Или в январе 2024 оплатил $89 за год подписки, качал себе навык https://www.educative.io/courses/grokking-the-system-design-interview .
Прошёл весь, правда не понял половины, придётся пересматривать.
- $99 в год MS office family 365 (5 юзеров из 6 используется)
Лучший софт для офиса, великолепное решение для облачного хранилища.
5 человек получают по 1терабайту с очень отличной скоростью. То есть каждому и пакет офис и каждому по 1 терабайту.
Выгодно всем, но плачу один я
* когда платил в рублях до 2021 было вообще копейки, практически 4000 рублей в год, покупал на яндекс маркете.
- $40 в год на https://medium.com/
Вот сейчас пишу это и понимаю, что надо вырубить нафиг.
- 2600 рублей в год https://music.yandex.ru/home family на 4 человека
музыка русских исполнителей (не всё есть в спотифай)
- $20 в месяц https://www.perplexity.ai/
ИИ номер один
- $10 в месяц на дешёвые VPS
под VPN в разные направления. Этот мир стал не так прост без VPN.
- около $5-50 в месяц на работу с https://openai.com
Но тут скоро уже не буду платить, наигрался, брал для локальных игр с текстовыми моделями
- 360 рублей в месяц на VoIP в/из России с личным московским номеров https://www.telphin.ru/
увы, мой отец очень не молод и не смог в смартфоны, с его кнопочного можно звонить только на обычные номера, никаких вайбер/телеграм/ватсап
- ~$25-45 в месяц https://cloud.linode.com/
два моих пет-проекта, которые раньше приносили денег, а сейчас не приносят и я всё ещё надеюсь, что стрельнёт и всё плачу :(
- 30 евро в месяц - интернет 500/500
- 279 рублей в месяц esim RU
- 3 евро в месяц esim RS
- 360 рублей в месяц esim UZ
- $1.7 https://www.spotify.com/
не вся музыка есть на Яндекс музыке
- 3,5 евро в месяц на приложение wolt+
Доставка еды и товаров из магазинов. За счёт бесплатной доставки, частых заказов и промоцен - выгодно.
- 0.9-9 евро в месяц на https://www.amazon.de/amazonprime
Ну тут тоже из-за доставки быстрый/бесплатной/без обязательного минимума. Цена плавающая - купоны, скидки, спецпредложения.
- $15 в месяц https://codeium.com/
топовый ИИ IDE. Но я их часто меняю, был copilot+vscode, потом Cursor, теперь этот. Но в целом они вроде все в среднем так стоят.
Может через полгода переключусь на что-то другое.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥1
- 20.000 рублей в месяц каждому родителю, итого 80.000 рублей в месяц(+тесть и тёща).
Помощь пенсионерам. Сперва нас на ноги ставили и очень сильно помогали, теперь пора и нам.
Начинал с 10.000, как понял, что тяну такую помощь, постепенно поднял до 15к и в 2025 году уже могу тянуть такую невероятно огромную сумму. Сумма невероятно большая, но моя любовь больше.
Все траты указаны с учётом всех скидок, купонов, непрерывного продления(jetbtains) и низких региональных цен по карте оплаты.
Траты на коммуналку, еду, такси, игры в стим, разовые походы в бассейн, футболки, общественный транспорт и прочее не считаю, так как это у всех разное и часть трат нерегулярные.
P.S. на фотке - я
Помощь пенсионерам. Сперва нас на ноги ставили и очень сильно помогали, теперь пора и нам.
Начинал с 10.000, как понял, что тяну такую помощь, постепенно поднял до 15к и в 2025 году уже могу тянуть такую невероятно огромную сумму. Сумма невероятно большая, но моя любовь больше.
Все траты указаны с учётом всех скидок, купонов, непрерывного продления(jetbtains) и низких региональных цен по карте оплаты.
Траты на коммуналку, еду, такси, игры в стим, разовые походы в бассейн, футболки, общественный транспорт и прочее не считаю, так как это у всех разное и часть трат нерегулярные.
P.S. на фотке - я
😁5❤3
Иногда я сам горю от своей тупости детских ошибок.
Ну как вообще так можно было сделать?
Пилил дашборд графаны, в котором помимо привычных данных(CPU usage, memory, workers, queries etc) отображается ещё и данные напрямую из trino.
Прям внутри графаны SQL запрос.
И он строит таблицу с временем, длительности запросов, статусом и квери(обрезано на скрине).
Таким образом можно отслеживать подвисшие запросы или неоптимизированные (например join 1000*1000*1000 от мастеров fatality-гениалити).
Потом это трансформирую графаной и вывожу.
Получил алерт - побежал в графану - увидел детальную инфу.
Как можно допускать такие ошибки?
Что такое 1.83 минуты? Что такое 2.95 минут?
Как это интерпретировать?
Стыдоба, инженер-олень🤦♂️.
#trino #grafana
Ну как вообще так можно было сделать?
Пилил дашборд графаны, в котором помимо привычных данных(CPU usage, memory, workers, queries etc) отображается ещё и данные напрямую из trino.
Прям внутри графаны SQL запрос.
SELECT
date_format(started, '%H:%i:%s') as time,
date_diff('second', started, last_heartbeat) as duration_seconds,
state,
query
FROM system.runtime.queries
WHERE (state = 'RUNNING' AND date_diff('second', started, last_heartbeat) > 10)
OR (state = 'FINISHED' AND date_diff('second', started, last_heartbeat) > 10)
ORDER BY duration_seconds DESC
LIMIT 15
И он строит таблицу с временем, длительности запросов, статусом и квери(обрезано на скрине).
Таким образом можно отслеживать подвисшие запросы или неоптимизированные (например join 1000*1000*1000 от мастеров fatality-гениалити).
Потом это трансформирую графаной и вывожу.
Получил алерт - побежал в графану - увидел детальную инфу.
Как можно допускать такие ошибки?
Что такое 1.83 минуты? Что такое 2.95 минут?
Как это интерпретировать?
Стыдоба, инженер-олень🤦♂️.
#trino #grafana
😁2
#бытовое #всратость
История в нескольких частях.
Полосочки.
Сломался у меня телефон. Сперва я думал это я сел на экран, но оказалось это проблема всех гугл пикселей выше 8 серии.
Полоска на экране, цвета зелёные, чёрные, глаза печальные.
Аригато, что за 800+ евро такие охрененные девайсы пилят.
Какое-то время то работало, то нет, а потом и вовсе умерло.
Как только почти умерло я тут же во все(!) сайты/утилиты заново сделал логаут, логин с MFA(MS authenticator) и радостно побежал в сервис. Ну типа если во время ремонта что-то случится, а у меня новые сессии.
Сервисмод.
В сервисе смотрели на меня как на умалишённого деда, в запале желающего и телефон починить, но и не отдавать врагам свои данные банк клиентов, пять десятков мультифакторных авторизаций и драгоценную переписку с братом и общие мемы про его лысину.
Оказалось всё придумали до нас, есть такая штука, во всяком случае в андроиде - сервис мод.
Я из деревни, мне можно было такое не знать.
Включаешь режим, вводишь пин-код, телефон перезагружается - в нем только дефолт приложения и доступа к моим данным типа нет. Возврат аналогично через пин и рестарт.
В сервисе у меня забрали телефон, я вышел из здания и остался без рук.
Как клоун с Bluetooth наушниками на голове, которые никуда не подключены уже 🤣 ,
Инвалид.
Ровно тогда, когда я сдал телефон я вспомнил, что мне надо порешать несколько дел в городе.
Привыкший в расписанию общественного транспорта в приложении, вызову такси и картам с расположениями ключевых мест я оказался словно инвалид посреди города.
Меня спас дед, который проснулся во мне.
Нет приложения такси? Ну так куча вариантов:
- иди на остановку таксистов и там садись в свободное за наличные
- поймай на руку
- иди к ближайшему отелю, к ним часто такси подъезжает и 99%, что после высадки он будет свободным
Нет расписания автобусов?
- у нас карты на остановке отменили? Со схемами и маршрутами.
- расписание на останове тоже отменили?
Там хоть и написяли маркером поганая молодёжь, но что-то да можно разобрать.
Штаны.
Конечно же я наложил в штаны со всем этим планом.
Ровно через 0.0001ms после того, как я вернулся домой, у меня слетели 95% авторизаций во все рабочие порталы: GitLab, office 365(в том числе и личный), Teams(ну да и хер с ним на самом деле), куберы, ажур, конфлюенс с джирой и вообще я мог только в слаке трындеть. В общем не продуктивный вышел день.
Впрочем непродуктивный вышел день и последующий, ведь вовремя телефоны чинят только в сказках и Москве, ровно к 10 утра я его не смог забрать из сервиса.
Детокс.
Всё это время, без телефона, я ощущал себя как будто в новом непривычном мире.
Удача обошла меня стороной, я даже в телеграм зайти не смог, провайдер сменил IP и даже почта и телеграм захотели получить аппрув, а его я предоставить не мог.
Даааа, угадайте что со стимом и играми. Даааа, всё так.
Чем же я занимался? - ходил нюхал воздух, трогал траву, смотрел в стену, гладил кота.
Благо дома amazon kindle меня не подвёл и я прекрасно перечитал за полтора вечера весь восхитительный цикл Пехова - Страж.
Увы, без мульти факторной авторизации мы подвергаем себя риску, но и без своевременных аппрувов я буквально остался без рук, ни для личных задач, ни для работы.
Мы слишком сильно привязаны к нашим смартфонам и это не только тиктоки, да инстаграммы.
Без техники мы возвращаемся во времена мезозоя.
Во мне хоть и проснулось брутальное воспитание союза, в котором нас учили ориентироваться на местности, читать карты истоять в очереди за сахаром разбираться с проблемами самостоятельно, но я ни в коем случае не желаю таких навыков всему современному поколению.
Мир крутой, зачем всё усложнять.
Если телефон с миллиардом приложений помогает жить, то почему нет.
Главное при этом не выходите из дома, а иначе заблудитесь🤣
История в нескольких частях.
Полосочки.
Сломался у меня телефон. Сперва я думал это я сел на экран, но оказалось это проблема всех гугл пикселей выше 8 серии.
Полоска на экране, цвета зелёные, чёрные, глаза печальные.
Аригато, что за 800+ евро такие охрененные девайсы пилят.
Какое-то время то работало, то нет, а потом и вовсе умерло.
Как только почти умерло я тут же во все(!) сайты/утилиты заново сделал логаут, логин с MFA(MS authenticator) и радостно побежал в сервис. Ну типа если во время ремонта что-то случится, а у меня новые сессии.
Сервисмод.
В сервисе смотрели на меня как на умалишённого деда, в запале желающего и телефон починить, но и не отдавать врагам свои данные банк клиентов, пять десятков мультифакторных авторизаций и драгоценную переписку с братом и общие мемы про его лысину.
Оказалось всё придумали до нас, есть такая штука, во всяком случае в андроиде - сервис мод.
Я из деревни, мне можно было такое не знать.
Включаешь режим, вводишь пин-код, телефон перезагружается - в нем только дефолт приложения и доступа к моим данным типа нет. Возврат аналогично через пин и рестарт.
В сервисе у меня забрали телефон, я вышел из здания и остался без рук.
Инвалид.
Ровно тогда, когда я сдал телефон я вспомнил, что мне надо порешать несколько дел в городе.
Привыкший в расписанию общественного транспорта в приложении, вызову такси и картам с расположениями ключевых мест я оказался словно инвалид посреди города.
Меня спас дед, который проснулся во мне.
Нет приложения такси? Ну так куча вариантов:
- иди на остановку таксистов и там садись в свободное за наличные
- поймай на руку
- иди к ближайшему отелю, к ним часто такси подъезжает и 99%, что после высадки он будет свободным
Нет расписания автобусов?
- у нас карты на остановке отменили? Со схемами и маршрутами.
- расписание на останове тоже отменили?
Там хоть и написяли маркером поганая молодёжь, но что-то да можно разобрать.
Штаны.
Конечно же я наложил в штаны со всем этим планом.
Ровно через 0.0001ms после того, как я вернулся домой, у меня слетели 95% авторизаций во все рабочие порталы: GitLab, office 365(в том числе и личный), Teams(ну да и хер с ним на самом деле), куберы, ажур, конфлюенс с джирой и вообще я мог только в слаке трындеть. В общем не продуктивный вышел день.
Впрочем непродуктивный вышел день и последующий, ведь вовремя телефоны чинят только в сказках и Москве, ровно к 10 утра я его не смог забрать из сервиса.
Детокс.
Всё это время, без телефона, я ощущал себя как будто в новом непривычном мире.
Удача обошла меня стороной, я даже в телеграм зайти не смог, провайдер сменил IP и даже почта и телеграм захотели получить аппрув, а его я предоставить не мог.
Даааа, угадайте что со стимом и играми. Даааа, всё так.
Чем же я занимался? - ходил нюхал воздух, трогал траву, смотрел в стену, гладил кота.
Благо дома amazon kindle меня не подвёл и я прекрасно перечитал за полтора вечера весь восхитительный цикл Пехова - Страж.
Увы, без мульти факторной авторизации мы подвергаем себя риску, но и без своевременных аппрувов я буквально остался без рук, ни для личных задач, ни для работы.
Мы слишком сильно привязаны к нашим смартфонам и это не только тиктоки, да инстаграммы.
Без техники мы возвращаемся во времена мезозоя.
Во мне хоть и проснулось брутальное воспитание союза, в котором нас учили ориентироваться на местности, читать карты и
Мир крутой, зачем всё усложнять.
Если телефон с миллиардом приложений помогает жить, то почему нет.
Главное при этом не выходите из дома, а иначе заблудитесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7✍4😁3🔥1
Алертменеджер.
Больше применимо к стеку VM (привет чату @VictoriaMetrics_ru1 ✌🏼)
Полезные ссылки, которыми часто пользуюсь.
1) https://prometheus.io/webtools/alerting/routing-tree-editor/
Проверка алёртов и рутов.
- вставил конфигурацию Алертменеджер (!!!БЕЗ КРЕДОВ РЕСИВЕРОВ!!!)
- он отрисовал дерево всех ресиверов
- вставил интересующий тебя лейбл для рутов с матч/матчерс
- понял в какой/какие ресиверы пойдет (или нет) твой Алерт по роуту
То есть прям визуально можно понять туда или не туда пойдёт алёрт.
Актуально при большом количестве ресиверов, при первом ресивере null и при большом количестве routes.
2) https://samber.github.io/awesome-prometheus-alerts/rules
Огромный список алёртов по многим областям - базы данных, кубернетис, ингрессы и так далее.
Актуально для тех, кто не знает с чего начать.
3) https://github.com/monitoring-mixins/website/tree/master/assets
Тоже самое, что и второе, но примеров заметно больше.
4) https://github.com/prometheus/alertmanager
В самом алёртменеджере есть утилита
Актуально не для всех флоу. Скорее всего не будет работать для терраформа с хелмом и гитопса.
5) https://promlabs.com/promql-cheat-sheet/
Куча трюков и подсказок. Обычный cheat sheet.
Часто отсюда ворую, когда идеи заканчиваются.
6) https://github.com/prymitive/karma
Для тех, кого бесит ущербный интерфейс алёртменеджера родом из 2001 года с птушным дизайном клоунов дизайнеров.
Я на самом деле поел два не критикал бага, прям на 100% не рекомендовал бы, но визуально он, конечно же, красив, чертяга.
7) https://chaostoolkit.org/
Хаос-фронтенд-манки тулза
Напрямую не связан с алертменеджером, но я при его помощи тестирую все алёрты, разламывая к херам кластера тестовые.
Ок, ссылками разобрались.
Типичные траблшутинги.
1) "а чего у меня сообщение не уходит в телеграм с алёртом"
- есть ли из кластера доступ до апи телеги? (от ноды до интернетов телеги)
- правильный ли токен? (можно и локально)
нечто типа
- создаётся ли сам алёрт на алёрт менеджере (локально, попросите ИИ сгенерить от вашего алерта вам джейсон для вас по аналогии). У алертменеджера 2 версии апи, смотрите какая версия у вас и под неё спрашивайте нейронку запрос.
- если всё выше проверено, всё ок, то смотреть нет ли у тебявшивого оператора алёртменеджера?
Если есть, то уходи от идеи нескольких и пихай всё в один.
Он при мерже какую-то ересь делает и оно перестаёт работать.
На момент марта 2025 года я строго НЕ рекомендую использовать несколько их.
Только один. пилите всё в одном.
Чекаем, если больше 2, то у меня плохие новости(на момент написания материала)
- проверяем руты - в тот ли ресивер(ы) идёт ваш алёрт?
Первая ссылка с деревом, вставляем конфиг, лейблы и чекаем.
- чего в логах алёртменеджера?
- ну и сам конфиг ресивера хоть верный?
https://prometheus.io/docs/alerting/latest/configuration/#telegram_config
#alertmanager
Больше применимо к стеку VM (привет чату @VictoriaMetrics_ru1 ✌🏼)
Полезные ссылки, которыми часто пользуюсь.
1) https://prometheus.io/webtools/alerting/routing-tree-editor/
Проверка алёртов и рутов.
- вставил конфигурацию Алертменеджер (!!!БЕЗ КРЕДОВ РЕСИВЕРОВ!!!)
- он отрисовал дерево всех ресиверов
- вставил интересующий тебя лейбл для рутов с матч/матчерс
- понял в какой/какие ресиверы пойдет (или нет) твой Алерт по роуту
То есть прям визуально можно понять туда или не туда пойдёт алёрт.
Актуально при большом количестве ресиверов, при первом ресивере null и при большом количестве routes.
2) https://samber.github.io/awesome-prometheus-alerts/rules
Огромный список алёртов по многим областям - базы данных, кубернетис, ингрессы и так далее.
Актуально для тех, кто не знает с чего начать.
3) https://github.com/monitoring-mixins/website/tree/master/assets
Тоже самое, что и второе, но примеров заметно больше.
4) https://github.com/prometheus/alertmanager
В самом алёртменеджере есть утилита
amtool, в CICD можно запилить валидацию конфигурации.Актуально не для всех флоу. Скорее всего не будет работать для терраформа с хелмом и гитопса.
5) https://promlabs.com/promql-cheat-sheet/
Куча трюков и подсказок. Обычный cheat sheet.
Часто отсюда ворую, когда идеи заканчиваются.
6) https://github.com/prymitive/karma
Для тех, кого бесит ущербный интерфейс алёртменеджера родом из 2001 года с птушным дизайном клоунов дизайнеров.
Я на самом деле поел два не критикал бага, прям на 100% не рекомендовал бы, но визуально он, конечно же, красив, чертяга.
7) https://chaostoolkit.org/
Хаос-
Напрямую не связан с алертменеджером, но я при его помощи тестирую все алёрты, разламывая к херам кластера тестовые.
Ок, ссылками разобрались.
Типичные траблшутинги.
1) "а чего у меня сообщение не уходит в телеграм с алёртом"
- есть ли из кластера доступ до апи телеги? (от ноды до интернетов телеги)
kubectl run telegram-test --image=curlimages/curl --restart=Never --rm -i --tty -- \
curl --max-time 10 --connect-timeout 10 https://api.telegram.org
- правильный ли токен? (можно и локально)
нечто типа
curl -s "https://api.telegram.org/bot<ваш_токен>/getMe"
- создаётся ли сам алёрт на алёрт менеджере (локально, попросите ИИ сгенерить от вашего алерта вам джейсон для вас по аналогии). У алертменеджера 2 версии апи, смотрите какая версия у вас и под неё спрашивайте нейронку запрос.
curl -X POST https://*********/api/v1/alerts \
-H "Content-Type: application/json" \
-d '[
{
"labels": {
...
},
"annotations": {
...
},
"startsAt": "'"$(date -u +"%Y-%m-%dT%H:%M:%SZ")"'",
"endsAt": "'"$(date -u -d "+3 minutes" +"%Y-%m-%dT%H:%M:%SZ")"'"
}
]'
- если всё выше проверено, всё ок, то смотреть нет ли у тебя
Если есть, то уходи от идеи нескольких и пихай всё в один.
Он при мерже какую-то ересь делает и оно перестаёт работать.
На момент марта 2025 года я строго НЕ рекомендую использовать несколько их.
Только один. пилите всё в одном.
Чекаем, если больше 2, то у меня плохие новости(на момент написания материала)
kubectl get VMAlertmanagerConfig -A |wc -l
- проверяем руты - в тот ли ресивер(ы) идёт ваш алёрт?
Первая ссылка с деревом, вставляем конфиг, лейблы и чекаем.
- чего в логах алёртменеджера?
- ну и сам конфиг ресивера хоть верный?
https://prometheus.io/docs/alerting/latest/configuration/#telegram_config
#alertmanager
✍5🔥4👍1
2) "как дебажить vmrule?"
Например чтобы отправить собственную метрику для проверки каких-то кондишнов
- коннектимся к vmagent
- отправляем придуманное событие в vmagent
- проверяем что этот алёрт ок в виктории метрикс, например нам важно какой северити у него стал/есть (этот кусок прям в Prometheus/VM/Grafana explore вводить)
- не забываем потушить алёрт, иначе он будет висеть вечно
Удаление нужно в том случае, когда вы не хотите, чтобы это попало в алёртменеджер. Вам же просто протестировать
3) "как проверить рулесы алертменеджера"
отправить курл запрос типа
#alertmanager
Например чтобы отправить собственную метрику для проверки каких-то кондишнов
- коннектимся к vmagent
>k port-forward svc/vmagent-tratata-prod-aks-us-1 8429
- отправляем придуманное событие в vmagent
curl -X POST http://localhost:8429/api/v1/import/prometheus \
-d 'kube_pod_status_phase{phase="Pending",exported_namespace="test-namespace",pod="logical-backup-pgsql-test-pod",cluster="test-prod-cluster"} 1'
- проверяем что этот алёрт ок в виктории метрикс, например нам важно какой северити у него стал/есть (этот кусок прям в Prometheus/VM/Grafana explore вводить)
ALERTS{alertname="KubernetesPodNotHealthy", pod="logical-backup-pgsql-test-pod"}- не забываем потушить алёрт, иначе он будет висеть вечно
curl -X POST http://localhost:8429/api/v1/import/prometheus \
-d 'kube_pod_status_phase{phase="Pending",exported_namespace="test-namespace",pod="logical-backup-pgsql-test-pod",cluster="test-prod-cluster"} 0'
Удаление нужно в том случае, когда вы не хотите, чтобы это попало в алёртменеджер. Вам же просто протестировать
vmrules.❕vmalert происходит ДО попадания в alertmanager.3) "как проверить рулесы алертменеджера"
отправить курл запрос типа
curl -X POST https://alertmanager.domain.com/api/v1/alerts \
-H "Content-Type: application/json" \
-d '[
{
"labels": {
"alertname": "KubernetesPodNotHealthy",
"cluster": "test-prod-cluster",
"exported_namespace": "test-namespace",
"pod": "logical-backup-pgsql-test-pod",
"phase": "Pending",
"emoji": "🔥",
"incident_type": "outage"
},
"annotations": {
"summary": "POD'"'"'s state is `Pending` for `test-prod-cluster`/`test-namespace`/`logical-backup-pgsql-test-pod`",
"description": "Pod test-namespace/logical-backup-pgsql-test-pod has been in a non-running state for longer than 15 minutes.\n VALUE = 1\n LABELS = map[cluster:test-prod-cluster exported_namespace:test-namespace phase:Pending pod:logical-backup-pgsql-test-pod]"
},
"startsAt": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'",
"endsAt": "'$(date -u -d "+3 minutes" +"%Y-%m-%dT%H:%M:%SZ")'"
}
]'
#alertmanager
✍4
Bottlerocket, storage.
Ну а куда без боттлрокета.
Допустим вы решили перейти на боттлрокет после моих постов - https://xn--r1a.website/makebreakreflect/35
Сразу споткнувшись про пустой дефолтный конфиг кублета читаете и тут
https://xn--r1a.website/makebreakreflect/38
Готово.
У вас и кластер AWS EKS и нод группа(ы) и лаунчтемплейт.
Всё работает, всё круто, но спустя время вы замечаете, что у вас участились алёрты
Так же в ивентах у вас нечто типа
"Какогох*ра рожна" думаете вы, ведь у меня диск как был 200 гигабайт, так и остался.
Смотрите свой код, видите там нечто типа
"ну да, двести гигов" говорите вы вслух самому себе и идёте проверять терраформ/террагрант план.
Всё ок. Никаких
Лезете в кубер, смотрите а чо там рили.
Внезапно там ну вообще ни 200 гигов, там 20.
Начинаете перепроверять код, лаунчемплейт, ласт вершн и issue github.
А нет ничего.
У вас желаемое 200 гигов, а реально видно 20.
И тут подстава, откуда вы не ждали.
У
Чтобы ноде под поды выделить больше места дефолта с 20 гигами, вам надо выдать отдельный маунт на побольше.
Терраформ план, терраформ апплай, проверяем
Отлично, теперь под эфемерку у нас 200 гигов, а не дефолтные 20(или 30, я не помню если честно) гигабайт.
Разуемся, алёрты пропадают, эфемерки всем хватает, кластер снова сладкий как яблочки с огорода у бабушки.
Кому интересно могут почитать на официальном сайте детальнейшее описание причин, но там на самом деле скукота.
#aws #eks #bottlerocket
Ну а куда без боттлрокета.
Допустим вы решили перейти на боттлрокет после моих постов - https://xn--r1a.website/makebreakreflect/35
Сразу споткнувшись про пустой дефолтный конфиг кублета читаете и тут
https://xn--r1a.website/makebreakreflect/38
Готово.
У вас и кластер AWS EKS и нод группа(ы) и лаунчтемплейт.
Всё работает, всё круто, но спустя время вы замечаете, что у вас участились алёрты
DiskPressure.Так же в ивентах у вас нечто типа
The node had condition: [DiskPressure].
The node was low on resource: ephemeral-storage. Threshold quantity: 4281126156, available: 3438556Ki
"Какого
Смотрите свой код, видите там нечто типа
resource "aws_launch_template" "node-launch-template" {
...
block_device_mappings {
device_name = "/dev/xvda"
ebs {
volume_size = 200
volume_type = "gp3"
}
}
..."ну да, двести гигов" говорите вы вслух самому себе и идёте проверять терраформ/террагрант план.
Всё ок. Никаких
lifecycle {
ignore_changes Лезете в кубер, смотрите а чо там рили.
kubectl get nodes -o yaml | grep -i -A6 ephemeral-storage
Внезапно там ну вообще ни 200 гигов, там 20.
Начинаете перепроверять код, лаунчемплейт, ласт вершн и issue github.
А нет ничего.
У вас желаемое 200 гигов, а реально видно 20.
И тут подстава, откуда вы не ждали.
У
bottlerocket не совсем типичный подход к монтированию томов.Чтобы ноде под поды выделить больше места дефолта с 20 гигами, вам надо выдать отдельный маунт на побольше.
resource "aws_launch_template" "node-launch-template" {
...
# !!! вот тут много не надо, это для самой ноды, операционка, можно хоть 10
block_device_mappings {
device_name = "/dev/xvda"
ebs {
volume_size = 20
volume_type = "gp3"
}
}
# !!! вот это добавляем, для POD-ов
block_device_mappings {
device_name = "/dev/xvdb"
ebs {
volume_size = 200
volume_type = "gp3"
}
}Терраформ план, терраформ апплай, проверяем
kubectl get nodes -o yaml | grep -i -A6 ephemeral-storage
Отлично, теперь под эфемерку у нас 200 гигов, а не дефолтные 20(или 30, я не помню если честно) гигабайт.
Разуемся, алёрты пропадают, эфемерки всем хватает, кластер снова сладкий как яблочки с огорода у бабушки.
Кому интересно могут почитать на официальном сайте детальнейшее описание причин, но там на самом деле скукота.
#aws #eks #bottlerocket
👍6
#начинающим #docker
Контекст(context).
Мне понадобилось некоторое время на этапе моего обучения несколько лет назад, чтобы поесть всякого, чтобы осознать существование контекста.
Основной пример буду пояснять на примере Docker.
Например, когда вы пишете😈 .
Допустим мы собираем имадж так:
Вот точка это и есть контекст. Точка это наша директория нашего проекта.
Что же нам надо знать о контексте?
- нельзя выйти за пределы контекста
Например у нас есть такая структура
Находясь в директории
Так как shared находится выше по иерархии и не входит в контекст текущей директории "."
- докер(и другие известные мне утилиты) сканирует все файлы контекста( то есть в текущей директории)
То есть условно если у вас есть 50000 файлов по мегабайту или один файл 50 гигабайт в гит репозитории в контексте, то это замедлит сборку
Даже если мы НЕ используем
Не думаю, что этот случай для всех, с этим можно столкнутся при не совсем корректных воркфлоу и при монолит приложениях.
Например у вас npm build идёт ВНЕ сборки докера, а потом вы копируете файлы(я видел и такое).
Проблема с переполнением контекста решается через
В этом файле мы указываем те директории/файлы, которые НЕ должны попасть в контекст, по аналогии с
- контекст в
Контекст доступен для всех этапов сборки, однако при использовании
Концепция контекста применима не только к Docker, но и к другим инструментам, например, к Helm - менеджеру пакетов для кубера.
Некоторые инженеры сталкиваются с ситуацией, когда во время деплоя секрет Helm не удаётся сохранить в ETCD, потому что его размер превышает ограничение в 1 МБ(ограничение ETCD).
Чаще всего это происходит из-за того, что в директорию случайно попадают ненужные файлы: логи, бинарники, архивы или другие "левые" данные. Да, прям внутри кубера в секрете хелма по релизу помимо манифестов yaml валяются бинари/файлы, которые мы по незнанию туда засунули.
Чтобы избежать таких проблем, стоит использовать файл
Контекст - это не просто техническая деталь, а инструмент, который нужно понимать и оптимизировать.
Используйте
Контекст(context).
Мне понадобилось некоторое время на этапе моего обучения несколько лет назад, чтобы поесть всякого, чтобы осознать существование контекста.
Основной пример буду пояснять на примере Docker.
Контекст сборки - это архив (по сути tar-файл), который Docker создаёт из указанной директории и отправляет демону для обработки. Например, когда вы пишете
docker build -t image ., Docker упаковывает все файлы из текущей директории (.) и передаёт их демонуДопустим мы собираем имадж так:
docker build -t image .
Вот точка это и есть контекст. Точка это наша директория нашего проекта.
Что же нам надо знать о контексте?
- нельзя выйти за пределы контекста
Например у нас есть такая структура
/home/user/projects/
├── my_project/
│ ├── Dockerfile
│ ├── app.py
└── shared/
└── library.so
Находясь в директории
my_project мы не сможем собрать имадж типа такогоFROM ubuntu:20.04
COPY ../shared/library.so /usr/lib/
Так как shared находится выше по иерархии и не входит в контекст текущей директории "."
- докер(и другие известные мне утилиты) сканирует все файлы контекста( то есть в текущей директории)
То есть условно если у вас есть 50000 файлов по мегабайту или один файл 50 гигабайт в гит репозитории в контексте, то это замедлит сборку
Даже если мы НЕ используем
COPY . . , докер всё равно сканирует эти файлы(точнее Docker демон сканирует и упаковывает файлы для передачи) и мы собираем дольше по времени.Не думаю, что этот случай для всех, с этим можно столкнутся при не совсем корректных воркфлоу и при монолит приложениях.
Например у вас npm build идёт ВНЕ сборки докера, а потом вы копируете файлы(я видел и такое).
Проблема с переполнением контекста решается через
.dockerignore файл.В этом файле мы указываем те директории/файлы, которые НЕ должны попасть в контекст, по аналогии с
.gitignore.- контекст в
multi-stage билдахКонтекст доступен для всех этапов сборки, однако при использовании
COPY --from=build копирование идет из предыдущего этапа, а не из исходного контекста.Концепция контекста применима не только к Docker, но и к другим инструментам, например, к Helm - менеджеру пакетов для кубера.
Некоторые инженеры сталкиваются с ситуацией, когда во время деплоя секрет Helm не удаётся сохранить в ETCD, потому что его размер превышает ограничение в 1 МБ(ограничение ETCD).
Чаще всего это происходит из-за того, что в директорию случайно попадают ненужные файлы: логи, бинарники, архивы или другие "левые" данные. Да, прям внутри кубера в секрете хелма по релизу помимо манифестов yaml валяются бинари/файлы, которые мы по незнанию туда засунули.
Чтобы избежать таких проблем, стоит использовать файл
.helmignore, который позволяет исключить лишние файлы из контекста чарта - примерно так же, как .dockerignore помогает в Docker.Контекст - это не просто техническая деталь, а инструмент, который нужно понимать и оптимизировать.
Используйте
.dockerignore/.helmignore и следите за содержимым директорий, чтобы сборка была быстрой и эффективной.Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥7💯2
#aws #eks #sqs #CostOptimization
Материал уровня middle.
Снова про экономию.
У нас есть AWS SQS.
В него прилетает миллион вебхуков с полезным и важным payload.
Бывают пики, бывают нет.
У нас есть AWS EKS и приложение в POD-e, который вычитывает SQS, процессит и всё ок.
Нам надо настроить масштабирование не за счёт CPU/memory usage, а за счёт количества сообщений.
В этом нам помогает KEDA. Опустим этапы установки/настройки/прав и авторизации.
У нас есть готовый манифест
Всё работает, всё скейлится, всё ок.
В HPA некрасиво выглядят цифры, хочется видеть точное количество мессаджем. Добавляем
И теперь в
Этого нам мало, нужна точная подстройка.
Читаем дальше доку, у нас есть адвансед настройки.
Теперь у нас всё динамически скейлится, прописаны все триггеры, трешхолды.
Всё отлично и бизнес ликует(не вру, прям ликует, сильно помогло).
Однако меня, как рьяного и верного пса девопс церкви, напрягает, что в период высокой нагрузки всё упирается в максимум реплик. Да, можно поставить не 50, а 100, но я думаю, что настройка неверная.
Углубляемся дальше в доку(вру, я ничо не понял и просто спросил ребят-гуру-AWS-технологий в телеге) и вспоминаем про визибл/анвизибл настройки у sqs.
https://keda.sh/docs/2.14/scalers/aws-sqs/
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html
Окончательно пилим манифест.
Отлично. Теперь самая точная и потрясающая настройка.
Материал уровня middle.
Снова про экономию.
У нас есть AWS SQS.
В него прилетает миллион вебхуков с полезным и важным payload.
Бывают пики, бывают нет.
У нас есть AWS EKS и приложение в POD-e, который вычитывает SQS, процессит и всё ок.
Нам надо настроить масштабирование не за счёт CPU/memory usage, а за счёт количества сообщений.
В этом нам помогает KEDA. Опустим этапы установки/настройки/прав и авторизации.
У нас есть готовый манифест
scaledobject.---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
...
spec:
cooldownPeriod: 300
maxReplicaCount: 50
minReplicaCount: 2
pollingInterval: 30
scaleTargetRef:
name: application
triggers:
- authenticationRef:
name: keda-aws-credentials
metadata:
awsRegion: us-east-1
identityOwner: operator
queueLength: "500"
queueURL: https://sqs.us-east-1.amazonaws.com/123456789/sqsname
type: aws-sqs-queue
Всё работает, всё скейлится, всё ок.
В HPA некрасиво выглядят цифры, хочется видеть точное количество мессаджем. Добавляем
metricType---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
...
spec:
...
metricType: Value
И теперь в
kubectl get hpa blablabla видим точное количество мессаджей в TARGETS(а не системы счисления инопланетян).Этого нам мало, нужна точная подстройка.
Читаем дальше доку, у нас есть адвансед настройки.
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
...
spec:
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
policies:
- periodSeconds: 15
type: Pods
value: 1
stabilizationWindowSeconds: 300
scaleUp:
policies:
- periodSeconds: 15
type: Pods
value: 1
selectPolicy: Max
stabilizationWindowSeconds: 60
... (остальное так же)
Теперь у нас всё динамически скейлится, прописаны все триггеры, трешхолды.
Всё отлично и бизнес ликует(не вру, прям ликует, сильно помогло).
Однако меня, как рьяного и верного пса девопс церкви, напрягает, что в период высокой нагрузки всё упирается в максимум реплик. Да, можно поставить не 50, а 100, но я думаю, что настройка неверная.
Углубляемся дальше в доку(вру, я ничо не понял и просто спросил ребят-гуру-AWS-технологий в телеге) и вспоминаем про визибл/анвизибл настройки у sqs.
https://keda.sh/docs/2.14/scalers/aws-sqs/
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html
Окончательно пилим манифест.
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
...
spec:
advanced:
...(тут тоже самое)
metadata:
...
scaleOnInFlight: "false" << - - вот это вот важное нам
...
Отлично. Теперь самая точная и потрясающая настройка.
🔥5
#aws #eks #sqs #CostOptimization
Благодаря точной настройке мы неслабо экономим:
- во время нагрузки мы не скейлим так много реплик
- нет большого лишнего скейла реплик - нет и скейла нод кластера AWS EKS
- нет скейла нод - платим серьёзно меньше
Всего один параметр и в разы снижаем нагрузку и косты.
❕Прежде чем делать подобное, уточните у девелоперов и бизнеса - подойдёт ли это вам и продукту.
Не все процессинги можно переключить только на инфлайт режим.
Полный пример манифеста(код в телеге неудобно читать).
https://gist.github.com/kruchkov-alexandr/e6328137107e49c6a5e7c05c40851680
scaleOnInFlight - Indication of whether or not to include in-flight messages when calculating the number of SQS messages. (default: true, Optional)Благодаря точной настройке мы неслабо экономим:
- во время нагрузки мы не скейлим так много реплик
- нет большого лишнего скейла реплик - нет и скейла нод кластера AWS EKS
- нет скейла нод - платим серьёзно меньше
Всего один параметр и в разы снижаем нагрузку и косты.
❕Прежде чем делать подобное, уточните у девелоперов и бизнеса - подойдёт ли это вам и продукту.
Не все процессинги можно переключить только на инфлайт режим.
Полный пример манифеста(код в телеге неудобно читать).
https://gist.github.com/kruchkov-alexandr/e6328137107e49c6a5e7c05c40851680
👍8
#aws #opensearch
"Алекс, у нас какая-то штука, логи в OpenSearch недоступны. да просто белая страница крутится и всё. Да, мы помним, что ты давно говорил перейти на локи, но пока нет бюджета. Глянь, пожалуйста, что там может быть, да, прайс почасовой такой же."
Да блин, я так себе мастер с опенсёрче, на этом проекте он просто дефолтный.
Файлбит собирает с кубера с дефолт конфигом и пушит в опенсёрч.
У опенсёрча 2 инстанса в кластере на продакшне.
Ок, деньги не пахнут, а за спасибо супруге новую сумку не купить🤣
Заходим в веб - да, тормозит, белая страница по дискавери.
Но статус кластер - грин, всё ок по мнению амазона😂 .
Смотрим в дашборды графаны - видим 100% нагрузка CPU и она началась 15 числа (ага, можно поклянчить денег на новые алёрты ЦПУ юсадж опенсёрча).
Пробуем делать рестарт нод/дашбордов.
Получаем неожиданную ошибку
Ну спасибо, амазон, ну молодцы. Лллллллогика железная.
Заходим в dev tools и смотрим "а чо там".
Ого, все запросы в среднем по 180 секунд висят.
Видим что всё упирается в опендистро
Пробуем не глядя (а что вы мне сделаете?)
Ждём 10 минут и.. и лучше не стало.
Запуливаем снова что там с процессами - там всё ещё всё висит.
Ок. Логи то нужны девелоперам.
Спрашиваем лида проекта "могу ли всё хард ресетнуть?". Ничего не понимая он с лицом осла из Шрека кивает и мы пуляем
Ждём 10 минут и ничего.
Ладно.
Ищем мануалы типа
https://repost.aws/knowledge-center/opensearch-troubleshoot-high-cpu
Проходим всё, и вот эта шабола показывает нам всякое
по 50 и 52 часов пользовательские (игнорируем системные).
Ну а какие варианты -
Ии.. и ничего не происходит.
Опенсёрч ставит в очередь на удаление и всё.
Ждём ещё полчаса и нет результата.
Пробуем точечно и родительские и дочерние процессы кильнуть - ноль на массу.
Ну то есть по моему личному мнению по анализу запросов, дебагу и прочему я понимаю, что "подвисли" запросы по 50+ часов с 15 числа.
Убить их не удаётся. Нет, не так описал: то есть их убивает, при повторной попытке убить он пишет "already deleted" но всё равно тратит память и такты ЦПУ. Очередь на удаление на часы.
Пишем тикет в саппорт "дяденьки спасити памагити", ставим system impaired.
Спустя час вижу, что нагрузка стала меньше, 95% запросов таки убило.
Остался один максимально всратый.
Оставил его всем на сладенькое.
https://gist.githubusercontent.com/kruchkov-alexandr/3d28e37918dbf6c844c020b286a062df/raw/28a6ac4b2a5b6584c1f77ed51d2d9b3189f2344c/parasha.json
Да, я вот так же это читал и реагировал🤣 🤣 🤣 🤣 🤣
Слегка заорал чайкой от
Получаю ответ
- "used Cursor AI and multi cursor to build it up lol"
😂 😂 😂
и взвизгнул гиеной на весь город, это в мемы.
Ну то есть девелопер выполнил буквально такой запрос:
https://gist.github.com/kruchkov-alexandr/bb6b2bb2ce46828e26b9c5feb6af878d
Собственно этот запроси был причиной проблемы.
Спустя 45-60 минут этот цирк заканчивается, все квери удалены, нагрузка на CPU снижается, интерфейс оживает для девелоперов.
Трекаем время (Не, ну я же ждал всё это время, да? Ждал же? Трекаем!🤣 ) и закрываем таску.
Закрываем таску в саппорт амазона, на 3 часа так и не ответили ничего, даже ассайна не было с систем импайрд, ну ладно.
Как положить кластер опенсёрча при помощи AI помошников и фич IDE "Алекс, у нас какая-то штука, логи в OpenSearch недоступны. да просто белая страница крутится и всё. Да, мы помним, что ты давно говорил перейти на локи, но пока нет бюджета. Глянь, пожалуйста, что там может быть, да, прайс почасовой такой же."
Да блин, я так себе мастер с опенсёрче, на этом проекте он просто дефолтный.
Файлбит собирает с кубера с дефолт конфигом и пушит в опенсёрч.
У опенсёрча 2 инстанса в кластере на продакшне.
Ок, деньги не пахнут, а за спасибо супруге новую сумку не купить
Заходим в веб - да, тормозит, белая страница по дискавери.
Но статус кластер - грин, всё ок по мнению амазона
Смотрим в дашборды графаны - видим 100% нагрузка CPU и она началась 15 числа (ага, можно поклянчить денег на новые алёрты ЦПУ юсадж опенсёрча).
Пробуем делать рестарт нод/дашбордов.
Получаем неожиданную ошибку
Operation disabled for domains with less than three nodes.
Ну спасибо, амазон, ну молодцы. Лллллллогика железная.
Заходим в dev tools и смотрим "а чо там".
GET _tasks?detailed=true
Ого, все запросы в среднем по 180 секунд висят.
Видим что всё упирается в опендистро
ISMПробуем не глядя (а что вы мне сделаете?)
POST .opendistro-ism-config/_forcemerge?max_num_segments=1
{
"_shards" : {
"total" : 10,
"successful" : 10,
"failed" : 0
}
}
Ждём 10 минут и.. и лучше не стало.
Запуливаем снова что там с процессами - там всё ещё всё висит.
Ок. Логи то нужны девелоперам.
Спрашиваем лида проекта "могу ли всё хард ресетнуть?". Ничего не понимая он с лицом осла из Шрека кивает и мы пуляем
PUT .opendistro-ism-config-optimized
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1
}
}
POST _reindex
{
"source": {"index": ".opendistro-ism-config"},
"dest": {"index": ".opendistro-ism-config-optimized"}
}
Ждём 10 минут и ничего.
Ладно.
Ищем мануалы типа
https://repost.aws/knowledge-center/opensearch-troubleshoot-high-cpu
Проходим всё, и вот эта шабола показывает нам всякое
GET _tasks?actions=*search&detailed
по 50 и 52 часов пользовательские (игнорируем системные).
Ну а какие варианты -
Kill 'Em AllPOST _tasks/bDFfq7RrRyGGnzfHPBy14g:794713665/_cancel
POST _tasks/bDFfq7RrRyGGnzfHPBy14g:817036855/_cancel
Ии.. и ничего не происходит.
Опенсёрч ставит в очередь на удаление и всё.
Ждём ещё полчаса и нет результата.
Пробуем точечно и родительские и дочерние процессы кильнуть - ноль на массу.
Ну то есть по моему личному мнению по анализу запросов, дебагу и прочему я понимаю, что "подвисли" запросы по 50+ часов с 15 числа.
Убить их не удаётся. Нет, не так описал: то есть их убивает, при повторной попытке убить он пишет "already deleted" но всё равно тратит память и такты ЦПУ. Очередь на удаление на часы.
Пишем тикет в саппорт "дяденьки спасити памагити", ставим system impaired.
Спустя час вижу, что нагрузка стала меньше, 95% запросов таки убило.
Остался один максимально всратый.
Оставил его всем на сладенькое.
https://gist.githubusercontent.com/kruchkov-alexandr/3d28e37918dbf6c844c020b286a062df/raw/28a6ac4b2a5b6584c1f77ed51d2d9b3189f2344c/parasha.json
Да, я вот так же это читал и реагировал
Слегка заорал чайкой от
multi_match на 200+ вэльюсов, я отправляю коллегам с текстом are you okhueli there?!!?Получаю ответ
- "used Cursor AI and multi cursor to build it up lol"
и взвизгнул гиеной на весь город, это в мемы.
Ну то есть девелопер выполнил буквально такой запрос:
https://gist.github.com/kruchkov-alexandr/bb6b2bb2ce46828e26b9c5feb6af878d
Собственно этот запроси был причиной проблемы.
Спустя 45-60 минут этот цирк заканчивается, все квери удалены, нагрузка на CPU снижается, интерфейс оживает для девелоперов.
Трекаем время (Не, ну я же ждал всё это время, да? Ждал же? Трекаем!
Закрываем таску в саппорт амазона, на 3 часа так и не ответили ничего, даже ассайна не было с систем импайрд, ну ладно.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍3🔥2