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

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

Автор: @itcaat
Download Telegram
Давайте познакомимся с таким инструментом как grafana k6. С помощью него вы можете производительность ваших приложений и тестирование хаоса (Это метод, используемый для проверки устойчивости программных систем путем внесения непредвиденных сбоев или сбоев. Целью хаотического тестирования является выявление слабых мест и повышение устойчивости приложения)

Основной фичей инструмента является то, что вы можете писать довольно сложные сценарии тестирования используя javascript. k6 легко запускается из командной строки и хорошо интегрируется в CI/CD пайплайны, а также эмулирует работу виртуальных пользователей.

Ниже пример моего кейса. Надо было протестировать как себя ведет балансировщик. Поскольку балансер еще работает не в боевом режиме, надо отправить на IP адрес балансера заголовок с нужным хостом и игнорированием https. В примере мы в течении 30s плавно повышаем нагрузку до 1000 виртуальных пользователей, держим 30 секунд и далее в течении 20 секунд уменьшаем нагрузку до 0.


import http from "k6/http";
import { check, sleep } from "k6";

// Test configuration
export const options = {
thresholds: {
// Assert that 99% of requests finish within 3000ms.
http_req_duration: ["p(99) < 3000"],
},
stages: [
{ duration: "10s", target: 1000 },
{ duration: "30s", target: 1000 },
{ duration: "20s", target: 0 },
],
// ignore ssl valudation
insecureSkipTLSVerify: true,
};

// Simulated user behavior
export default function () {
const url = "https://my.loadbalancer.ip.address"; // Set load balancer host

// set header hosts
const headers = {
Host: "example.com",
};

let res = http.get(url, { headers });

check(res, { "status was 200": (r) => r.status == 200 });

sleep(1);
}


В результате вы получите супер подробный отчет по производительности.

На самом деле это довольно базовый сценарий, но сила k6 в возможности наращивать и усложнять логику, ограниченную только вашей фантазией. Примеры использования вы найдете в официальной документации https://grafana.com/docs/k6/next/get-started/running-k6/
👍4🔥2🆒1
Нашел консольный аналог postman - как вам? По-моему выглядит круто, там даже command palette есть 🤯Правда ставится через uv. 🙁

https://github.com/darrenburns/posting

#tools
👍5🔥2
Мониторинг и алертинг - это база. Без них не может нормально ехать ни один продукт и ни один бизнес. Если говорить про IT, то чтобы иметь полную картину у вас должны быть:

🟢 Infrastructure-related alerts - например, высокая утилизация CPU на ноде
🟢 Application-related alerts - например, прилка начала сыпать 500-ми ошибками
🟢 Business-related alerts - например, снижение конверсии

✍️ Давайте разберем простой кейс, вам прилетел алерт на CPU от ноды с postre в проде. Дежурный инженер открывает борду в grafana ( или zabbix ), смотрит какие то общие показатели. Потом подключается к базе, смотрит какие запросы сейчас обрабатываются, читает логи и тд. И принимает дальнейшие решения по тому в кого эскалировать проблему или решает вопрос сам. И вот этот порядок действий практически всегда один и тот же.

🔛 Как было бы круто дообогатить алерт уже подготовленной информацией. Например, получить вместе с алертом список выполняющихся сейчас запросов в базе и их потребление по ресурсам. (Например, через SELECT pid AS process_id, query AS active_query FROM pg_stat_activity WHERE state = 'active'; )

🧠Вот ребята из keephq тоже так подумали и запилили просто офигенскую прилу, добавив нереальное количество интеграций (провайдеров), которые можно интегрировать в различные флоу обработки алертов

Просто взгляните на список провайдеров: AKS, AppDynamics, Auth0, Axiom, Azure, BigQuery, Centreon, Chat, Checkmk, Cilium, Clickhouse, Cloud, Cloudwatch, Coralogix, Datadog, Discord, Elastic, GCP, GKE, GitHub, GitLab, Google, Grafana, Graylog, Incident, Jira, Kafka, Kubernetes, Linear, LinearB, Mailchimp, Manager, Mattermost, Microsoft, MongoDB, Monitor, Monitoring, MySQL, Netdata, New, Now, On-Prem, OnCall, OpenAI, OpenObserve, Openshift, OpsGenie, PagerDuty, PagerTree, Pipelines, Planner, PostgreSQL, Pushover, QuickChart, Redmine, Relic, Resend, Rollbar, SIGNL4, SMTP, SSH, SendGrid, Service, SignalFx, Slack, Snowflake, Splunk, Squadcast, Statuscake, SumoLogic, Teams, Telegram, Trello, Twilio, UptimeKuma, Webhook, Zenduty

https://github.com/keephq/keep

Я пока сам не тестровал, но выглядит это просто 🔥 В ближайшее время буду поднимать и тестировать, а результатами поделюсь с вами 👍
🔥11👍1🍓1
Всем привет! А давайте разыграем новенькую обложку на паспорт с лого github 🍾

Оставляй коммент "хотеть это" (или любой другой) и в понедельник выберем победителя великим рандомом. 😁
👍3🐳2
Всем доброго утра. Я к вам с отличной новостью.

Теперь github copilot for vscode бесплатный. Никаких подписок, триалов, карточек не требуется.

Более того, вы можете сами решать какую модель использовать.

Как активировать и другие подробности по ссылке: https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot
🔥7💯2
😁10
Всем привет. Надеюсь, все выжили после праздников и готовы делать мир лучше (или хуже - тут уж от каждого по способностям каждому по потребностям). 🎅

Я вам вакансию принес на Junior Devops Engineer, не проходите мимо кому актуально
https://www.aviasales.ru/about/vacancies/3870114
🔥6
Всем привет, я тут показывал недавно как сделать такую красоту котлеге и сразу записал небольшой гайд. Хотите такой же zsh на стеройдах? Без проблем!

Будем юзать Oh My Zsh, который позволит нам получить:

✨ Автодополнения команд (например, Docker).
⚡ Алиасы для сокращений (например, gcb – создание ветки).
🎨 Красивую кастомизацию с темами.

# 1. Устанавливаем oh my zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 2. Устанавливаем шрифты
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
cd ..
rm -rf fonts

# 3. Устанавливаем rvm-prompt, чтобы тема не плевала ошибку
curl -sSL https://get.rvm.io | bash

# 4. Устанавливаем тему
git clone https://github.com/consolemaverick/zsh2000.git
ln -s $(pwd)/zsh2000/zsh2000.zsh-theme ~/.oh-my-zsh/themes/zsh2000.zsh-theme


Теперь пропишем нужные плагины. Полный список всех плагинов есть по ссылке https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins c детальным описанием. В любом удобном редакторе открываем ~/.zshrc и прописываем параметры.

ZSH_THEME="zsh2000"

plugins=(
git
macos
docker
docker-compose
)


В настройках терминала выставляем шрифт на Meslo LG M DZ for Powerline, Regular, 11px. Перезапускаем терминал и радуемся.
🔥3
В продолжении темы про терминалы - недавно наткнулся на https://tabby.sh. Я погонял его пару дней - есть небольшие баги, но в целом как альтернативна терминалу очень даже огонь.

🟢 Работает на Windows, Mac и Linux.
🟢 Встроенный SSH-клиент с менеджером подключений.
🟢 Встроенный терминал для работы с последовательными портами.
🟢 Поддержка PowerShell, PS Core, WSL, Git-Bash, Cygwin, Cmder и CMD.
🟢 Полная поддержка Unicode, включая символы двойной ширины.
🟢 Передача файлов в/из SSH-сессий через SFTP и Zmodem.
🟢 Темы оформления и цветовые схемы.
🟢 Полностью настраиваемые горячие клавиши, включая составные комбинации.
🟢 Запоминает ваши вкладки и разделенные панели.
🟢 Полноценный опыт работы с Shell на Windows, включая автодополнение.
🟢 Встроенный зашифрованный контейнер для хранения SSH-секретов и настроек.

#tools
👍1👏1
📎 Dive in performance tools. Часть 1️⃣ [sysdig]

Котлеги, привет. Вдохновленный серией статей от Евгения Козлова про CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async, я решил написать свой цикл статей по инструментам диагностики производительности linux с примерами.

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

Long story short - sysdig использует модуль ядра для перехвата системных вызовов и событий, что открывает нам невероятные возможности в плане диагностики. Вы буквально можете расковырять практически все что происходит у вас в системе. Можно использовать realtime-диагностику или собрать трейс с системы за определенный период, обычно при проблемах достаточно до 30 секунд сбора данных.


# Установка sysdig
curl -s https://download.sysdig.com/stable/install-sysdig | sudo bash


Есть небольшой минус - sysdig требует заголовки ядра (kernel headers), потому что он использует модуль ядра для перехвата системных вызовов и событий. Но глобально это влияет только на скорость установки и требуется немного места.

Допустим у вас есть какая-то лагучая нода и базовые инструменты дигностики/логи вам не особо помогли. Давайте посмотрим на живом примере как ее использовать.


# Запускаем запись всех эвентов на 30 секунд
sysdig -w capture.scap -M 30


Конечно можно не использовать GUI, а вытащить из трейса событий нужные данные. Но это обычно работает, если вы точно знаете что искать. Например так] (без GUI)


# Вывести срезы которые доступны в этом трейсе (тут вы получите список срезов в различных категориях. Например, bottlenecks - cамые медленные системные вызовы)
sysdig -r capture.scap -cl

# выведем top процессов утилирующих cpu
root@server:~# sysdig -r capture.scap -c topprocs_cpu
CPU% Process PID
--------------------------------------------------------------------------------
15.00% redis-server 1095390
12.60% redis-server 1095391
12.20% redis-server 1095375
....


# Показать top файлов с которыми велась работа (R+W)
root@server:~# sysdig -r capture.scap -c topfiles_bytes proc.name=redis-server
Bytes Filename
--------------------------------------------------------------------------------
72.00M /data/temp-27.rdb
40.00M /data/temp-28.rdb
82.72KB /proc/self/stat
.....


Как я и сказал ранее, все эти данные есть в realtime и можно просто запустить GUI csysdig, но проблема может быть плавающая. В таком случае есть шанс просто пропустить нужные данные. Поэтому, я рекомендую снимать трейс эвентов и работать с ним.


# Открываем консольный GUI и скармливаем ему capture.scap
csysdig -r ./capture.scap


После этого переходим в режим Views (F2) и можем нырять на столько глубоко на сколько у вас хватит фантазии.

Перед нами открываются все тайны нашей системы: что именно передавалось установленным соединением определенного процесса. Сколько данных было передано, порты, ip адреса и тд. Какие ошибки происходили в системе и в каких процессах. Какие процессы какие файлы писали с каким рейтом. Какие открывались каталоги, какие контейнеры работали и какие процессы были запущеные внутри, какие действия делали эти контейнеры. Какие происходили ошибки Page Faults. Где какой был латенси на файлах. Какие порты были открыты и сколько с них было переданно данных. Этот список можно продолжать бесконечно.

А на этом все - спасибо за внимание.

В следующий раз расскажу о более простых инструментах первичной диагностики. А также попробую записать видео-урок с разбором инструмента

Ссылка на habr: https://habr.com/ru/articles/876160/
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥12
Channel name was changed to «DevOps Brain»
Channel name was changed to «DevOps Brain 🧠»
Forwarded from Эшер II. A+
⚡️⚡️⚡️ В России что-то глобально упало. Не работает Я.Почта, Гугл, ничего не работает, кроме Telegram. Как в 2018
🤬4
У нас открылась еще одна вакансия SRE. Шлите тем, кого не любите больше всего 🤓

https://www.aviasales.ru/about/vacancies/3880098
2🔥5🤣1🆒1
Dive in performance tools. Часть 2️⃣. [top / htop]

Сегодня мы максимально подробно разберем такой базовый инструмент диагностики, который встречается чуть ли не в каждом гайде, а именно про top. По ходу мы знатно приправим все теорией и разберем практический пример анализа. Текст будет разбит на несколько разделов из-за ограничений телеги. Погнали 😲

2️⃣.1️⃣ Про память в Linux

Когда вы смотрите на показатели памяти (например, в top, free или через `cat /proc/meminfo`), важно понимать, что именно подразумевается под «used», «free», «buff/cache» и т. д. На первый взгляд может казаться, что система «съедает» всю память, но зачастую это лишь особенности кэширования и работы ядра.

1. Total — Общий объём оперативной памяти (RAM), который распознаёт ядро Linux.

2. Used — Количество памяти, занимаемой процессами вместе буферами и кэшами.

3. Free — Память, которая прямо сейчас не задействована ни под процессы, ни под кэш.

4. Buff/Cache
- Buffers — память, зарезервированная под буферизацию операций ввода-вывода (I/O). Пример: при копировании большого файла cp bigfile /backup/bigfile часть данных попадает в буферы, прежде чем окончательно записаться на диск. Это помогает оптимизировать операции записи. По окончании записи ядро освобождает или переиспользует буферы.
- Cache — память, используемая для кэширования файловых данных. Пример: когда вы повторно открываете один и тот же лог-файл, чтение во второй раз будет быстрее, так как ядро может брать данные из кэша (без повторных обращений к диску). Если приложению понадобится память, ядро автоматически «отдаст» часть кэша, так что buff/cache не означает «пропавшую» память.

5. Available — Показывает объём памяти, который ядро может отдать под новые процессы без использования swap. При необходимости кэш и буфер освобождаются автоматически.

6. Swap — Когда системе не хватает физической памяти (или при определённой настройке swappiness), неиспользуемые страницы памяти могут выгружаться в swap-раздел (или файл). Если swap активно используется, это может указывать на нехватку RAM, но иногда ядро использует swap и при наличии свободной памяти, если считает, что выгрузка «простаивающих» страниц — более эффективный вариант.

Продолжение следует… ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥6👍1
Dive in performance tools. Часть 2️⃣ [top / htop]

2️⃣.2️⃣ Про CPU

В строке CPU(s) в top видим восемь основных показателей — проценты от общего времени CPU:

1. us (user) – Время, затраченное на выполнение пользовательских процессов (приложений). Если значение us высокое, значит процессы в userspace активно нагружают процессор. Пример: сложные вычисления в Python, компрессия данных, рендеринг видео.

2. sy (system) – Время, занятое системными вызовами и кодом ядра (kernel space). Если sy растёт, это признак того, что ядро выполняет много работы (обработка I/O, сетевых стэков, драйверов и т. д.). Иногда это бывает из-за большого числа контекстных переключений, или интенсивного чтения-записи на диск.

3. ni (nice) – Время, отведённое процессам с изменённым приоритетом (nice). Если процессы запускаются с nice (пониженным приоритетом) или renice, их CPU-время может отражаться в ni. Редко встречается в большом объёме, если специально не конфигурируете приоритеты.

4. id (idle) – Процент времени, когда CPU простаивает. Если id высок, значит процессор почти без нагрузки. Важно понимать, что часть «простоя» может относиться к iowait, который выделяют отдельно.

5. wa (iowait) – Время, когда CPU простаивает в ожидании операций ввода-вывода (диск, сеть, и т. д.). Если wa велик (например, >10–15%), обычно это говорит, что система не успевает обрабатывать I/O, и процессор «ждёт» данные, вместо вычислять. При высоком iowait стоит проверить диски (iotop, iostat), подсистему хранения (SSD vs HDD) и сетевые операции (если хранилище находится в сети). Как это диагностировать мы поговорим в следующих статьях данного цикла.

6. hi (hardware interrupt) – Время обработки аппаратных прерываний. Например, при поступлении сигнала от сетевой карты или дискового контроллера. Если hi внезапно скачет, есть риск «шторма» прерываний из-за нештатной работы железа.

7. si (software interrupt) – Время обработки программных прерываний (softirqs). Часто связано с сетевыми пакетами, таймерами, межпроцессным взаимодействием. Высокие значения бывают при интенсивном сетевом трафике.

8. st (steal) – «Украденное» время при работе на виртуальной машине. Гипервизор может забирать часть CPU для других виртуалок. Если st высок, значит ваша VM не получает достаточно CPU-ресурсов от хост-сервера.

Важно: Если у вас многоядерный процессор (к примеру, 8 ядер), то проценты показывают агрегированное время по всем ядрам. Можно нажать 1 в top, чтобы увидеть загрузку по каждому ядру отдельно.

Давайте разберем практический пример:


19:48:03 up 403 days, 5:30, 1 user, load average: 6.17, 5.91, 5.64
Tasks: 164 total, 3 running, 161 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.6 us, 5.7 sy, 0.0 ni, 55.1 id, 26.3 wa, 0.0 hi, 5.2 si, 0.0 st
MiB Mem : 30614.7 total, 846.8 free, 20870.0 used, 8898.0 buff/cache
MiB Swap: 5120.0 total, 5068.7 free, 51.3 used. 9435.4 avail Mem


1. Uptime: up 403 days, 5:30. Сервер не перезагружался более года.

2. Load average: 6.17, 5.91, 5.64. Загрузка за последние 1, 5 и 15 минут. Если на машине, к примеру, 8 ядер, эти значения — не критический показатель. Полезно помнить, что Load Average включает как процессы, использующие CPU, так и те, что ждут ввода-вывода (IO wait).

3. %Cpu(s). us = 7.6% — пользовательские процессы не особо перегружены. sy = 5.7% — умеренная нагрузка на ядро. id = 55.1% — более половины времени CPU простаивает. wa = 26.3% — довольно высокое ожидание I/O. Это может указывать на интенсивную запись/чтение (например, Redis сбрасывает свои данные). si = 5.2% — есть некоторая нагрузка софт-прерываний (сетевой трафик?). st = 0.0% — на данном экземпляре нет «украденного» времени (возможно, это физический сервер).

4. Память. Total: ~30.6 ГБ. Free: ~0.85 ГБ, однако buff/cache = ~8.9 ГБ и avail Mem = ~9.4 ГБ. То есть Linux эффективно использует оставшиеся ~8–9 ГБ под кэш, и при необходимости может её освободить. Swap: практически не используется (51.3 МБ), значит нехватки ОЗУ нет.

Продолжение следует…⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍1