devops cheatsheet
1661 commands · click to copy
1661 shown
tool
tag
Все поды с расположением на нодах и IP-адресами
kubectl get pods -A -o wide
Описание пода
kubectl
Подробная информация: события, условия, монтирование томов
kubectl describe pod <name> -n <ns>
Следить за логами пода
kubectl
Потоковые логи в реальном времени; добавьте -c <container> для мульти-контейнерных подов
kubectl logs -f <pod> -n <ns>
Логи предыдущего контейнера
kubectl
Логи последнего упавшего или перезапущенного экземпляра контейнера
kubectl logs <pod> --previous -n <ns>
Войти в под
kubectl
Интерактивная оболочка внутри работающего контейнера
kubectl exec -it <pod> -n <ns> -- bash
Проброс порта сервиса
kubectl
Туннелирование порта кластерного сервиса на localhost
kubectl port-forward svc/<name> 8080:80 -n <ns>
Следить за статусом rollout
kubectl
Блокировать до завершения деплоя или таймаута (используется в CI)
kubectl rollout status deployment/<name> -n <ns>
Откат деплоймента
kubectl
Вернуться к предыдущей ревизии
kubectl rollout undo deployment/<name> -n <ns>
Масштабирование деплоймента
kubectl
Немедленно изменить количество реплик
kubectl scale deployment/<name> --replicas=3 -n <ns>
События кластера по времени
kubectl
Последние события кластера, сначала старые — удобно при post-incident разборе
kubectl get events -A --sort-by='.lastTimestamp'
Валидация манифеста через живой API без применения изменений
kubectl apply --server-side --dry-run=server -f file.yaml
Экспорт ресурса в YAML
kubectl
Текущее состояние без служебных полей; удобен как базовый шаблон
kubectl get deployment/<name> -n <ns> -o yaml
Удалить под в состоянии Terminating немедленно (используйте с осторожностью)
kubectl delete pod <name> -n <ns> --grace-period=0 --force
Копирование файла из пода
kubectl
Извлечь файл из работающего контейнера
kubectl cp <ns>/<pod>:/remote/path ./local-path
Cordon ноды
kubectl
Пометить ноду как неналиняющую — новые поды сюда не попадают
kubectl cordon <node>
Drain ноды
kubectl
Аккуратно вытеснить все поды перед обслуживанием
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
Редактировать ресурс в кластере
kubectl
Открыть ресурс в $EDITOR; изменения применяются при сохранении
kubectl edit deployment/<name> -n <ns>
Проверка прав RBAC
kubectl
Проверить что ServiceAccount имеет право делать
kubectl auth can-i list pods --as=system:serviceaccount:<ns>:<sa> -n <ns>
Деплой чарта; создаёт неймспейс если не существует
helm install <release> <chart> -f values.yaml -n <ns> --create-namespace
Безопасно в CI — устанавливает если нет, обновляет если есть
helm upgrade --install <release> <chart> -f values.yaml -n <ns>
Показать что именно изменится (требует плагин helm-diff)
helm diff upgrade <release> <chart> -f values.yaml -n <ns>
Вывести сгенерированный YAML в stdout без деплоя
helm template <release> <chart> -f values.yaml --debug
Все вычисленные значения для задеплоенного релиза
helm get values <release> -n <ns> --all
Вернуться к конкретной исторической ревизии
helm rollback <release> <revision> -n <ns>
Линтинг чарта
helm
Проверка структуры чарта и values; падает на предупреждениях в режиме --strict
helm lint <chart-dir> -f values.yaml --strict
Убедиться что все контроллеры Flux запущены и CRD установлены
flux check
Все ресурсы Flux
flux
Сводная таблица: Kustomizations, HelmReleases, Sources — со статусом синхронизации
flux get all -A
Инициировать немедленный git pull + apply
flux reconcile kustomization <name> --with-source -n <ns>
Немедленно повторить цикл Helm install/upgrade
flux reconcile helmrelease <name> --with-source -n <ns>
Трассировка ресурса
flux
Показать какие объекты Flux владеют этим ресурсом
flux trace <kind>/<name> -n <ns>
Поставить на паузу — удобно при ручных hotfix
flux suspend kustomization <name> -n <ns>
Включить приостановленный Kustomization или HelmRelease
flux resume kustomization <name> -n <ns>
Бэкап текущего конфига Flux как YAML для бутстрапа другого кластера
flux export kustomization --all > clusters/cluster.yaml
Кросс-компиляция и push в реестр с BuildKit
docker buildx build --platform linux/amd64,linux/arm64 -t reg/img:tag --push .
Локальный запуск с переменными из файла; --rm удаляет контейнер при выходе
docker run --rm -it --env-file .env -p 8000:8000 img:tag
Просмотр слоёв образа
docker
Каждый слой, его команда и размер; поиск лишнего
docker history --no-trunc img:tag
Очистка неиспользуемого
docker
Удалить остановленные контейнеры, неиспользуемые образы, сети, тома
docker system prune -af --volumes
Перетегировать и запушить в другой реестр
docker pull src-reg/img:tag && docker tag src-reg/img:tag dst-reg/img:tag && docker push dst-reg/img:tag
Сохранение образа в архив
docker
Экспорт образа для передачи в изолированную среду
docker save img:tag | gzip > img.tar.gz
Plan с файлом переменных
terraform
Показать изменения; сохранить артефакт плана для гейтинга в CI
terraform plan -var-file=prod.tfvars -out=plan.tfplan
Apply сохранённого плана
terraform
Применить именно ранее сгенерированный план — без интерактивных запросов
terraform apply plan.tfplan
Импорт существующего ресурса
terraform
Взять уже существующий ресурс под управление Terraform
terraform import module.path.resource_type.name <remote-id>
Просмотр состояния ресурса
terraform
Атрибуты ресурса в Terraform state
terraform state show module.path.resource_type.name
Перемещение ресурса в state
terraform
Переименовать/реорганизовать ресурс без удаления и пересоздания
terraform state mv old.address new.address
Эфемерный debug-контейнер
k8s-debug
Присоединить debug-контейнер (netshoot) к работающему поду — общие PID/net namespace
kubectl debug -it <pod> --image=nicolaka/netshoot -n <ns>
Использование ресурсов нодами
k8s-debug
CPU и память по каждой ноде (требует metrics-server)
kubectl top nodes
Использование ресурсов подами
k8s-debug
Поды отсортированные по памяти во всех неймспейсах — найти прожорливые
kubectl top pods -A --sort-by=memory
Просмотр ConfigMap
k8s-debug
Вывести только поле data; передайте в python -m json.tool для форматирования
kubectl get cm <name> -n <ns> -o jsonpath='{.data}'
Декодирование Secret
k8s-debug
Дамп и base64-декодирование всех полей k8s Secret
kubectl get secret <name> -n <ns> -o jsonpath='{.data}' | python3 -c "import sys,json,base64; [print(k,'=',base64.b64decode(v).decode()) for k,v in json.load(sys.stdin).items()]"
Список всех ресурсов в неймспейсе
k8s-debug
Перечислить все типы ресурсов в неймспейсе — удобно для аудита
kubectl api-resources --verbs=list --namespaced -o name | xargs -I{} kubectl get {} -n <ns> --ignore-not-found
JSONPath для любого ресурса
k8s-debug
Извлечь конкретные поля из объектов k8s API без jq
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}\t{.metadata.name}\t{.status.phase}\n{end}'
Ресурс с кастомными колонками
kubectl
Вывести только нужные поля без jq
kubectl get pods -n <ns> -o custom-columns='NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase'
Patch поля ресурса
kubectl
Изменить поле ресурса без редактирования манифеста
kubectl patch deployment <name> -n <ns> -p '{"spec":{"replicas":2}}'
Добавить аннотацию к ресурсу
kubectl
Добавить/обновить аннотацию; --overwrite заменяет существующее значение
kubectl annotate pod <pod> -n <ns> key=value --overwrite
Добавить лейбл к ресурсу
kubectl
Добавить или изменить лейбл на любом ресурсе
kubectl label node <node> role=worker --overwrite
Добавить taint на ноду
kubectl
Запретить размещение подов без соответствующего toleration
kubectl taint nodes <node> key=value:NoSchedule
Снять taint с ноды
kubectl
Снять taint — поставить тире в конце
kubectl taint nodes <node> key=value:NoSchedule-
Обновить образ деплоймента
kubectl
Обновить образ контейнера без редактирования YAML
kubectl set image deployment/<name> <container>=image:tag -n <ns>
История деплоев
kubectl
Все ревизии с причиной изменения
kubectl rollout history deployment/<name> -n <ns>
Rolling restart деплоймента
kubectl
Перезапустить поды по одному без простоя
kubectl rollout restart deployment/<name> -n <ns>
Создать неймспейс
kubectl
Создать новый неймспейс; идемпотентно через --dry-run=client | apply
kubectl create namespace <ns>
Задать requests/limits
kubectl
Обновить requests и limits деплоймента без правки YAML
kubectl set resources deployment/<name> -c <container> --requests=cpu=100m,memory=128Mi --limits=cpu=500m,memory=512Mi -n <ns>
Запустить разовый под
kubectl
Временный под для отладки; удаляется при выходе
kubectl run tmp --image=nicolaka/netshoot -it --rm --restart=Never -n <ns> -- bash
Разблокировать ноду
kubectl
Разрешить планирование на ранее заблокированной ноде
kubectl uncordon <node>
Квоты ресурсов неймспейса
kubectl
Использованные vs жёсткие лимиты CPU, памяти, объектов в неймспейсе
kubectl describe resourcequota -n <ns>
Статус PodDisruptionBudget
kubectl
Показать min-available и текущее число здоровых подов
kubectl get pdb -A
LimitRange неймспейса
kubectl
Дефолтные и максимальные ресурсные лимиты подов в неймспейсе
kubectl describe limitrange -n <ns>
Все CRD в кластере
kubectl
Все Custom Resource Definitions отсортированные по времени создания
kubectl get crds --sort-by='.metadata.creationTimestamp'
Endpoints сервиса
kubectl
Pod IP-адреса за Service — диагностика несоответствия selector
kubectl get endpoints <svc> -n <ns>
Проверить срок сертификата
kubectl
Статус и дата истечения сертификатов cert-manager
kubectl get certificate -A -o wide
Топология spread constraints
kubectl
Проверить topologySpreadConstraints пода
kubectl get pod <pod> -n <ns> -o jsonpath='{.spec.topologySpreadConstraints}'
Apply с удалением лишнего
kubectl
Применить манифесты и удалить устаревшие объекты по label selector
kubectl apply -f ./dir/ --prune -l app=<label> -n <ns>
Diff живого vs локального
kubectl
Показать что изменится при применении этого манифеста
kubectl diff -f file.yaml
Выполнить команду во всех подах
kubectl
Выполнить команду в каждом поде с нужным label selector
kubectl get pods -n <ns> -l app=<label> -o name | xargs -I{} kubectl exec {} -n <ns> -- <cmd>
Watch статуса подов
kubectl
Обновление в реальном времени при изменении статусов
kubectl get pods -n <ns> -w
Поды по CPU
kubectl
Использование CPU по всем неймспейсам отсортировано
kubectl top pods -A --sort-by=cpu
Создать токен ServiceAccount
kubectl
Сгенерировать краткосрочный bound-токен ServiceAccount
kubectl create token <sa-name> -n <ns> --duration=1h
Аудит прав — кто что может
kubectl
Все разрешения текущего пользователя в неймспейсе
kubectl auth can-i --list -n <ns>
Удалить все поды в неймспейсе
kubectl
Форс-рекреация всех подов — удобно после смены ConfigMap
kubectl delete pods --all -n <ns>
Дамп всех подов в YAML
kubectl
Резервная копия/инспекция всех подов неймспейса в YAML
kubectl get pods -n <ns> -o yaml > pods-dump.yaml
Перечислить все образы контейнеров запущенных в кластере
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .spec.containers[*]}{.image}{"\n"}{end}{end}'
Версии чарта в репо
helm
Все доступные версии чарта в добавленных репозиториях
helm search repo <chart> --versions
Добавить OCI реестр
helm
Авторизоваться в OCI Helm-реестре
helm registry login registry.example.com -u user -p pass
Запушить чарт в OCI
helm
Загрузить упакованный чарт в OCI реестр
helm push mychart-0.1.0.tgz oci://registry.example.com/charts
Запаковать чарт
helm
Создать .tgz архив из директории чарта
helm package ./my-chart --destination ./dist
Сохранить дефолтные values в файл для кастомизации
helm show values <chart> > values.yaml
Установить плагин Helm по URL (например helm-diff, helm-secrets)
helm plugin install https://github.com/databus23/helm-diff
Все Kubernetes манифесты генерируемые этим Helm-релизом
helm get manifest <release> -n <ns>
Расшифровать SOPS/age-зашифрованный файл values (требует плагин helm-secrets)
helm secrets view secrets.yaml
Бутстрап с GitHub
flux
Установить Flux и запушить начальную конфигурацию в GitHub
flux bootstrap github --owner=<org> --repository=<repo> --branch=main --path=clusters/production --personal
Зарегистрировать git-репозиторий как источник Flux
flux create source git <name> --url=https://github.com/org/repo --branch=main -n flux-system
Зарегистрировать Helm-репозиторий как источник Flux
flux create source helm <name> --url=https://charts.example.com -n flux-system
Создать HelmRelease
flux
Задеплоить чарт через ресурс HelmRelease в Flux
flux create helmrelease <name> --source=HelmRepository/<repo> --chart=<chart> --chart-version='>=1.0.0' -n <ns>
События Flux
flux
Последние события из неймспейса flux-system
kubectl get events -n flux-system --sort-by='.lastTimestamp' | tail -20
Удалить ресурс Flux
flux
Удалить Kustomization или HelmRelease из кластера
flux delete kustomization <name> -n <ns>
Автоматически обновлять теги образов в git при пуше новых образов
flux create image update <name> --git-repo-ref=<repo> --git-repo-path=./deploy --checkout-branch=main --push-branch=main -n flux-system
Стриминг логов конкретного контроллера Flux
flux logs --kind=kustomize-controller -n flux-system --tail=50
Определить какие теги образов должен отслеживать Flux
flux create image policy <name> --image-ref=<image-repo> --select-semver='>=1.0.0' -n flux-system
Собрать kustomization
kustomize
Вывести все манифесты для overlay в stdout
kustomize build ./overlays/prod
Применить kustomization
kustomize
Собрать и применить kustomization за один шаг через kubectl
kubectl apply -k ./overlays/prod
Добавить ресурс в kustomization
kustomize
Добавить файл ресурса в kustomization.yaml
kustomize edit add resource ./deployment.yaml
Задать образ в kustomization
kustomize
Обновить тег образа в kustomization.yaml
kustomize edit set image myapp=registry/myapp:v2.0.0
Задать неймспейс
kustomize
Переопределить неймспейс для всех ресурсов overlay
kustomize edit set namespace production
Добавить лейбл всем ресурсам
kustomize
Добавить общий лейбл всем генерируемым ресурсам
kustomize edit add label env:production
Добавить патч
kustomize
Зарегистрировать strategic merge patch в kustomization.yaml
kustomize edit add patch --path patch.yaml --kind Deployment --name <name>
Список ресурсов в kustomization
kustomize
Все настраиваемые поля kustomization
kustomize cfg list-setters .
Сборка с build args
docker
Передать переменные времени сборки в ARG инструкции Dockerfile
docker build --build-arg VERSION=1.2.3 --build-arg ENV=prod -t img:tag .
Сканировать образ Trivy
docker
Завершить с ошибкой при HIGH или CRITICAL уязвимостях
trivy image --exit-code 1 --severity HIGH,CRITICAL img:tag
Сетевые настройки запущенного контейнера
docker inspect <container> | jq '.[0].NetworkSettings.Networks'
Compose: запустить в фоне
docker
Собрать и запустить все сервисы в фоне
docker compose up -d --build
Стриминг последних 100 строк и следить за сервисом compose
docker compose logs -f --tail=100 <service>
Остановить и удалить контейнеры, сети и тома
docker compose down -v
Детальное использование диска по образам, контейнерам, томам
docker system df -v
Exec в контейнер под root
docker
Войти в контейнер под root даже если дефолтный пользователь другой
docker exec -it -u root <container> bash
Скопировать файл в контейнер
docker
Добавить файл в запущенный контейнер без пересборки
docker cp ./local-file.conf <container>:/etc/app/config.conf
Загрузить образ из архива
docker
Импортировать образ сохранённый через docker save
docker load < img.tar.gz
GC в приватном реестре
docker
Освободить диск в самохостированном Docker Registry
docker exec -it registry bin/registry garbage-collect /etc/docker/registry/config.yml
Сборка конкретного stage
docker
Собрать только до конкретного stage в многостадийном Dockerfile
docker build --target builder -t img:builder .
Создать и переключить workspace
terraform
Создать новый workspace и переключиться на него
terraform workspace new staging && terraform workspace select staging
Валидировать конфигурацию
terraform
Проверить конфигурацию Terraform на синтаксические ошибки
terraform validate
Output значения
terraform
Вывести все output значения в JSON; удобно в пайплайнах
terraform output -json
Уничтожить конкретный ресурс
terraform
Уничтожить один ресурс не трогая остальное
terraform destroy -target=module.vpc.aws_vpc.main
Taint ресурса (принудительная замена)
terraform
Пометить ресурс для пересоздания при следующем apply
terraform taint module.eks.aws_instance.node
Убрать ресурс из state
terraform
Убрать ресурс из state не уничтожая его в облаке
terraform state rm module.path.resource_type.name
Обновить state
terraform
Синхронизировать state с реальной инфраструктурой
terraform refresh -var-file=prod.tfvars
Граф зависимостей
terraform
Визуализировать граф зависимостей ресурсов (требует Graphviz)
terraform graph | dot -Tsvg > graph.svg
Список ресурсов в state
terraform
Отфильтровать ресурсы state по паттерну
terraform state list | grep <pattern>
Plan всех модулей
terragrunt
Plan всех зависимых Terragrunt-модулей по порядку
terragrunt run-all plan --terragrunt-non-interactive
Apply всех модулей
terragrunt
Применить все модули в порядке зависимостей, без интерактива
terragrunt run-all apply --terragrunt-non-interactive
Destroy всех модулей
terragrunt
Уничтожить все модули в обратном порядке зависимостей
terragrunt run-all destroy --terragrunt-non-interactive
Валидация всех конфигов
terragrunt
Запустить terraform validate по всем модулям
terragrunt run-all validate
Запустить плейбук
ansible
Запустить плейбук с diff для отображения изменений
ansible-playbook -i inventory/prod playbook.yml --diff
Ограничить выполнение хостом
ansible
Запустить только на указанных хостах из inventory
ansible-playbook -i inventory playbook.yml --limit host1,host2
Запустить по тегу
ansible
Выполнить только задачи с указанными тегами
ansible-playbook -i inventory playbook.yml --tags install,configure
Пропустить теги
ansible
Пропустить задачи с указанными тегами
ansible-playbook -i inventory playbook.yml --skip-tags cleanup
Dry run (check mode)
ansible
Симулировать выполнение без реальных изменений
ansible-playbook -i inventory playbook.yml --check --diff
Ad-hoc ping всех хостов
ansible
Проверить связь со всеми хостами из inventory
ansible all -i inventory -m ping
Ad-hoc shell команда
ansible
Выполнить команду на всех хостах
ansible all -i inventory -m shell -a 'uptime'
Ad-hoc скопировать файл
ansible
Скопировать файл на все хосты
ansible all -i inventory -m copy -a 'src=./file dest=/tmp/file'
Факты хоста
ansible
Собрать все Ansible факты (ОС, CPU, сеть) с хоста
ansible <host> -i inventory -m setup | jq '._ansible_facts'
Зашифровать переменную vault
ansible
Зашифровать строку inline для использования в плейбуке
ansible-vault encrypt_string 'secret_value' --name 'db_password'
Зашифровать файл vault
ansible
Зашифровать весь файл переменных через Ansible Vault
ansible-vault encrypt vars/secrets.yml
Расшифровать vault файл
ansible
Расшифровать файл зашифрованный Ansible Vault
ansible-vault decrypt vars/secrets.yml
Просмотреть зашифрованный файл
ansible
Просмотреть содержимое зашифрованного файла не расшифровывая на диске
ansible-vault view vars/secrets.yml
Установить роль из Galaxy
ansible
Загрузить роли из requirements.yml в локальную директорию
ansible-galaxy install -r requirements.yml -p roles/
Установить коллекцию
ansible
Установить коллекцию Ansible из Galaxy
ansible-galaxy collection install community.kubernetes
Список хостов из inventory
ansible
Все хосты и группы из inventory
ansible-inventory -i inventory --list | jq 'keys'
Передать дополнительные переменные переопределяющие дефолты плейбука
ansible-playbook playbook.yml -e 'env=prod version=2.0'
Подробный вывод
ansible
Максимальная детализация — каждая задача, соединение, вывод
ansible-playbook playbook.yml -vvv
Проверить синтаксис плейбука
ansible
Проверить синтаксис YAML без выполнения задач
ansible-playbook playbook.yml --syntax-check
Войти через AppRole
vault
Авторизоваться через AppRole метод аутентификации
vault write auth/approle/login role_id=<role> secret_id=<secret>
Получить секрет KV
vault
Прочитать секрет KV v2; добавьте -format=json для скриптов
vault kv get -mount=secret path/to/secret
Записать секрет KV
vault
Записать или обновить секрет KV v2
vault kv put -mount=secret path/to/secret key=value
Удалить секрет KV
vault
Мягкое удаление последней версии KV секрета
vault kv delete -mount=secret path/to/secret
История версий секрета
vault
Все версии, даты создания, статус удаления
vault kv metadata get -mount=secret path/to/secret
Выпустить краткосрочный токен ограниченный политикой
vault token create -policy=read-only -ttl=1h
Включить Kubernetes auth
vault
Включить и настроить Kubernetes метод аутентификации
vault auth enable kubernetes && vault write auth/kubernetes/config kubernetes_host=https://$KUBERNETES_PORT_443_TCP_ADDR:443
Создать Kubernetes роль
vault
Привязать ServiceAccount к политике Vault
vault write auth/kubernetes/role/my-role bound_service_account_names=<sa> bound_service_account_namespaces=<ns> policies=<policy> ttl=1h
Включить secrets engine
vault
Подключить новый secrets engine по указанному пути
vault secrets enable -path=myapp kv-v2
Transit шифрование
vault
Зашифровать данные через transit engine Vault
vault write transit/encrypt/my-key plaintext=$(echo -n 'secret' | base64)
Transit расшифровка
vault
Расшифровать ciphertext через transit engine
vault write transit/decrypt/my-key ciphertext=vault:v1:... | base64 -d
Описание ExternalSecret
external-secrets
Статус синхронизации, время последней синхронизации, ошибка если есть
kubectl describe externalsecret <name> -n <ns>
Список всех ExternalSecrets
external-secrets
Все ESO ExternalSecrets и их статус Ready
kubectl get externalsecret -A
Принудительная синхронизация
external-secrets
Запустить немедленную синхронизацию обновлением аннотации
kubectl annotate externalsecret <name> -n <ns> force-sync=$(date +%s) --overwrite
Список ClusterSecretStore
external-secrets
Все cluster-scope secret stores и их статус
kubectl get clustersecretstore
Запечатать секрет
sealed-secrets
Создать и запечатать k8s секрет одной командой
kubectl create secret generic mysecret --dry-run=client -n <ns> --from-literal=key=value -o yaml | kubeseal -o yaml > sealed.yaml
Получить публичный сертификат
sealed-secrets
Скачать сертификат запечатки для офлайн операций
kubeseal --fetch-cert --controller-name=sealed-secrets > pub-cert.pem
Запечатать оффлайн
sealed-secrets
Запечатать без доступа к кластеру используя сохранённый сертификат
kubeseal --cert pub-cert.pem -o yaml < secret.yaml > sealed.yaml
Список SealedSecrets
sealed-secrets
Все SealedSecrets и статус синхронизации
kubectl get sealedsecret -A
Статус Cilium
cilium
Проверить здоровье всех компонентов Cilium; ждать готовности
cilium status --wait
Тест связности Cilium
cilium
Запустить встроенные end-to-end тесты связности
cilium connectivity test
Список эндпоинтов Cilium
cilium
Все управляемые Cilium эндпоинты с security identity
cilium endpoint list
Hubble: наблюдать потоки
cilium
Поток сетевых событий конкретного пода в реальном времени
hubble observe --pod <ns>/<pod> -f
Hubble: отклонённые потоки
cilium
Только отклонённые соединения по всему кластеру
hubble observe --verdict DROPPED -f
Hubble: потоки неймспейса
cilium
Потоки всех подов неймспейса за последние 5 минут
hubble observe --namespace <ns> --since 5m
Список сетевых политик
cilium
Все Cilium и стандартные NetworkPolicy ресурсы
kubectl get ciliumnetworkpolicies,networkpolicies -A
Мониторинг агента Cilium
cilium
Дропы пакетов в реальном времени из dataplane Cilium
cilium monitor --type drop
Запрос к Prometheus через curl
prometheus
Разовый PromQL запрос из командной строки
curl -sG 'http://prometheus:9090/api/v1/query' --data-urlencode 'query=up' | jq .
Instant query через promtool
prometheus
Выполнить instant PromQL запрос через promtool
promtool query instant http://prometheus:9090 'up{job="kubelet"}'
Range query через curl
prometheus
Запросить Prometheus за диапазон времени через HTTP API
curl -sG 'http://prometheus:9090/api/v1/query_range' --data-urlencode 'query=rate(http_requests_total[5m])' --data-urlencode 'start=2024-01-01T00:00:00Z' --data-urlencode 'end=2024-01-01T01:00:00Z' --data-urlencode 'step=60s' | jq .
Проверить правила алертов
prometheus
Проверить синтаксис файлов правил алертов/записи
promtool check rules rules.yml
Заглушить алерт
prometheus
Создать silence для подавления оповещений при обслуживании
amtool silence add --alertmanager.url=http://alertmanager:9093 alertname=<name> --duration=2h --comment='Maintenance'
Список silences
prometheus
Все активные silences в Alertmanager
amtool silence query --alertmanager.url=http://alertmanager:9093
Завершить silence
prometheus
Немедленно завершить активный silence
amtool silence expire <id> --alertmanager.url=http://alertmanager:9093
Проверить конфиг Alertmanager
prometheus
Проверить корректность конфигурации Alertmanager
amtool check-config alertmanager.yml
Активные алерты
prometheus
Все срабатывающие алерты в Alertmanager
amtool alert query --alertmanager.url=http://alertmanager:9093
Перезагрузить конфиг Prometheus
prometheus
Горячая перезагрузка конфигурации без перезапуска
curl -X POST http://prometheus:9090/-/reload
Здоровье кластера
elasticsearch
Статус кластера: green/yellow/red, шарды, ноды
curl -s http://localhost:9200/_cluster/health | jq .
Список индексов
elasticsearch
Табличный список индексов отсортированный по размеру
curl -s 'http://localhost:9200/_cat/indices?v&h=index,health,pri,rep,docs.count,store.size&s=store.size:desc'
Удалить индекс
elasticsearch
Удалить индекс и все его данные
curl -X DELETE http://localhost:9200/<index>
Настройки индекса
elasticsearch
Количество шардов, реплик, интервал обновления
curl -s http://localhost:9200/<index>/_settings | jq .
Переиндексировать
elasticsearch
Скопировать документы из одного индекса в другой
curl -X POST http://localhost:9200/_reindex -H 'Content-Type: application/json' -d '{"source":{"index":"old"},"dest":{"index":"new"}}'
Force merge индекса
elasticsearch
Уменьшить количество сегментов; полезно перед переводом в read-only
curl -X POST 'http://localhost:9200/<index>/_forcemerge?max_num_segments=1'
Статистика нод
elasticsearch
Все ноды ES с JVM heap, нагрузкой, ролями
curl -s http://localhost:9200/_cat/nodes?v
Поисковый запрос
elasticsearch
Полнотекстовый поиск документов по слову
curl -s -X POST http://localhost:9200/<index>/_search -H 'Content-Type: application/json' -d '{"query":{"match":{"message":"error"}}}'
Создать snapshot
elasticsearch
Создать snapshot в зарегистрированном репозитории
curl -X PUT http://localhost:9200/_snapshot/<repo>/<snapshot>
ILM состояние индекса
elasticsearch
Текущая ILM фаза и действие для индекса
curl -s 'http://localhost:9200/<index>/_ilm/explain' | jq '.indices | to_entries[] | {index:.key, phase:.value.phase, action:.value.action}'
Экспорт дашборда
kibana
Экспортировать дашборд Kibana со всеми зависимостями
curl -s 'http://kibana:5601/api/saved_objects/_export' -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"type":"dashboard","includeReferencesDeep":true}' -o dashboard.ndjson
Импорт дашборда
kibana
Импортировать ранее экспортированный дашборд
curl -X POST 'http://kibana:5601/api/saved_objects/_import' -H 'kbn-xsrf: true' --form file=@dashboard.ndjson
Список топиков
kafka
Список всех Kafka топиков в кластере
kafka-topics.sh --bootstrap-server kafka:9092 --list
Создать топик
kafka
Создать топик с заданными партициями и репликацией
kafka-topics.sh --bootstrap-server kafka:9092 --create --topic <name> --partitions 3 --replication-factor 2
Описание топика
kafka
Количество партиций, репликация, лидеры и ISR
kafka-topics.sh --bootstrap-server kafka:9092 --describe --topic <name>
Удалить топик
kafka
Безвозвратно удалить Kafka топик
kafka-topics.sh --bootstrap-server kafka:9092 --delete --topic <name>
Читать топик с начала
kafka
Прочитать все сообщения топика начиная с offset 0
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic <name> --from-beginning
Отправить сообщения
kafka
Отправить сообщения в топик в интерактивном режиме из stdin
kafka-console-producer.sh --bootstrap-server kafka:9092 --topic <name>
Список consumer groups
kafka
Все consumer groups
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --list
Lag consumer group
kafka
Lag по каждой партиции для consumer group
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --describe --group <group>
Сбросить consumer group на начало топика
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --group <group> --topic <topic> --reset-offsets --to-earliest --execute
Увеличить (только) количество партиций топика
kafka-topics.sh --bootstrap-server kafka:9092 --alter --topic <name> --partitions 6
Offsets топика
kafka
Самые ранние и последние offsets по партициям
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafka:9092 --topic <name>
Подключиться к Redis CLI
redis
Открыть интерактивную сессию Redis CLI
redis-cli -h redis -p 6379 -a <password>
Redis info all
redis
Полная информация о сервере: память, CPU, клиенты, персистентность
redis-cli -h redis INFO all
Стриминг всех команд выполняемых на Redis сервере
redis-cli -h redis MONITOR
Медленные команды
redis
Последние 20 медленных запросов со временем выполнения
redis-cli -h redis SLOWLOG GET 20
Запустить фоновое сохранение RDB snapshot
redis-cli -h redis BGSAVE
Информация о репликации
redis
Роль master/replica, offset репликации, подключённые реплики
redis-cli -h redis INFO replication
Поиск ключей по паттерну
redis
Неблокирующий поиск ключей по паттерну (предпочтительнее KEYS в продакшне)
redis-cli -h redis --scan --pattern 'session:*' | head -20
TTL ключа
redis
Оставшийся TTL в секундах; -1 = нет TTL, -2 = ключ не найден
redis-cli -h redis TTL <key>
Подключиться через mongosh
mongodb
Открыть интерактивный шелл MongoDB
mongosh 'mongodb://user:pass@mongo:27017/dbname'
Статус replica set
mongodb
Члены replica set, отставание, статус выборов
mongosh --eval 'rs.status()' mongodb://mongo:27017
Статистика базы данных
mongodb
Размер данных, хранилища, количество коллекций
mongosh --eval 'db.stats()' mongodb://mongo:27017/mydb
Статистика коллекции
mongodb
Количество документов, размеры индексов, хранилище коллекции
mongosh --eval 'db.myCollection.stats()' mongodb://mongo:27017/mydb
Текущие операции
mongodb
Операции выполняющиеся дольше 5 секунд
mongosh --eval 'db.currentOp({active:true,secs_running:{$gt:5}})' mongodb://mongo:27017
Создать дамп
mongodb
Экспортировать базу данных в BSON файлы
mongodump --uri='mongodb://user:pass@mongo:27017' --db=mydb --out=/backups/
Восстановить из дампа
mongodb
Импортировать BSON бэкап в MongoDB
mongorestore --uri='mongodb://user:pass@mongo:27017' --db=mydb /backups/mydb/
Список индексов
mongodb
Все индексы коллекции
mongosh --eval 'db.myCollection.getIndexes()' mongodb://mongo:27017/mydb
Настроить alias mc
minio
Зарегистрировать MinIO сервер в клиенте mc
mc alias set myminio https://minio.example.com ACCESSKEY SECRETKEY
Скопировать файл в бакет
minio
Загрузить локальный файл в MinIO
mc cp ./file.tar.gz myminio/my-bucket/backups/
Непрерывная синхронизация локальной директории с бакетом
mc mirror --watch ./data myminio/my-bucket/data
Применить правила истечения/перемещения объектов к бакету
mc ilm import myminio/my-bucket < lifecycle.json
Удалить бакет и все его объекты
mc rb --force myminio/my-bucket
Подключиться к clickhouse-client
clickhouse
Открыть интерактивную сессию ClickHouse CLI
clickhouse-client -h clickhouse -u default --password <pass> --database mydb
Размер таблицы
clickhouse
Использование диска по таблицам базы данных
clickhouse-client -q "SELECT table, formatReadableSize(sum(bytes)) AS size FROM system.parts WHERE active AND database='mydb' GROUP BY table ORDER BY sum(bytes) DESC"
Текущие запросы
clickhouse
Все текущие запросы со временем выполнения
clickhouse-client -q 'SELECT query_id, user, elapsed, query FROM system.processes ORDER BY elapsed DESC'
Убить запрос
clickhouse
Завершить долгий или зависший запрос
clickhouse-client -q "KILL QUERY WHERE query_id='<id>'"
Сбросить кэши
clickhouse
Очистить кэши ClickHouse для освобождения памяти
clickhouse-client -q 'SYSTEM DROP MARK CACHE; SYSTEM DROP UNCOMPRESSED CACHE'
Синхронизировать реплику
clickhouse
Принудительно синхронизировать реплику с состоянием ZooKeeper
clickhouse-client -q 'SYSTEM SYNC REPLICA mydb.myTable'
Подключиться через cqlsh
cassandra
Открыть интерактивный CQL шелл
cqlsh <host> 9042 -u cassandra -p cassandra
Восстановить keyspace
cassandra
Запустить incremental repair на primary range (при обслуживании)
nodetool repair -pr <keyspace>
Статистика compaction
cassandra
Текущие compaction операции и длина очереди
nodetool compactionstats
Сбросить таблицу на диск
cassandra
Принудительно сбросить memtable в SSTable
nodetool flush <keyspace> <table>
Схема таблицы
cassandra
Схема таблицы с полными настройками
cqlsh -e 'DESCRIBE TABLE <keyspace>.<table>'
Список очередей
rabbitmq
Очереди с количеством сообщений и потребителей
rabbitmqctl list_queues name messages consumers durable
Список соединений
rabbitmq
Все активные AMQP соединения
rabbitmqctl list_connections name peer_host port user
Очистить очередь
rabbitmq
Удалить все сообщения из очереди без её удаления
rabbitmqctl purge_queue <queue>
Включить management плагин
rabbitmq
Включить HTTP API управления и веб-интерфейс на порту 15672
rabbitmq-plugins enable rabbitmq_management
Экспорт конфигурации
rabbitmq
Экспортировать exchanges, очереди, bindings, пользователей, политики
rabbitmqctl export_definitions /tmp/rabbitmq-definitions.json
Squash, перестановка или редактирование последних 5 коммитов
git rebase -i HEAD~5
Последние движения HEAD включая rebase и reset
git reflog show --date=relative | head -20
Сохранить незакоммиченную работу (включая untracked) с меткой
git stash push -m 'WIP: feature-x' -u
Бинарный поиск по истории для нахождения регрессии
git bisect start && git bisect bad HEAD && git bisect good <good-sha>
Переключиться на ветку в параллельной директории без stash
git worktree add ../feature-branch feature/my-feature
Инициализировать и обновить все submodule рекурсивно
git submodule update --init --recursive
Компактный визуальный граф всех веток репо
git log --oneline --graph --decorate --all | head -40
Найти все коммиты которые добавляли или удаляли строку 'password'
git log -S 'password' --oneline --all
Добавить staged изменения в последний коммит без смены сообщения
git commit --amend --no-edit
Удалить ветку из удалённого репозитория
git push origin --delete feature/old-branch
Удалить неотслеживаемые файлы и директории (включая gitignore)
git clean -fdx
Обновить все remote и удалить устаревшие tracking ветки
git fetch --all --prune --tags
Выбрать объекты где поле равно значению
cat data.json | jq '.items[] | select(.status == "Running")'
Выбрать только нужные поля в новый массив
cat data.json | jq '[.items[] | {name:.metadata.name, ns:.metadata.namespace}]'
Агрегировать элементы по значению поля
cat data.json | jq 'group_by(.namespace) | map({ns: .[0].namespace, count: length})'
Raw вывод (-r) для скриптов; одно значение на строку
cat data.json | jq -r '.items[].metadata.name'
Глубокое слияние двух JSON файлов (override побеждает)
jq -s '.[0] * .[1]' base.json override.json
Обновить поле YAML файла на месте
yq -i '.spec.replicas = 3' deployment.yaml
Глубокое слияние базового YAML с файлом переопределений
yq '. *= load("override.yaml")' base.yaml
Разбить мульти-документ YAML в JSON массив
yq -s '.' multi.yaml | yq -o=json
Найти большие файлы
linux
Найти файлы больше 100MB отсортированные по размеру
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20
15 самых больших директорий верхнего уровня
du -sh /* 2>/dev/null | sort -rh | head -15
Память по процессам
linux
15 процессов с наибольшим потреблением памяти
ps aux --sort=-%mem | head -15
Логи systemd сервиса
linux
Стриминг логов systemd unit за последние 10 минут
journalctl -u <service> -f --since '10 minutes ago'
Статус systemd сервиса
linux
Статус сервиса, последние строки логов, активные таймеры
systemctl status <service> --no-pager -l
Захватить конкретный трафик в pcap файл
tcpdump -i eth0 -nn host <ip> and port 80 -w /tmp/capture.pcap
Использование inode
linux
Использование inode по файловым системам; может вызвать 'no space' без полного диска
df -i | sort -k5 -rn
Watch вывода команды
linux
Повторять команду каждые 2 секунды с подсветкой изменений
watch -n 2 'kubectl get pods -n <ns>'
Запустить в фоне
linux
Запустить скрипт без привязки к терминалу; вывод в файл
nohup ./script.sh > /tmp/out.log 2>&1 &
SSH туннель
linux
Пробросить локальный порт 8080 на внутренний хост через bastion
ssh -L 8080:internal-service:80 user@bastion -N -f
Распаковать tar.gz
linux
Распаковать gz-архив tar в конкретную директорию
tar -xzf archive.tar.gz -C /target/dir/
Криптографически стойкий случайный пароль 32 байта
openssl rand -base64 32
Детали TLS сертификата
linux
Дата истечения и subject сертификата живого TLS endpoint
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
Awk — сумма колонки
linux
Сумма 3-й колонки файла с разделением пробелами
awk '{sum += $3} END {print sum}' file.txt
Sed — замена в файле
linux
Глобальная замена строки в файле на месте
sed -i 's/old-string/new-string/g' file.txt
Подсчёт и ранжирование дублирующихся строк в файле
sort file.txt | uniq -c | sort -rn | head -20
Сканировать локальную директорию на уязвимости и мисконфигурации
trivy fs --severity HIGH,CRITICAL .
Аудит безопасности кластера: образы, конфиги, RBAC
trivy k8s --report summary cluster
Сканировать неймспейс
trivy
Сканировать рабочие нагрузки только в конкретном неймспейсе
trivy k8s --namespace production --report summary all
Сканировать Helm чарт
trivy
Проверить шаблоны Helm чарта на мисконфигурации безопасности
trivy config ./my-chart
Результаты сканирования в машиночитаемом формате
trivy image --format json -o results.json img:tag
Найти мисконфигурации в Terraform/Kubernetes/Helm коде
trivy config --severity MEDIUM,HIGH,CRITICAL ./terraform
Пропустить уязвимости без доступного патча
trivy image --ignore-unfixed --severity HIGH,CRITICAL img:tag
Предварительно скачать актуальную базу уязвимостей
trivy image --download-db-only
Список маршрутов Admin API
apisix
Все маршруты APISIX с URI и upstream
curl -s http://apisix:9180/apisix/admin/routes -H 'X-API-KEY: <key>' | jq '.list[].value | {id:.id, uri:.uri, upstream:.upstream.nodes}'
Получить конкретный маршрут
apisix
Просмотреть конфигурацию конкретного маршрута APISIX
curl -s http://apisix:9180/apisix/admin/routes/<id> -H 'X-API-KEY: <key>' | jq .
Список upstream
apisix
Все upstream APISIX с нодами
curl -s http://apisix:9180/apisix/admin/upstreams -H 'X-API-KEY: <key>' | jq '.list[].value | {id:.id, nodes:.nodes}'
Список плагинов
apisix
Все доступные плагины APISIX
curl -s http://apisix:9180/apisix/admin/plugins/list -H 'X-API-KEY: <key>' | jq .
Перезагрузить конфиг APISIX
apisix
Горячая перезагрузка конфигурации APISIX из etcd
curl -X PUT http://apisix:9180/apisix/admin/configs/reload -H 'X-API-KEY: <key>'
Проверить здоровье APISIX
apisix
Здоровье процесса APISIX через control plane API
curl -s http://apisix:9080/apisix/status | jq .
POST JSON данные
curl
Отправить JSON POST запрос с Bearer токеном
curl -s -X POST https://api.example.com/v1/resource -H 'Content-Type: application/json' -H 'Authorization: Bearer <token>' -d '{"key":"value"}' | jq .
Полные заголовки запроса/ответа включая редиректы
curl -sLv https://example.com 2>&1 | grep -E '^[<>*]'
Замерить DNS, подключение и TTFB
curl -so /dev/null -w 'DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n' https://example.com
Скачать с прогрессом
curl
Скачать файл показывая прогресс-бар
curl -L --progress-bar -o output.file https://example.com/file.tar.gz
Запрос с Basic Auth
curl
HTTP запрос с Basic Authentication
curl -s -u user:password https://api.example.com/endpoint | jq .
Получить только код ответа — удобно в скриптах
curl -so /dev/null -w '%{http_code}' https://example.com
Открыть k9s с конкретным kubeconfig контекстом
k9s --context <context>
Переключить ресурс: :pods, :svc, :helmreleases, :ns
# In k9s press ':' then type 'helmreleases' or 'kustomizations'
Нажать / и ввести паттерн для фильтрации ресурсов
# In k9s press '/' to filter by name pattern
Показать kubectl describe для выбранного ресурса
# In k9s press 'd' on selected resource
Удалить выбранный ресурс с подтверждением
# In k9s press Ctrl+D on selected resource
Переключить kubeconfig контекст
kubectl
Переключить активный контекст кластера
kubectl config use-context <context>
Объединить kubeconfig файлы
kubectl
Объединить несколько kubeconfig файлов в один
KUBECONFIG=~/.kube/config:~/.kube/cluster2.yaml kubectl config view --flatten > ~/.kube/merged.yaml
Дефолтный неймспейс контекста
kubectl
Не нужно добавлять -n в каждую команду для этого контекста
kubectl config set-context --current --namespace=<ns>
Условия ноды
kubectl
Все условия каждой ноды (Ready, MemoryPressure, DiskPressure)
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{": "}{range .status.conditions[*]}{.type}={.status},{" "}{end}{"\n"}{end}'
Запустить CronJob вручную
kubectl
Немедленно запустить CronJob как разовый Job
kubectl create job --from=cronjob/<name> manual-run -n <ns>
Ждать готовности пода
kubectl
Заблокировать до готовности подов или таймаута
kubectl wait pod -l app=<label> -n <ns> --for=condition=Ready --timeout=120s
Список блочных устройств
linux
Дерево дисков, разделов, loop-устройств с типом ФС
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,UUID
Примонтировать раздел
linux
Примонтировать ext4 раздел в /mnt/data
mount -t ext4 /dev/sdb1 /mnt/data
Перемонтировать корневую ФС в режиме чтения-записи (напр. после rescue)
mount -o remount,rw /
Проверка целостности ФС
linux
Проверка ФС без изменений; для реального исправления сначала отмонтировать
fsck -n /dev/sdb1
Расширить ext4 раздел
linux
Расширить ext4 до размера раздела (после изменения раздела)
resize2fs /dev/sdb1
Информация о ФС
linux
Метаданные ext2/3/4: размер блока, счётчик монтирований, время
tune2fs -l /dev/sda1 | grep -E 'Block (count|size)|Mount count|Last mount'
Использование диска /var на 2 уровня вглубь
du -h --max-depth=2 /var | sort -rh | head -20
Место только на реальных ФС, без tmpfs/overlay
df -hT --type=ext4 --type=xfs --type=btrfs
Создать один GPT раздел на весь диск
parted /dev/sdb -- mklabel gpt mkpart primary ext4 1MiB 100%
Расширить LV и ФС
linux
Расширить LVM логический том на 10G и увеличить ext4 ФС онлайн
lvextend -L +10G /dev/vg0/lv_data && resize2fs /dev/vg0/lv_data
Создать swap-файл
linux
Выделить 2G swap-файл, права, форматировать и включить
fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile
Использование swap
linux
Активные swap-пространства и общая статистика памяти
swapon --show && free -h
Добавить статический маршрут (до перезагрузки)
ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0
Полная цепочка разрешения DNS от корневых серверов
dig +trace example.com
Все установленные TCP соединения с инфо о процессе
ss -tnp state established
Количество соединений в каждом состоянии TCP
ss -tan | awk 'NR>1{print $1}' | sort | uniq -c | sort -rn
Traceroute + ping в TCP-режиме для обхода блокировки ICMP
mtr --report --tcp --port 443 example.com
Тест MTU пути
linux
Пинг с DF-битом 1500 байт для обнаружения MTU проблем
ping -M do -s 1472 -c 3 8.8.8.8
Правила iptables
linux
Все правила filter table со счётчиками пакетов и номерами строк
iptables -L -n -v --line-numbers
Измерить TCP-пропускную способность: 4 потока, 10 секунд
iperf3 -c <server_ip> -t 10 -P 4
Трафик в реальном времени по соединениям на интерфейсе
iftop -i eth0 -n
Кольцевой буфер ядра
linux
Последние 50 ошибок/предупреждений ядра с читаемыми временными метками
dmesg -T --level=err,warn | tail -50
Загрузить модуль ядра
linux
Загрузить модуль с зависимостями и проверить
modprobe <module> && lsmod | grep <module>
Параметры ядра (sysctl)
linux
Список всех параметров ядра; фильтрация по имени
sysctl -a | grep vm.swappiness
Включить IP-форвардинг немедленно (также добавьте в /etc/sysctl.d/)
sysctl -w net.ipv4.ip_forward=1
Выделенные FD, свободные FD и системный максимум
cat /proc/sys/fs/file-nr
Расширенная статистика дисков каждые 2с, 5 итераций; смотреть %iowait, await
iostat -xz 2 5
Отчёт активности системы
linux
CPU, память, диск через sysstat (5 проб, 1с интервал)
sar -u -r -d 1 5
Перехватить сетевые и файловые системные вызовы процесса
strace -f -e trace=network,file -p <pid>
Аппаратные счётчики CPU за 5 секунд
perf stat -e cycles,instructions,cache-misses -- sleep 5
Информация о CPU
linux
Модель CPU, топология сокеты/ядра/потоки, частота
lscpu | grep -E 'Model|Socket|Core|Thread|MHz'
Слоты памяти (DIMM)
linux
Физические слоты DIMM: размер, скорость, тип (нужен root)
dmidecode -t memory | grep -E 'Size|Speed|Locator|Type:'
PCI-устройства
linux
Сетевые карты, GPU, NVMe контроллеры с информацией о драйвере
lspci -v | grep -A5 'VGA\|Ethernet\|NVMe'
Запретить изменение файла любым пользователем включая root
chattr +i /etc/resolv.conf && lsattr /etc/resolv.conf
Расширенные атрибуты файлов в /etc/ (не по умолчанию)
lsattr -R /etc/ 2>/dev/null | grep -v '^\-\-\-\-'
ACL: просмотр прав
linux
POSIX ACL: владелец, группа и дополнительные права пользователей
getfacl /srv/shared
Выдать alice полный доступ без изменения групп-владельца
setfacl -m u:alice:rwx /srv/shared
Найти setuid/setgid исполняемые файлы (аудит безопасности)
find / -perm /6000 -type f -ls 2>/dev/null
Убить дерево процессов
linux
Отправить SIGTERM всей группе процессов
kill -TERM -$(pgrep -f 'my-app')
Понизить приоритет (nice +10) работающего процесса
renice -n 10 -p <pid>
Запустить команду в временном scope systemd с лимитами ресурсов
systemd-run --scope -p MemoryMax=512M -p CPUQuota=50% -- ./heavy.sh
Логи journald за период
linux
Логи nginx между двумя временными метками
journalctl --since '2024-01-15 10:00' --until '2024-01-15 10:30' -u nginx
Экспорт журнала в JSON
linux
Структурированный экспорт логов для отправки в агрегаторы
journalctl -u <service> -o json | jq '{ts: .REALTIME_TIMESTAMP, msg: .MESSAGE}'
Статус синхронизации NTP
linux
Состояние синхронизации, смещение и источник NTP
timedatectl status && chronyc tracking
Все таймеры с временем последнего и следующего срабатывания
systemctl list-timers --all --no-pager
Скопировать SSH-ключ
linux
Добавить публичный ключ в authorized_keys на удалённом хосте
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
Rsync с прогрессом
linux
Синхронизировать директорию на удалённый хост с удалением лишних файлов
rsync -avz --progress --delete src/ user@host:/dest/
Затереть диск нулями с проверкой (для NVMe используйте hdparm ATA secure erase)
shred -vzn 1 /dev/sdb
SMART-здоровье диска
linux
Общее состояние SMART и ключевые показатели отказа
smartctl -a /dev/sda | grep -E 'SMART overall|Reallocated|Pending|Uncorrectable'
Запись 1GB с принудительной синхронизацией для измерения скорости
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 conv=fdatasync
Неймспейсы процессов
linux
Список Linux-неймспейсов для сети, PID и монтирования
lsns -t net,pid,mnt
Найти самые большие лог-файлы по числу строк
find /var/log -name '*.log' -exec wc -l {} + | sort -rn | head -20
Стриминг нескольких лог-файлов вперемешку в одном терминале
tail -f /var/log/syslog /var/log/auth.log
Поиск в сжатых логах
linux
grep внутри .gz файлов без распаковки
zgrep -i 'error' /var/log/syslog.*.gz
Принудительная ротация логов вне расписания
logrotate -f /etc/logrotate.conf
Вывести активные cron-задачи для каждого пользователя
for u in $(cut -f1 -d: /etc/passwd); do crontab -l -u $u 2>/dev/null | grep -v '^#' | sed "s|^|$u: |"; done
Проверить cron-выражение
linux
Разобрать cron-выражение и показать следующие 5 запусков
systemd-analyze calendar '*/5 * * * *'
Разделить stdout и stderr в разные файлы
command > /tmp/out.log 2> /tmp/err.log
Захватить оба потока
linux
Вывод stdout+stderr в файл и экран одновременно
command 2>&1 | tee /tmp/all.log
Найти файлы с текстом и заменить его на месте
grep -rl 'old_string' /etc/ | xargs sed -i 's/old_string/new_string/g'
Напечатать 1-й и 3-й столбцы из файла
awk '{print $1, $3}' /etc/passwd
Сумма столбца через awk
linux
Просуммировать значения второго столбца в файле
awk '{sum += $2} END {print sum}' file.txt
Удалить все строки-комментарии начинающиеся с #
sed -i '/^#/d' config.conf
Напечатать блок текста между метками START и END
sed -n '/START/,/END/p' file.txt
Подсчитать вхождения каждой уникальной строки
sort file.txt | uniq -c | sort -rn
Последние 20 записей о входах с IP и длительностью
last -n 20 | head -25
Неудачные попытки входа
linux
Топ IP с неудачными попытками входа по SSH за 24 часа
journalctl -u ssh --since '24h ago' | grep 'Failed password' | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10
Добавить пользователя в несколько групп без удаления текущих
usermod -aG docker,sudo alice
Карта памяти процесса
linux
Суммарный виртуальный размер процесса из smaps
cat /proc/<pid>/smaps | awk '/^Size/{sum+=$2} END{print sum/1024" MB"}'
Проверить THP и hugepages — использование и конфигурацию
grep -E 'HugePages|AnonHugePages|Transparent' /proc/meminfo
Отключить THP
linux
Отключить THP в рантайме (лечит задержки Redis, MongoDB)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Тюнинг TCP: backlog
linux
Увеличить listen backlog для высоконагруженных сервисов
sysctl -w net.core.somaxconn=65535 net.ipv4.tcp_max_syn_backlog=65535
Тюнинг TCP: включить BBR
linux
Включить контроль перегрузки BBR от Google для лучшей пропускной способности
sysctl -w net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
Аппаратные прерывания
linux
Счётчики прерываний по CPU, обновление каждую секунду
watch -n1 'cat /proc/interrupts | head -30'
Лимиты процесса
linux
Жёсткие и мягкие лимиты ресурсов для работающего процесса
cat /proc/<pid>/limits
Установить высокий лимит FD для сессии и сохранить постоянно
ulimit -n 1048576 && echo '* soft nofile 1048576
* hard nofile 1048576' >> /etc/security/limits.conf
Переписать сообщение последнего коммита (только локально)
git commit --amend -m 'new message'
Слить, переупорядочить или отредактировать последние 5 коммитов
git rebase -i HEAD~5
Сохранить только src/ в stash с описательным именем
git stash push -m 'wip: feature-x' -- src/
Список stash и применение конкретного по индексу
git stash list && git stash apply stash@{2}
Применить коммиты от A до B включительно на текущую ветку
git cherry-pick A^..B
Аннотировать строки 10–25 автором и датой
git blame -L 10,25 --date=short src/main.py
Бинарный поиск по истории для нахождения сломавшего коммита
git bisect start && git bisect bad HEAD && git bisect good v1.0
Список добавленных, изменённых, удалённых файлов между ветками
git diff --name-status main..feature/x
ASCII-граф полной истории коммитов со всеми ветками
git log --oneline --graph --decorate --all
Переместить HEAD назад на один коммит; изменения остаются в дереве
git reset HEAD~1
Сбросить изменения и удалить неотслеживаемые файлы/директории
git restore . && git clean -fd
GPG-подписанный аннотированный тег для релиза
git tag -s v1.2.3 -m 'Release 1.2.3'
Удалить локальные ссылки на удалённые ветки которых больше нет
git fetch --prune
Shallow clone
git
Клонировать только последний коммит одной ветки (быстро для CI)
git clone --depth=1 --single-branch --branch main <url>
Список авторов отсортированный по числу коммитов
git shortlog -sn --all
Найти все коммиты чьё сообщение содержит паттерн
git log --all --grep='fix:' --oneline
Найти когда строка была добавлена или удалена во всех ветках
git log -S 'functionName' --patch --all
Скачать коммиты и деревья; блобы загружаются по требованию
git clone --filter=blob:none <url>
Переключиться на ветку в отдельной директории без смены текущей
git worktree add ../hotfix-branch hotfix/urgent
Сборка с аргументами
docker
Передать переменные сборки в инструкции ARG Dockerfile
docker build --build-arg APP_VERSION=1.2.3 --build-arg ENV=prod -t myapp:1.2.3 .
Мульти-платформенная сборка
docker
Собрать и запушить мульти-архитектурный образ через BuildKit
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest --push .
Экспорт ФС контейнера
docker
Просмотреть объединённую ФС контейнера как tar-поток
docker export <container> | tar -tvf - | head -30
Добавленные (A), изменённые (C), удалённые (D) файлы в контейнере
docker diff <container>
Создать образ из контейнера
docker
Сохранить ФС работающего контейнера как образ
docker commit -m 'debug snapshot' <container> debug-snapshot:$(date +%s)
Запуск с лимитами ресурсов
docker
Ограничить контейнер 512MB RAM и половиной ядра CPU
docker run --memory=512m --cpus=0.5 --oom-kill-disable=false myapp
Одноразовый снапшот CPU и памяти для всех контейнеров
docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'
Удалить незанятые образы
docker
Удалить все неиспользуемые образы <none>:<none>
docker image prune -f
Полная очистка Docker
docker
Удалить остановленные контейнеры, образы, сети, тома
docker system prune -a --volumes -f
Извлечь файл из запущенного или остановленного контейнера
docker cp <container>:/app/config.yaml ./local-config.yaml
Docker Compose запуск фоном
docker
Пересобрать и запустить сервисы, удалить лишние контейнеры
docker compose up -d --build --remove-orphans
Запустить 5 реплик сервиса worker
docker compose up -d --scale worker=5
Логи сервиса Compose
docker
Стримить последние 100 строк конкретного сервиса Compose
docker compose logs -f --tail=100 worker
Инспектировать сеть Docker
docker
IP-адреса всех контейнеров в сети bridge
docker network inspect bridge | jq '.[0].Containers | to_entries[] | .value | {Name, IPv4Address}'
Создать кастомную сеть
docker
Создать bridge-сеть с кастомной подсетью
docker network create --driver bridge --subnet 172.30.0.0/24 mynet
Сохранить и загрузить образ
docker
Экспортировать образ в архив и импортировать на другом хосте
docker save myapp:1.0 | gzip > myapp.tar.gz && docker load < myapp.tar.gz
HEALTHCHECK в Dockerfile
docker
Встроенная проверка здоровья Docker через curl (в Dockerfile)
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl -sf http://localhost:8080/health || exit 1
Уязвимости образа (scout)
docker
Показать только CVE для которых есть исправление
docker scout cves --only-fixed myapp:latest
Полноценный сетевой отладчик с хостовыми PID и сетью
docker run --rm -it --pid=host --network=host --privileged nicolaka/netshoot
POST с JSON телом
curl
Отправить JSON через POST
curl -X POST https://api.example.com/v1/items -H 'Content-Type: application/json' -d '{"name":"foo"}'
Передать JWT/Bearer токен в заголовке Authorization
curl -H 'Authorization: Bearer $TOKEN' https://api.example.com/me
Следовать до 5 редиректов с полным выводом запрос/ответ
curl -Lv --max-redirs 5 https://example.com
Тихая загрузка с ошибкой при неуспехе и следованием редиректам
curl -sSL -o /tmp/result.json https://api.example.com/data
Измерить TTFB и общее время запроса
curl -o /dev/null -sS -w 'ttfb: %{time_starttransfer}s\ntotal: %{time_total}s\n' https://example.com
Multipart загрузка файла с дополнительными полями формы
curl -F 'file=@./report.pdf' -F 'user=alice' https://upload.example.com/api
HTTP/2 запрос
curl
Принудить HTTP/2 и проверить протокол в ответе
curl --http2 -sI https://example.com | grep -i 'http\|alt-svc'
Переопределить DNS для host:port (тест за CDN/балансировщиком)
curl --resolve example.com:443:1.2.3.4 https://example.com
Повторить до 5 раз с задержкой 2с при любой ошибке
curl --retry 5 --retry-delay 2 --retry-all-errors https://api.example.com/healthz
POST с form-data
curl
Отправить данные формы в URL-encoded формате
curl -d 'user=alice&pass=secret' -X POST https://auth.example.com/login
mTLS-запрос с клиентским сертификатом и кастомным CA
curl --cert client.crt --key client.key --cacert ca.crt https://secure.example.com
Скачать 5 URL параллельно и вывести коды ответа
cat urls.txt | xargs -P 5 -I{} curl -sSL -o /dev/null -w '%{url_effective} %{http_code}\n' {}
Проверить, что WebSocket upgrade отвечает кодом 101
curl -i -N -H 'Upgrade: websocket' -H 'Connection: Upgrade' -H 'Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==' -H 'Sec-WebSocket-Version: 13' http://localhost:8080/ws
Ограничить скорость загрузки до 1 МБ/с
curl --limit-rate 1M -O https://example.com/bigfile.iso
Стримить все команды Redis (исключая PING)
redis-cli MONITOR | grep -v PING
Лог медленных запросов
redis
Последние 20 медленных команд со временем выполнения в мкс
redis-cli SLOWLOG GET 20
Суммарная память по ключам с заданным паттерном
redis-cli --scan --pattern 'session:*' | xargs -n1 redis-cli MEMORY USAGE | awk '{sum+=$1} END{print sum/1024/1024" MB"}'
Безопасно удалить ключи через SCAN без блокирующего KEYS
redis-cli --scan --pattern 'cache:*' | xargs -r redis-cli DEL
Записать ключ с TTL
redis
Записать ключ со сроком жизни 1 час (EX = секунды)
redis-cli SET mykey 'value' EX 3600
Pub/Sub публикация
redis
Опубликовать сообщение в канал Redis pub/sub
redis-cli PUBLISH events '{"type":"login","user":"alice"}'
Информация о репликации
redis
Роль, подключённые реплики, задержка репликации
redis-cli INFO replication
Запустить фоновое RDB-сохранение и проверить время снапшота
redis-cli BGSAVE && redis-cli LASTSAVE
Топ-N из sorted set
redis
Топ 10 записей из sorted set с баллами
redis-cli ZREVRANGEBYSCORE leaderboard +inf -inf WITHSCORES LIMIT 0 10
Добавить сообщение в Redis Stream с авто-ID
redis-cli XADD mystream '*' event login user alice
Информация о кластере
redis
Здоровье кластера и список нод с диапазонами слотов
redis-cli -c CLUSTER INFO && redis-cli -c CLUSTER NODES
100к запросов, 50 клиентов, глубина pipeline 10 (краткий вывод)
redis-benchmark -q -n 100000 -c 50 -P 10
Пингануть все хосты
ansible
Проверить SSH и Python на всех хостах
ansible all -m ping -i inventory.ini
Выполнить команду на группе
ansible
Выполнить shell-команду на всех хостах группы webservers
ansible webservers -m shell -a 'uptime && free -h' -i inventory.ini
Получить facts хоста
ansible
Собрать и отфильтровать Ansible facts для одного хоста
ansible <host> -m setup -i inventory.ini | jq '.ansible_facts | {os: .ansible_distribution, mem: .ansible_memtotal_mb}'
Режим проверки (dry run)
ansible
Показать что изменится без реального применения
ansible-playbook site.yml --check --diff -i inventory.ini
Запуск с extra variables
ansible
Переопределить переменные из командной строки
ansible-playbook deploy.yml -e 'env=prod version=2.1.0' -i inventory.ini
Запустить playbook только на указанных хостах
ansible-playbook site.yml --limit 'web-01,web-02' -i inventory.ini
Запуск по тегам
ansible
Выполнить только задачи с указанными тегами
ansible-playbook site.yml --tags 'config,restart' -i inventory.ini
Пропустить теги
ansible
Пропустить задачи с указанными тегами
ansible-playbook site.yml --skip-tags 'slow,optional' -i inventory.ini
Увеличить подробность вывода
ansible
Максимальная подробность для отладки; сохранить в лог
ansible-playbook site.yml -vvv -i inventory.ini 2>&1 | tee /tmp/ansible.log
Зашифровать переменную Vault
ansible
Зашифровать значение inline для использования в vars
ansible-vault encrypt_string 'supersecret' --name 'db_password'
Расшифровать vault-файл
ansible
Показать расшифрованное содержимое vault-файла
ansible-vault view group_vars/all/vault.yml
Отправить локальный файл на все хосты с правами
ansible all -m copy -a 'src=./nginx.conf dest=/etc/nginx/nginx.conf owner=root mode=0644' -i inventory.ini
Ad-hoc перезапуск сервиса с повышением привилегий (-b)
ansible webservers -m service -a 'name=nginx state=restarted' -b -i inventory.ini
Граф инвентаря
ansible
Отобразить иерархию групп инвентаря в виде дерева
ansible-inventory -i inventory.ini --graph
Тестировать роль через Molecule
ansible
Запустить полный тест Molecule: create, converge, verify, destroy
molecule test -s default
Вычисленные values
helm
Показать все values (пользователя + дефолты чарта) для релиза
helm get values <release> -n <ns> --all
Рендер и валидация манифестов без установки
helm template myrelease ./mychart -f values-prod.yaml | kubectl apply --dry-run=client -f -
Diff до апгрейда
helm
Показать YAML diff текущего и нового релиза (плагин helm-diff)
helm diff upgrade <release> ./mychart -f values.yaml -n <ns>
Автоматический откат если апгрейд не прошёл за 5 минут
helm upgrade <release> ./mychart -n <ns> -f values.yaml --atomic --timeout 5m
Переопределить конкретные values чарта из командной строки
helm upgrade <release> ./mychart --set image.tag=v1.5.0 --set replicaCount=3
Манифест релиза
helm
Вывести Kubernetes YAML применённый текущим релизом
helm get manifest <release> -n <ns>
Показать историю и откатить на предыдущую ревизию
helm history <release> -n <ns> && helm rollback <release> 0 -n <ns>
Версии чарта
helm
Список всех версий чарта в настроенных репозиториях
helm search repo <chart> --versions | head -20
Вывести дефолтный values.yaml для версии чарта
helm show values <repo>/<chart> --version <ver>
Загрузить чарт в OCI-совместимый container registry
helm push mychart-1.0.0.tgz oci://registry.example.com/charts
Установить из OCI
helm
Установить чарт напрямую из OCI реестра
helm install myrelease oci://registry.example.com/charts/mychart --version 1.0.0
Линтинг чарта
helm
Проверить структуру и шаблоны чарта в строгом режиме
helm lint ./mychart -f values-prod.yaml --strict
Принудительно заменить ресурсы которые нельзя пропатчить
helm upgrade <release> ./mychart -n <ns> --force
Установить плагины
helm
Установить плагин helm-diff для сравнения релизов
helm plugin install https://github.com/databus23/helm-diff
Форматировать все файлы
terraform
Рекурсивно форматировать все .tf файлы в поддиректориях
terraform fmt -recursive
Валидация конфигурации
terraform
Проверить синтаксис конфигурации без обращения к remote state
terraform validate
Plan с файлом переменных
terraform
Сгенерировать план с prod переменными, сохранить в файл
terraform plan -var-file=prod.tfvars -out=prod.tfplan
Применить сохранённый план
terraform
Применить ранее сохранённый план без повторного подтверждения
terraform apply prod.tfplan
Ресурс в state
terraform
Вывести все атрибуты конкретного ресурса из state
terraform state show 'aws_instance.web[0]'
Переместить ресурс в state
terraform
Переименовать или переместить ресурс без уничтожения
terraform state mv 'aws_instance.web' 'module.app.aws_instance.web'
Импортировать существующий ресурс
terraform
Взять существующий ресурс под управление Terraform
terraform import 'aws_s3_bucket.mybucket' my-existing-bucket
Пометить ресурс для пересоздания
terraform
Пометить ресурс для уничтожения и пересоздания при следующем apply
terraform taint 'aws_instance.web[0]'
Удалить ресурс из state
terraform
Удалить ресурс из state без его уничтожения в облаке
terraform state rm 'aws_instance.legacy'
Вывести outputs
terraform
Вывести все outputs в компактном JSON
terraform output -json | jq 'to_entries[] | {(.key): .value.value}'
Уничтожить конкретный ресурс
terraform
Уничтожить один ресурс без полного плана
terraform destroy -target='aws_instance.web' -auto-approve
Разблокировать state
terraform
Освободить заблокированный state после неудачного apply
terraform force-unlock <lock-id>
Создать и переключить workspace
terraform
Создать и активировать Terraform workspace
terraform workspace new staging && terraform workspace select staging
Граф зависимостей
terraform
Отобразить граф зависимостей как SVG (требует graphviz)
terraform graph | dot -Tsvg > graph.svg && open graph.svg
Список провайдеров с версиями
terraform
Зафиксировать версии провайдеров для нескольких платформ
terraform providers lock -platform=linux_amd64 -platform=darwin_arm64
Отфильтровать элементы массива где value не null
jq '[.[] | select(.value != null)]' data.json
Подсчитать записи сгруппированные по полю status
jq 'group_by(.status) | map({status: .[0].status, count: length})' data.json
Глубокое слияние двух JSON объектов (правый приоритетнее)
jq -s '.[0] * .[1]' base.json override.json
Опциональные цепочки с запасным значением по умолчанию
jq '.config?.database?.host // "localhost"' config.json
Получить 5 последних событий отсортированных по timestamp
jq 'sort_by(.timestamp) | reverse | .[0:5]' events.json
JSON в CSV
jq
Вывести выбранные поля в формате CSV
jq -r '.[] | [.id, .name, .status] | @csv' data.json
Добавить новую пару ключ-значение в каждый элемент массива
jq '[.[] | . + {"env": "prod"}]' items.json
Рекурсивно привести все строковые значения к нижнему регистру
jq 'walk(if type == "string" then ascii_downcase else . end)' data.json
Мгновенный запрос вектора
prometheus
Выполнить мгновенный PromQL-запрос через HTTP API
curl -sG 'http://prometheus:9090/api/v1/query' --data-urlencode 'query=up' | jq '.data.result'
Range-запрос для графика
prometheus
Получить данные временного ряда для метрики rate за диапазон
curl -sG 'http://prometheus:9090/api/v1/query_range' --data-urlencode 'query=rate(http_requests_total[5m])' --data-urlencode 'start=1h' --data-urlencode 'end=now' --data-urlencode 'step=60'
Топ N серий по значению
prometheus
PromQL: топ 10 подов по скорости использования CPU
topk(10, sum by (pod) (rate(container_cpu_usage_seconds_total[5m])))
Правило алерта на диск
prometheus
PromQL: алерт когда / диск занят более чем на 85%
100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100) > 85
Перезагрузить конфиг Prometheus
prometheus
Горячая перезагрузка конфига и правил без перезапуска
curl -X POST http://prometheus:9090/-/reload
Активные алерты
prometheus
Показать только активные алерты с именем и важностью
curl -s http://prometheus:9090/api/v1/alerts | jq '.data.alerts[] | select(.state=="firing") | {name: .labels.alertname, severity: .labels.severity}'
Список всех метрик
prometheus
Подсчитать метрики и показать первые 20
curl -s http://prometheus:9090/api/v1/label/__name__/values | jq '.data | length, .[0:20]'
Мощность серий по job
prometheus
PromQL: подсчитать активные серии сгруппированные по job
count by (job) ({__name__=~".+"})
Заглушить алерт
prometheus
Создать тишину в Alertmanager на 2 часа
amtool silence add alertname=HighMemory --duration=2h --comment='Investigating'
Статус TSDB
prometheus
Просмотр TSDB head: чанки и активные серии
curl -s http://prometheus:9090/api/v1/status/tsdb | jq '{head_chunks: .data.headStats.numChunks, series: .data.headStats.numSeries}'
Подключиться к базе данных
postgres
Интерактивная сессия psql к базе данных
psql -h localhost -U myuser -d mydb
EXPLAIN ANALYZE запроса
postgres
План запроса с реальным временем и буферами
psql -U myuser -d mydb -c 'EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT * FROM orders WHERE status = $1;'
Медленные запросы
postgres
Топ 10 запросов с наибольшим суммарным временем выполнения
psql -U postgres -d mydb -c "SELECT round(total_exec_time::numeric,2) ms, calls, round((total_exec_time/calls)::numeric,2) avg_ms, query FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;"
Активные запросы
postgres
Выполняющиеся запросы с длительностью и SQL
psql -U postgres -c "SELECT pid, now()-query_start AS duration, state, left(query,80) FROM pg_stat_activity WHERE state <> 'idle' ORDER BY duration DESC;"
Убить долгий запрос
postgres
Завершить все запросы выполняющиеся дольше 5 минут
psql -U postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE now()-query_start > interval '5 min' AND state = 'active';"
Размеры таблиц
postgres
Топ 20 таблиц по размеру включая индексы и TOAST
psql -U myuser -d mydb -c "SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) size FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC LIMIT 20;"
Использование индексов
postgres
Какие индексы используются и как часто
psql -U myuser -d mydb -c "SELECT relname, indexrelname, idx_scan, idx_tup_read FROM pg_stat_user_indexes ORDER BY idx_scan DESC LIMIT 20;"
Неиспользуемые индексы
postgres
Индексы которые ни разу не использовались — кандидаты на удаление
psql -U myuser -d mydb -c "SELECT schemaname, tablename, indexname, idx_scan FROM pg_stat_user_indexes WHERE idx_scan = 0 AND NOT indisprimary ORDER BY pg_relation_size(indexrelid) DESC;"
Дамп базы данных
postgres
Дамп в custom-формате (быстрейший, поддерживает параллельное восстановление)
pg_dump -U myuser -d mydb -F c -f mydb.dump
Восстановить базу
postgres
Параллельное восстановление 4 потоками с удалением существующих объектов
pg_restore -U myuser -d mydb -j 4 --clean mydb.dump
Vacuum и analyze таблицы
postgres
Освободить мёртвые кортежи и обновить статистику для планировщика
psql -U myuser -d mydb -c 'VACUUM (VERBOSE, ANALYZE) orders;'
Лаг репликации
postgres
Состояние репликации и лаг в байтах по репликам
psql -U postgres -c "SELECT client_addr, state, sent_lsn, replay_lsn, (sent_lsn - replay_lsn) AS lag_bytes FROM pg_stat_replication;"
Блокировки
postgres
Активные блокировки с состоянием и запросом
psql -U postgres -d mydb -c "SELECT pid, relation::regclass, mode, granted, left(query,60) FROM pg_locks l JOIN pg_stat_activity a USING(pid) WHERE relation IS NOT NULL ORDER BY granted;"
Плавная перезагрузка конфига без разрыва соединений
nginx -s reload
Скомпилированные модули
nginx
Список встроенных и динамических модулей в бинарнике
nginx -V 2>&1 | tr ' ' '\n' | grep module
Следить за access log
nginx
Стримить IP, путь, код ответа и размер ответа
tail -f /var/log/nginx/access.log | awk '{print $1, $7, $9, $10}'
Запросы по коду ответа
nginx
Частота каждого HTTP кода в access log
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
Топ 10 запрашиваемых URL
nginx
Самые популярные пути из access log
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
Топ IP по числу запросов
nginx
Топ 10 клиентских IP по числу запросов
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
Блок rate limiting
nginx
Лимит 10 запросов/с на IP с burst 20 (добавить в http/server)
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req zone=api burst=20 nodelay;
Round-robin upstream с резервом и keepalive соединениями
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080 backup;
keepalive 32;
}
Включить gzip
nginx
Сжимать текстовые ответы ≥1KB на уровне 6
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1024;
gzip_comp_level 6;
JSON ответ об ошибке
nginx
Кастомное JSON-тело для ответа на rate limit или ошибку
error_page 429 /429.json;
location = /429.json {
default_type application/json;
return 429 '{"error":"rate_limited"}';
}
Редирект на HTTPS
nginx
Постоянный редирект всего HTTP трафика на HTTPS
server {
listen 80;
return 301 https://$host$request_uri;
}
Активные соединения
nginx
Встроенная страница статуса: активные, чтение, запись, ожидание
curl -s http://localhost/stub_status
Заблокировать подсеть и конкретный IP в location/server блоке
deny 192.168.1.0/24;
deny 10.0.0.1;
allow all;
Проксировать WebSocket
nginx
WebSocket прокси с обязательными заголовками Upgrade
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
Сгенерировать RSA ключ
openssl
Сгенерировать 4096-битный RSA закрытый ключ
openssl genrsa -out private.key 4096
Сгенерировать Ed25519 ключ
openssl
Современный Ed25519 ключ (меньше и быстрее RSA)
openssl genpkey -algorithm ed25519 -out private.key && openssl pkey -in private.key -pubout -out public.key
Создать CSR
openssl
Запрос на подпись сертификата для передачи в CA
openssl req -new -key private.key -out request.csr -subj '/CN=example.com/O=MyOrg/C=RU'
Самоподписанный сертификат
openssl
Создать самоподписанный сертификат и ключ одной командой
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'
Детали сертификата
openssl
Subject, Issuer, даты действия, SAN
openssl x509 -in cert.pem -noout -text | grep -E 'Subject:|Issuer:|Not (Before|After)|DNS:'
Срок действия сертификата
openssl
Вывести дату начала и окончания действия
openssl x509 -in cert.pem -noout -dates
Проверить сертификат по CA
openssl
Проверить цепочку сертификатов по CA-bundle
openssl verify -CAfile ca.pem cert.pem
Совпадение сертификата и ключа
openssl
Убедиться что сертификат и ключ соответствуют друг другу
diff <(openssl x509 -pubkey -noout -in cert.pem) <(openssl pkey -pubout -in key.pem) && echo 'MATCH'
Конвертировать PEM в PKCS#12
openssl
Упаковать сертификат + ключ + CA в .p12 файл
openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ca.pem -out bundle.p12 -name myalias
Извлечь сертификат из PKCS#12
openssl
Разделить .p12 на отдельные PEM файлы сертификата и ключа
openssl pkcs12 -in bundle.p12 -nokeys -out cert.pem && openssl pkcs12 -in bundle.p12 -nocerts -nodes -out key.pem
Проверить TLS сертификат сервера
openssl
Срок и издатель TLS-сертификата живого сервера
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject -issuer
Проверить цепочку сертификатов
openssl
Показать полную цепочку: leaf → intermediate → root
openssl s_client -connect example.com:443 -showcerts 2>/dev/null | openssl crl2pkcs7 -nocrl | openssl pkcs7 -print_certs -noout -text | grep -E 'Subject:|Issuer:'
Зашифровать файл AES-256
openssl
Зашифровать файл паролем AES-256-CBC + PBKDF2
openssl enc -aes-256-cbc -pbkdf2 -in secret.txt -out secret.enc
Расшифровать AES-256 файл
openssl
Расшифровать файл зашифрованный командой выше
openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out secret.txt
Случайный hex-токен
openssl
Сгенерировать 64-символьный hex токен (например для API ключей)
openssl rand -hex 32
Подключиться к существующей именованной сессии
tmux attach-session -t work
Уменьшить текущую панель на 5 строк (-U вверх, -L влево, -R вправо)
tmux resize-pane -D 5
Отправлять ввод во все панели одновременно (операции на нескольких серверах)
tmux setw synchronize-panes on
Выполнить команду в каждой панели текущей сессии
tmux list-panes -s -F '#{session_name}:#{window_index}.#{pane_index}' | xargs -I{} tmux send-keys -t {} 'uptime' Enter
Найти 'error' во всех файлах /var/log (любой регистр)
grep -ri 'error' /var/log/
Вывести только количество совпадающих строк
grep -c 'POST /api' /var/log/nginx/access.log
Извлечь IP-адреса из лога через Perl-regex
grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' access.log | sort -u
Убрать строки-комментарии и пустые строки из конфига
grep -v '^#' /etc/nginx/nginx.conf | grep -v '^\s*$'
Рекурсивный поиск только по .py файлам
grep -r --include='*.py' 'import os' /srv/app/
Исключить директории
grep
Рекурсивный поиск игнорируя .git и node_modules
grep -r --exclude-dir='.git' --exclude-dir='node_modules' 'TODO' .
Показать файл и номер строки для каждого совпадения
grep -rn 'panic:' /var/log/app/
Предпросмотр замены без записи в файл
rg 'old_value' --replace 'new_value' --passthru config.yaml
Суммарные совпадения, файлы, время поиска
rg 'error' /var/log/ --stats 2>&1 | tail -5
Обрабатывать бинарный файл как текст для поиска в памяти
grep -a 'password' /proc/<pid>/mem 2>/dev/null | strings | head -20
Найти строки содержащие ERROR, WARN или CRIT
grep -E '(ERROR|WARN|CRIT)' app.log | tail -50
Включить и запустить сервис
systemd
Включить автозапуск и запустить немедленно одной командой
systemctl enable --now myapp.service
Перечитать определения юнитов и перезапустить сервис
systemctl daemon-reload && systemctl restart myapp.service
Создать drop-in файл с частичными переопределениями
systemctl edit myapp.service
Содержимое unit-файла
systemd
Вывести полный unit-файл включая drop-in файлы
systemctl cat myapp.service
Анализ времени загрузки
systemd
Топ 20 юнитов по времени инициализации
systemd-analyze blame | head -20
Граф зависимостей загрузки
systemd
Граф зависимостей загрузки в формате SVG
systemd-analyze dot --require | dot -Tsvg > boot.svg && open boot.svg
Создать простой unit-файл
systemd
Минимальный шаблон systemd service unit
cat > /etc/systemd/system/myapp.service <<EOF
[Unit]
Description=My App
After=network.target
[Service]
ExecStart=/usr/bin/myapp
Restart=always
RestartSec=5
User=appuser
[Install]
WantedBy=multi-user.target
EOF
Запустить временный one-shot юнит от конкретного пользователя
systemd-run --uid=1000 --gid=1000 --wait /usr/bin/myapp --task
Создать systemd таймер
systemd
Замена cron с Persistent=true для пропущенных запусков
cat > /etc/systemd/system/backup.timer <<EOF
[Unit]
Description=Daily backup
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
Лимит памяти для сервиса
systemd
Применить cgroup лимиты без редактирования unit-файла
systemctl set-property myapp.service MemoryMax=512M CPUQuota=50%
Использование ресурсов сервисом
systemd
Текущие память, CPU и потоки из cgroup
systemctl status myapp.service | grep -E 'Memory:|CPU:|Tasks:'
Список socket юнитов
systemd
Все socket-активируемые юниты и их состояние
systemctl list-units --type=socket --all
Замаскировать сервис
systemd
Полностью запретить запуск сервиса любыми средствами
systemctl mask snapd.service
Переменные среды сервиса
systemd
Переменные среды переданные в сервис
systemctl show myapp.service -p Environment
Создать и активировать изолированное Python-окружение
python3 -m venv .venv && source .venv/bin/activate
Установить из requirements
python
Установить зависимости без кэша pip
pip install -r requirements.txt --no-cache-dir
Сохранить точные версии всех установленных пакетов
pip freeze > requirements.txt
Устаревшие пакеты
python
Список пакетов для которых доступны новые версии
pip list --outdated --format=columns
Запустить модуль как скрипт
python
Раздать текущую директорию по HTTP на порту 8080
python3 -m http.server 8080
Форматировать JSON-файл через стандартную библиотеку
python3 -m json.tool < input.json
Профилировать скрипт
python
CPU профилирование отсортированное по накопительному времени
python3 -m cProfile -s cumulative script.py | head -30
Установить breakpoint в коде
python
Встроенный breakpoint() аналог import pdb; pdb.set_trace()
breakpoint() # Python 3.7+ — drops into pdb at this line
Запустить тесты через pytest
python
Остановить на первом провале, подробный вывод, краткий трейсбэк
pytest -x -v --tb=short tests/
Скомпилировать в байткод для поиска синтаксических ошибок
python3 -m py_compile script.py && echo OK
Предпросмотр изменений, затем применить форматирование Black
black --check --diff . && black .
Линтинг через ruff
python
Быстрый линтер с автофиксом (замена flake8, isort, pyupgrade)
ruff check . --fix
Проверка типов через mypy
python
Строгая статическая проверка типов пакета
mypy --strict --ignore-missing-imports src/
Атрибуты объекта
python
Список публичных атрибутов любого Python объекта
python3 -c "import json; print([x for x in dir(json) if not x.startswith('_')])"
Явно указать файл идентификации
ssh -i ~/.ssh/id_ed25519 user@host
Прыжок через бастион до внутреннего хоста
ssh -J bastion.example.com user@internal-host
Цепочка нескольких jump-хостов в одной команде
ssh -J user@bastion1,user@bastion2 user@target
Пробросить localhost:5432 на db.internal:5432 через бастион
ssh -L 5432:db.internal:5432 user@bastion -N
Опубликовать локальный порт 3000 как 8080 на VPS
ssh -R 8080:localhost:3000 user@vps -N
Переиспользовать существующее соединение для последующих команд
ssh -o ControlMaster=auto -o ControlPath=~/.ssh/mux-%r@%h:%p -o ControlPersist=10m user@host
Выполнить команду по SSH без интерактивной оболочки
ssh user@host 'sudo systemctl status nginx'
Рекурсивное копирование на нестандартном порту
scp -r -P 2222 ./dist/ user@host:/var/www/app/
Пробросить SSH агент на удалённый хост (использовать осторожно)
ssh -A user@bastion
Запустить агент и загрузить ключ для сессии
eval $(ssh-agent) && ssh-add ~/.ssh/id_ed25519
Псевдоним: команда 'ssh dev' применяет все настройки
cat >> ~/.ssh/config <<'EOF'
Host dev
HostName 10.0.0.5
User ubuntu
IdentityFile ~/.ssh/dev_key
ProxyJump bastion
EOF
Получить и вывести fingerprint host keys без подключения
ssh-keyscan -t ed25519,rsa host 2>/dev/null | ssh-keygen -lf -
Принудительная команда и ограничение IP в authorized_keys
echo 'from="10.0.0.0/8",no-agent-forwarding,no-port-forwarding,command="/usr/bin/backup.sh" <pubkey>' >> ~/.ssh/authorized_keys
KQL: диапазонный запрос
kibana
События за последний час с медленными ответами
response_time > 500 AND @timestamp > now-1h
KQL: фильтр вложенного поля
kibana
Фильтр по вложенным полям метаданных Kubernetes
kubernetes.pod.name: web-* AND kubernetes.namespace: prod
Зарегистрировать новый index pattern через Kibana REST API
curl -X POST http://kibana:5601/api/saved_objects/index-pattern -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"attributes":{"title":"logs-*","timeFieldName":"@timestamp"}}'
Экспортировать объекты
kibana
Экспортировать дашборды и визуализации в NDJSON
curl -X POST http://kibana:5601/api/saved_objects/_export -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"type":["dashboard","visualization"],"includeReferencesDeep":true}' -o export.ndjson
Импортировать объекты
kibana
Импортировать дашборды/визуализации из NDJSON
curl -X POST http://kibana:5601/api/saved_objects/_import?overwrite=true -H 'kbn-xsrf: true' -F file=@export.ndjson
Здоровье Kibana
kibana
Общее состояние и версия Kibana
curl -s http://kibana:5601/api/status | jq '{status: .status.overall.level, version: .version.number}'
Список index patterns
kibana
Все зарегистрированные index patterns
curl -s http://kibana:5601/api/saved_objects/_find?type=index-pattern | jq '.saved_objects[].attributes.title'
Запрос в Dev Tools Console
kibana
Запускать Elasticsearch запросы прямо в Dev Tools
GET logs-*/_search
{
"query": {"match": {"level": "error"}},
"size": 10
}
Сбросить кэш Kibana
kibana
Сбросить объект конфигурации Kibana
curl -X DELETE http://kibana:5601/api/saved_objects/config/7.17.0 -H 'kbn-xsrf: true'
Информация о Space
kibana
Список всех Kibana Spaces по ID
curl -s http://kibana:5601/api/spaces/space | jq '.[].id'
Скопировать дашборд в другой Kibana Space
curl -X POST http://kibana:5601/api/spaces/_copy_saved_objects -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"spaces":["staging"],"objects":[{"type":"dashboard","id":"my-dash"}],"overwrite":true}'
Запечатать secret из файла
sealed-secrets
Зашифровать Kubernetes Secret YAML в SealedSecret
kubeseal --format=yaml < secret.yaml > sealed-secret.yaml
Запечатать со scope
sealed-secrets
Создать и запечатать secret с cluster-wide scope
kubectl create secret generic mysecret --dry-run=client --from-literal=token=abc123 -o yaml | kubeseal --scope cluster-wide -o yaml
Получить публичный сертификат
sealed-secrets
Сохранить сертификат для offline шифрования
kubeseal --fetch-cert --controller-name=sealed-secrets --controller-namespace=kube-system > pub.pem
Offline запечатывание с сертификатом
sealed-secrets
Зашифровать без доступа к кластеру используя сохранённый сертификат
kubeseal --cert pub.pem --format yaml < secret.yaml > sealed.yaml
Логи контроллера
sealed-secrets
Стриминг логов контроллера для отладки проблем шифрования
kubectl logs -n kube-system -l app.kubernetes.io/name=sealed-secrets -f
Список всех SealedSecrets
sealed-secrets
Все SealedSecrets по всем неймспейсам
kubectl get sealedsecrets -A
Перезапечатать с новым ключом
sealed-secrets
Получить расшифрованный secret и перешифровать текущим ключом
kubectl get secret mysecret -o yaml | kubeseal --format yaml > sealed-new.yaml
Статус SecretStore
external-secrets
Все SecretStore и статус синхронизации
kubectl get secretstore,clustersecretstore -A -o wide
Принудительно обновить ExternalSecret
external-secrets
Запустить немедленную синхронизацию через обновление аннотации
kubectl annotate externalsecret mysecret force-sync=$(date +%s) --overwrite
Статус синхронизации ExternalSecret
external-secrets
Условия синхронизации: Ready, SecretSynced
kubectl get externalsecret mysecret -o jsonpath='{.status.conditions[*]}'
ExternalSecret с шаблоном
external-secrets
Просмотр шаблонизации значений в spec ExternalSecret
kubectl get externalsecret mysecret -o yaml | grep -A10 'template:'
Список всех ExternalSecrets
external-secrets
Компактная таблица всех ExternalSecrets с состоянием синхронизации
kubectl get externalsecrets -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,STORE:.spec.secretStoreRef.name,READY:.status.conditions[0].status'
Изменить YAML файл на месте с yq v4
yq -i '.spec.replicas = 3' deployment.yaml
Добавить переменную среды в первый контейнер
yq -i '.spec.containers[0].env += {"name":"DEBUG","value":"true"}' deployment.yaml
Удалить ключ
yq
Удалить конкретную аннотацию из YAML
yq -i 'del(.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration")' resource.yaml
Глубокое слияние двух YAML документов
yq eval-all 'select(fileIndex==0) * select(fileIndex==1)' base.yaml override.yaml
Выбрать только Running pods из списка
yq '.items[] | select(.status.phase == "Running")' pods.yaml
Точечное обновление образа для именованного контейнера
yq -i '(.spec.template.spec.containers[] | select(.name == "app") | .image) = "myapp:v2.0.0"' deployment.yaml
Извлечь metadata.name из всех YAML файлов в директории
yq '.metadata.name' manifests/*.yaml
Plan для одного модуля
terragrunt
Запустить terraform plan для текущего Terragrunt модуля
terragrunt plan
Apply для всех модулей
terragrunt
Применить все модули стека в порядке зависимостей
terragrunt run-all apply
Destroy всех модулей
terragrunt
Уничтожить все модули стека без интерактивного подтверждения
terragrunt run-all destroy --terragrunt-non-interactive
Вывод значений remote state
terragrunt
Все выходные значения Terragrunt в JSON
terragrunt output -json | jq '.'
Init с обновлением провайдеров
terragrunt
Переинициализировать и обновить фиксации провайдеров
terragrunt init --upgrade
Показать итоговый конфиг
terragrunt
Дамп разрешённого terragrunt.hcl как JSON для отладки
terragrunt render-json
Граф зависимостей модулей
terragrunt
Визуализировать граф зависимостей модулей Terragrunt
terragrunt graph-dependencies | dot -Tsvg > deps.svg
Исключить модуль из run-all
terragrunt
Пропустить конкретный модуль при операциях по всему стеку
terragrunt run-all plan --terragrunt-exclude-dir ./module-to-skip
Авто-повтор при ошибках блокировки
terragrunt
Получить выходы зависимостей из state чтобы избежать проблем порядка
terragrunt apply --terragrunt-no-auto-approve --terragrunt-fetch-dependency-output-from-state
Отладка с эфемерным контейнером
k8s-debug
Подключить эфемерный контейнер для отладки к работающему поду
kubectl debug -it mypod --image=busybox --target=app
Запустить debug pod на узле
k8s-debug
Привилегированная оболочка на узле кластера через debug pod
kubectl debug node/my-node -it --image=ubuntu
Exec в sidecar контейнер
k8s-debug
Открыть оболочку в конкретном контейнере мульти-контейнерного пода
kubectl exec -it mypod -c sidecar-name -- /bin/sh
Проверить requests/limits
k8s-debug
Показать requests и limits для каждого контейнера
kubectl get pod mypod -o jsonpath='{range .spec.containers[*]}{.name}{"\t"}{.resources}{"\n"}{end}'
Состояние узла (describe)
k8s-debug
Проверить условия узла: Ready, MemoryPressure, DiskPressure
kubectl describe node my-node | grep -A5 'Conditions:'
Поды по потреблению ресурсов
k8s-debug
Топ 20 подов по потреблению памяти
kubectl top pods -A --sort-by=memory | head -20
Следить за событиями пода
k8s-debug
Стриминг событий для конкретного пода
kubectl get events -n mynamespace --field-selector involvedObject.name=mypod --watch
Скопировать файл из пода
k8s-debug
Скачать файл из работающего контейнера
kubectl cp mynamespace/mypod:/var/log/app.log ./app.log
Создать топик
kafka
Создать новый топик Kafka с 6 партициями и RF=3
kafka-topics.sh --bootstrap-server kafka:9092 --create --topic my-topic --partitions 6 --replication-factor 3
Отставание на каждой партиции для consumer group
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --describe --group my-group
Сбросить offsets на начало топика
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --group my-group --reset-offsets --to-earliest --topic my-topic --execute
Отправлять сообщения key:value интерактивно
kafka-console-producer.sh --bootstrap-server kafka:9092 --topic my-topic --property 'key.separator=:' --property 'parse.key=true'
Читать с начала топика
kafka
Прочитать первые 10 сообщений из топика
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic my-topic --from-beginning --max-messages 10
Увеличить количество партиций (уменьшить нельзя)
kafka-topics.sh --bootstrap-server kafka:9092 --alter --topic my-topic --partitions 12
Конфигурация топика
kafka
Все переопределённые значения конфигурации топика
kafka-configs.sh --bootstrap-server kafka:9092 --describe --entity-type topics --entity-name my-topic
Задать retention топика
kafka
Установить 7-дневное хранение для топика
kafka-configs.sh --bootstrap-server kafka:9092 --alter --entity-type topics --entity-name my-topic --add-config retention.ms=604800000
Метаданные брокера
kafka
Список всех API версий поддерживаемых брокером
kafka-broker-api-versions.sh --bootstrap-server kafka:9092
Очереди с количеством сообщений
rabbitmq
Имя очереди, количество сообщений и потребителей
rabbitmqctl list_queues name messages consumers
Очистить очередь
rabbitmq
Удалить все сообщения из очереди не удаляя её
rabbitmqctl purge_queue my_queue -p my_vhost
Список exchanges
rabbitmq
Все exchanges с типом и признаком durable
rabbitmqctl list_exchanges name type durable
Включить management plugin
rabbitmq
Включить веб-интерфейс на порту 15672
rabbitmq-plugins enable rabbitmq_management && rabbitmqctl restart
Экспорт конфигурации (бэкап)
rabbitmq
Экспортировать все vhost, exchanges и политики через management API
curl -s -u guest:guest http://localhost:15672/api/definitions | jq '.' > rabbitmq-defs.json
Подключиться по URI
mongodb
Подключиться к Atlas или любому MongoDB URI с mongosh
mongosh 'mongodb+srv://user:pass@cluster.example.com/mydb'
План выполнения запроса
mongodb
Статистика выполнения включая использование индекса
db.orders.find({status:'new'}).explain('executionStats')
Создать составной индекс
mongodb
Индекс по userId↑ и createdAt↓
db.orders.createIndex({userId: 1, createdAt: -1}, {background: true})
Пример aggregation pipeline
mongodb
Топ 10 пользователей по сумме оплаченных заказов
db.orders.aggregate([{$match:{status:'paid'}},{$group:{_id:'$userId',total:{$sum:'$amount'}}},{$sort:{total:-1}},{$limit:10}])
Отставание репликации
mongodb
Отставание вторичных нод и окно oplog
rs.printSecondaryReplicationInfo()
Операции выполняющиеся более 5 секунд
db.currentOp({active:true, secs_running:{$gt:5}})
Дамп базы данных
mongodb
Дамп всех коллекций базы в BSON файлы
mongodump --uri='mongodb://localhost:27017' --db=mydb --out=/backup/$(date +%F)
Подключиться и выполнить запрос
clickhouse
Выполнить одиночный запрос через clickhouse-client
clickhouse-client --host ch.example.com --user default --password secret -q 'SELECT version()'
Текущие запросы
clickhouse
Самые долгие текущие запросы в системе
clickhouse-client -q 'SELECT query_id, elapsed, query FROM system.processes ORDER BY elapsed DESC LIMIT 10'
Убить текущий запрос
clickhouse
Принудительно остановить запрос по query_id
clickhouse-client -q "KILL QUERY WHERE query_id = 'abc-123'"
Использование диска таблицами
clickhouse
Топ 20 таблиц по размеру на диске
clickhouse-client -q 'SELECT database, table, formatReadableSize(sum(bytes_on_disk)) AS size FROM system.parts GROUP BY database, table ORDER BY sum(bytes_on_disk) DESC LIMIT 20'
Оптимизация таблицы (форсировать слияние)
clickhouse
Форсировать слияние всех партов (осторожно на больших таблицах)
clickhouse-client -q 'OPTIMIZE TABLE mydb.mytable FINAL'
Загрузить CSV из файла
clickhouse
Массовая загрузка CSV файла в таблицу ClickHouse
clickhouse-client --query 'INSERT INTO mydb.events FORMAT CSVWithNames' < events.csv
Статус репликации
clickhouse
Отставание репликации на запаздывающих репликах
clickhouse-client -q 'SELECT database, table, is_leader, queue_size, absolute_delay FROM system.replicas WHERE absolute_delay > 0'
Статус узлов кластера
cassandra
Кольцо кластера со статусом, нагрузкой и владением данными
nodetool status
Статистика компакции
cassandra
Отображает ожидающие и активные задачи компакции
nodetool compactionstats
Выполнить CQL в cqlsh
cassandra
Выполнить CQL команду без интерактивной оболочки
cqlsh -u cassandra -p cassandra -e 'DESCRIBE KEYSPACES;'
Статистика таблицы
cassandra
Задержки чтения/записи и количество SSTable для таблицы
nodetool tablestats mykeyspace.mytable
Починить keyspace
cassandra
Полная починка для синхронизации всех реплик keyspace
nodetool repair -full mykeyspace
Сбросить memtables на диск
cassandra
Принудительно сбросить данные из памяти в SSTables
nodetool flush mykeyspace
Здоровье кластера
elasticsearch
Статус кластера: green/yellow/red с количеством шардов
curl -s http://es:9200/_cluster/health?pretty
Список индексов с размером
elasticsearch
Все индексы по убыванию размера
curl -s 'http://es:9200/_cat/indices?v&s=store.size:desc'
Удалить старый индекс
elasticsearch
Удалить конкретный индекс (необратимо)
curl -X DELETE http://es:9200/logs-2024.01.01
Поиск с Query DSL
elasticsearch
Найти последние 5 записей уровня error
curl -X GET 'http://es:9200/logs-*/_search?pretty' -H 'Content-Type: application/json' -d '{"query":{"match":{"level":"error"}},"size":5}'
Распределение шардов
elasticsearch
Все шарды с состоянием и причиной назначения
curl -s 'http://es:9200/_cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason'
Принудительное переназначение шарда
elasticsearch
Повторить назначение всех неудавшихся шардов
curl -X POST http://es:9200/_cluster/reroute?retry_failed=true
Обновить настройки индекса
elasticsearch
Изменить количество реплик у живого индекса
curl -X PUT 'http://es:9200/my-index/_settings' -H 'Content-Type: application/json' -d '{"index":{"number_of_replicas":1}}'
Создать шаблон индекса
elasticsearch
Авто-конфигурация новых индексов по маске logs-*
curl -X PUT 'http://es:9200/_index_template/logs-tpl' -H 'Content-Type: application/json' -d '{"index_patterns":["logs-*"],"template":{"settings":{"number_of_shards":2}}}'
Снимок в репозиторий
elasticsearch
Создать снимок кластера синхронно
curl -X PUT 'http://es:9200/_snapshot/my_repo/snap1?wait_for_completion=true'
Разделитель — двоеточие; вывести имя пользователя и UID
awk -F: '{print $1, $3}' /etc/passwd
Вывести номер строки и содержимое для строк с ERROR
awk '/ERROR/ {print NR": "$0}' app.log
Сумма колонки
awk
Накопить числовую колонку и вывести сумму
awk '{sum += $4} END {print sum}' access.log
Диапазонный паттерн: строки от START до END включительно
awk '/START/,/END/' file.txt
Обработать все строки кроме первой (заголовка)
awk 'NR>1 {print $1, $2}' data.csv
Частота первого поля (например IP-адресов)
awk '{count[$1]++} END {for (k in count) print count[k], k}' access.log | sort -rn
Строки где поле 2 > 500 И поле 5 равно POST
awk '$2 > 500 && $5 == "POST"' access.log
Выровненный вывод с фиксированными шириной столбцов
awk '{printf "%-20s %5d\n", $1, $2}' data.txt
Загрузить программу awk из внешнего файла
awk -f transform.awk input.txt
Глобальная замена с записью обратно в файл
awk '{gsub(/foo/, "bar"); print}' input.txt > tmp && mv tmp input.txt
Корректный разбор CSV полей с кавычками через FPAT
gawk -v FPAT='([^,]+)|("[^"]+")' '{print $2}' data.csv
Блоки BEGIN/END
awk
Выполнить код до и после обработки всех строк
awk 'BEGIN{print "Start"} {lines++} END{print lines" lines processed"}' file.txt
Left-join data.txt с lookup.txt по первому полю
awk 'NR==FNR{a[$1]=$2; next} $1 in a {print $0, a[$1]}' lookup.txt data.txt
Заменить первое вхождение 'foo' на 'bar' в каждой строке
sed 's/foo/bar/' file.txt
Заменить все вхождения в строке флагом /g
sed 's/foo/bar/g' file.txt
Изменить файл на месте (без резервной копии)
sed -i 's/old/new/g' config.cfg
Редактировать на месте, сохранив оригинал как .bak
sed -i.bak 's/old/new/g' file.txt
Удалить все строки-комментарии начинающиеся с #
sed '/^#/d' config.txt
Удалить все пустые строки или строки из пробелов
sed '/^[[:space:]]*$/d' file.txt
Вывести строки с 10 по 20 (подавить вывод флагом -n)
sed -n '10,20p' file.txt
Вставить строку-комментарий перед каждой директивой server_name
sed '/^server_name/i # Added by deploy script' nginx.conf
Добавить строку настройки после заголовка [defaults]
sed '/^\[defaults\]/a ansible_python_interpreter=/usr/bin/python3' ansible.cfg
Флаг /I в GNU sed для замены без учёта регистра
sed 's/error/ERROR/gI' file.txt
Применить несколько замен одной командой
sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt
Обрезать пробелы в начале и конце каждой строки
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' file.txt
Применить замену только к строкам с 5 по 15
sed '5,15s/DEBUG/INFO/g' app.log
Вывести значение DB_HOST из .env файла
sed -n 's/^DB_HOST=//p' .env
/ ищет вперёд, ? — назад; n/N — следующее/предыдущее
/pattern (n/N next/prev)
?pattern (backward)
Перейти в начало (gg), переформатировать до конца файла (=G)
gg=G
Макросы автоматизируют повторяющиеся правки в vim
qa (record into a)
q (stop)
@a (play)
10@a (play 10 times)
Вертикальное разделение; Ctrl-w + стрелки для навигации
:vsplit other.txt
Вывести что будет выполнено без фактического запуска
make -n deploy
Переопределить переменные Makefile при вызове
make IMAGE=myapp:v2 TAG=latest push
Список всех целей
make
Соглашение: ## комментарии делают Makefile самодокументируемым
grep -E '^[a-zA-Z_-]+:.*?##' Makefile | awk -F':.*##' '{printf "%-20s %s\n", $1, $2}'
Использовать Makefile в другой директории или с другим именем
make -f infra/Makefile plan
Предотвратить путаницу между целями и файлами с тем же именем
.PHONY: build test deploy clean
$@ раскрывается в имя текущей цели внутри рецепта
build:
docker build -t $(IMAGE) . && echo 'Built $@'
Разбить большой Makefile на модульные включения
include mk/*.mk
Запустить контейнер без root
podman
Запустить nginx в фоне без привилегий root
podman run -d --name web -p 8080:80 nginx:alpine
Собрать образ
podman
Собрать из Containerfile (совместим с Dockerfile)
podman build -t myapp:latest -f Containerfile .
Сгенерировать systemd unit
podman
Создать systemd unit для управления жизненным циклом контейнера
podman generate systemd --new --name web > ~/.config/systemd/user/web.service
Запустить Kubernetes YAML
podman
Запустить pod из Kubernetes манифеста (локальное тестирование)
podman play kube deployment.yaml
Сгенерировать Kubernetes-совместимый манифест из запущенного пода
podman generate kube mypod > pod.yaml
Создать и использовать pod
podman
Объединить контейнеры в pod с общим сетевым пространством имён
podman pod create --name mypod -p 8080:80 && podman run -d --pod mypod nginx:alpine
Просмотр слоёв образа
podman
Список слоёв файловой системы образа
podman image inspect myapp:latest | jq '.[0].RootFS.Layers'
Все контейнеры: имя, статус, образ
podman ps -a --format '{{.Names}}\t{{.Status}}\t{{.Image}}'
Неинтерактивно удалить все завершённые контейнеры
podman container prune -f
Войти в registry
podman
Аутентифицироваться в container registry
podman login registry.example.com -u myuser
Войти в ArgoCD
argocd
Аутентифицировать argocd CLI через начальный admin secret
argocd login argocd.example.com --username admin --password $(kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath='{.data.password}' | base64 -d)
Список всех приложений
argocd
Все приложения ArgoCD с статусом синхронизации и здоровья
argocd app list
Синхронизировать приложение
argocd
Запустить синхронизацию и удалить лишние ресурсы
argocd app sync myapp --prune
Принудительно получить манифесты заново из Git
argocd app get myapp --refresh
Откат к предыдущей версии
argocd
Откатиться к ревизии 3 в истории приложения
argocd app rollback myapp 3
Создать приложение через CLI
argocd
Декларативно создать приложение ArgoCD с автосинхронизацией
argocd app create myapp --repo https://github.com/org/repo --path k8s/prod --dest-server https://kubernetes.default.svc --dest-namespace default --sync-policy automated
Удалить объект приложения ArgoCD без удаления ресурсов Kubernetes
argocd app delete myapp --cascade=false
Добавить кластер в ArgoCD
argocd
Зарегистрировать внешний кластер через kubeconfig контекст
argocd cluster add my-k8s-context
Переопределить образ
argocd
Переопределить образ контейнера для Kustomize приложения без изменений в Git
argocd app set myapp --kustomize-image myapp=myregistry/myapp:v1.2.3
Отключить автоматическую синхронизацию для ручного управления
argocd app set myapp --sync-policy none
Следить за синхронизацией
argocd
Ждать пока приложение синхронизировано и здорово (CI)
argocd app wait myapp --sync --health --timeout 120
Создать проект с RBAC
argocd
Изолировать приложения в проекте с ограничениями по источнику и назначению
argocd proj create myproject --description 'Production apps' --dest 'https://kubernetes.default.svc,prod' --src 'https://github.com/org/*'
Кросс-компиляция Go бинаря для Linux/amd64
GOOS=linux GOARCH=amd64 go build -o bin/app ./cmd/app
Запустить все тесты с определением race condition
go test -race -count=1 ./...
Сгенерировать HTML отчёт о покрытии и открыть в браузере
go test -coverprofile=cov.out ./... && go tool cover -html=cov.out
Скачать конкретную версию модуля и обновить go.mod
go get github.com/some/pkg@v1.2.3
Добавить недостающие и удалить неиспользуемые зависимости
go mod tidy
Запустить бенчмарки, собрать CPU профиль, открыть pprof UI
go test -cpuprofile=cpu.prof -bench=. ./... && go tool pprof cpu.prof
Трассировать новый процесс
strace
Запустить команду под strace и сохранить вывод в файл
strace -o trace.log ls /tmp
Подключиться к процессу
strace
Трассировать системные вызовы уже запущенного процесса
strace -p $(pgrep nginx | head -1) -o /tmp/nginx.trace
Фильтровать только syscall связанные с файлами
strace -e trace=openat,read,write curl https://example.com
Статистика syscall
strace
Сводная таблица количества и времени системных вызовов
strace -c -e trace=all python3 app.py
Трассировать syscall во всех дочерних процессах
strace -f -e trace=process nginx -t
Показать временны́е метки
strace
-tt добавляет абсолютное время; -T — время каждого вызова
strace -tt -T curl https://example.com 2>&1 | head -40
Трассировать доступ к файлам
strace
Найти файлы которые процесс пытается открыть но не находит
strace -e trace=openat -e trace=file myapp 2>&1 | grep 'ENOENT'
Трассировать сетевые syscall
strace
Захватить все сетевые системные вызовы
strace -e trace=network,socket curl https://example.com 2>&1 | grep -v '^---'
Захват в файл
tcpdump
Сохранить пакеты в PCAP файл для анализа в Wireshark
tcpdump -i eth0 -w /tmp/capture.pcap
Читать PCAP файл
tcpdump
Воспроизвести и отобразить пакеты из сохранённого PCAP файла
tcpdump -r /tmp/capture.pcap -n | head -50
Захват DNS запросов
tcpdump
Мониторинг всех DNS запросов на любом интерфейсе
tcpdump -i any -n port 53
HTTP GET запросы
tcpdump
Захватить и вывести строки HTTP GET запросов
tcpdump -i any -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | grep 'GET /'
Захват между двумя хостами
tcpdump
BPF фильтр: трафик строго между двумя узлами
tcpdump -i eth0 'host 10.0.0.1 and host 10.0.0.2'
Подробный вывод с содержимым
tcpdump
Подробный вывод с ASCII содержимым пакетов PostgreSQL
tcpdump -i eth0 -vvv -A -s 0 port 5432
Ограничить количество пакетов
tcpdump
Остановиться после захвата 100 пакетов
tcpdump -i eth0 -c 100 -w capture.pcap
Список правил с номерами
iptables
Правила цепочки INPUT с счётчиками пакетов/байт
iptables -L INPUT --line-numbers -n -v
Разрешить входящий порт
iptables
Добавить правило разрешающее входящий HTTPS трафик
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Заблокировать IP адрес
iptables
Вставить DROP правило на позицию 1 для конкретного IP источника
iptables -I INPUT 1 -s 203.0.113.5 -j DROP
NAT: маскировать исходящий
iptables
Включить IP маскировку для исходящего трафика (роутер/NAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Сохранить и восстановить правила
iptables
Сохранить правила между перезагрузками
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4
Ограничить частоту соединений
iptables
Разрешить не более 3 новых SSH соединений в минуту
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 5 -j ACCEPT
nftables: добавить accept правило
iptables
Принять входящий TCP трафик на порту 8080 в nftables
nft add rule inet filter input tcp dport 8080 accept
nftables: сбросить все правила
iptables
Удалить все правила nftables (осторожно: сбрасывает весь firewall)
nft flush ruleset
Все файлы (сокеты, обычные, пайпы) открытые процессом nginx
lsof -p $(pgrep nginx) | head -30
Файлы удалённые но ещё занятые процессами (утечка диска)
lsof | grep '(deleted)'
Фильтр установленных TCP соединений с информацией о процессах
ss -tanp | grep ESTAB
Dev режим (горячая перезагрузка)
skaffold
Сборка, деплой и слежение за изменениями; авто-пересборка при сохранении
skaffold dev --port-forward
Разовая сборка и деплой
skaffold
Собрать образы, запушить в registry и задеплоить в кластер
skaffold run --tail
Только сборка (без деплоя)
skaffold
Собрать образы и экспортировать метаданные артефактов в файл
skaffold build --file-output=artifacts.json
Деплой готовых артефактов
skaffold
Деплой с использованием заранее собранных image digest из CI
skaffold deploy --build-artifacts=artifacts.json
Только рендеринг манифестов
skaffold
Сгенерировать итоговый Kubernetes YAML без применения
skaffold render --output=manifests.yaml
Использовать конкретный профиль
skaffold
Активировать именованный профиль из skaffold.yaml
skaffold dev -p staging
Диагностика проблем конфигурации
skaffold
Проверить skaffold.yaml и вывести разрешённую конфигурацию
skaffold diagnose
Удалить задеплоенные ресурсы
skaffold
Удалить все Kubernetes ресурсы созданные командой skaffold run
skaffold delete
Проверка соединения (ping)
ansible
Проверить SSH соединение со всеми хостами в инвентаре
ansible all -i inventory.ini -m ping
Ad-hoc команда в shell
ansible
Выполнить команду на всех webservers с sudo (-b)
ansible webservers -i inventory.ini -m shell -a 'df -h' -b
Собрать факты для хоста
ansible
Собрать и просмотреть Ansible факты для одного хоста
ansible myhost -i inventory.ini -m setup | jq '.ansible_facts.ansible_distribution'
Плейбук с тегами
ansible
Выполнить только задачи с тегами nginx или ssl
ansible-playbook site.yml -i inventory.ini --tags 'nginx,ssl'
Пропустить теги
ansible
Пропустить задачи с тегами slow или optional
ansible-playbook site.yml -i inventory.ini --skip-tags 'slow,optional'
Inline шифрование одной строки для использования в vars
ansible-vault encrypt_string 'mysecretpassword' --name 'db_password'
Ограничить конкретными хостами
ansible
Запустить плейбук только на web01 и web02
ansible-playbook deploy.yml -i inventory.ini --limit 'web01,web02'
Пошаговый режим выполнения
ansible
Подтверждать каждую задачу перед выполнением (режим отладки)
ansible-playbook site.yml -i inventory.ini --step
Подключить KV v2 secrets engine на пути 'secret/'
vault secrets enable -path=secret kv-v2
Записать секрет
vault
Сохранить несколько пар ключ-значение по пути
vault kv put secret/myapp/config db_password=s3cr3t api_key=abc123
Прочитать секрет
vault
Прочитать KV v2 секрет и извлечь данные
vault kv get -format=json secret/myapp/config | jq '.data.data'
Выпустить обновляемый токен с TTL 24ч для CI
vault token create -policy=read-only -period=24h -display-name=ci-pipeline
Включить Kubernetes auth
vault
Разрешить подам аутентифицироваться в Vault через ServiceAccount JWT
vault auth enable kubernetes && vault write auth/kubernetes/config kubernetes_host=https://kubernetes.default.svc
Получить краткосрочные Postgres credentials через database secrets engine
vault read database/creds/readonly-role
Вручную запечатать или распечатать Vault ключом
vault operator seal
vault operator unseal $UNSEAL_KEY
Показать что изменится в кластере (требует плагин helm-diff)
helm diff upgrade myrelease ./chart -f values.yaml
Вывести пользовательские values задеплоенного релиза
helm get values myrelease -n mynamespace
Все values включая defaults чарта
helm get values myrelease -a -n mynamespace
Откатить релиз к ревизии номер 2
helm rollback myrelease 2 -n mynamespace
История релиза
helm
Список всех ревизий Helm релиза со статусом
helm history myrelease -n mynamespace
Создать версионный .tgz пакет из директории чарта
helm package ./mychart --version 1.2.3 --app-version 1.2.3
Опубликовать чарт в OCI-совместимый registry (Helm 3.8+)
helm push mychart-1.2.3.tgz oci://registry.example.com/charts
Линтинг чарта
helm
Валидировать структуру чарта и обнаружить ошибки шаблонов
helm lint ./mychart -f values.yaml --strict
Определить сервисы и их версии на открытых портах
nmap -sV 192.168.1.1
Включает определение ОС, версий, скрипты и traceroute
nmap -A 192.168.1.1
Обнаружить живые хосты без сканирования портов
nmap -sn 192.168.1.0/24
Сканировать только указанные порты
nmap -p 22,80,443,8080 192.168.1.1
Запустить именованный скрипт Nmap Scripting Engine
nmap --script http-title 192.168.1.1
Сканировать только 100 наиболее распространённых портов
nmap -F 192.168.1.1
Сканирование портов
netcat
Сканировать порты 20-80 на хосте (режим zero I/O)
nc -zv 192.168.1.1 20-80
Принять файл (получатель)
netcat
Принять файл от netcat-отправителя
nc 192.168.1.1 4444 > file.tar.gz
Простой HTTP-запрос
netcat
Отправить сырой HTTP GET-запрос через netcat
echo -e "GET / HTTP/1.0
" | nc example.com 80
Записать CPU-циклы
perf
Записать данные о производительности с графом вызовов
perf record -g ./my_app
Записывать только события cache-miss
perf record -e cache-misses ./my_app
Показать использование CPU по функциям в реальном времени
perf top
Показать аннотированный ассемблер для самых горячих функций
perf annotate
Собрать данные для генерации flamegraph
perf record -F 99 -ag -- sleep 30 && perf script > out.perf
Подсчитать конкретные системные вызовы
perf stat -e syscalls:sys_enter_read ./my_app
Профилировать уже запущенный процесс 5 секунд
perf record -p 1234 sleep 5
Запустить сервер Grafana
grafana
Запустить сервис Grafana через systemd
systemctl start grafana-server
Проверить статус Grafana
grafana
Проверить, запущен ли сервис Grafana
systemctl status grafana-server
Создать API-ключ (CLI)
grafana
Сбросить пароль администратора через Grafana CLI
grafana-cli admin reset-admin-password newpassword
Список плагинов
grafana
Показать все доступные плагины из маркетплейса Grafana
grafana-cli plugins list-remote
Установить плагин
grafana
Установить плагин Grafana по имени
grafana-cli plugins install grafana-piechart-panel
Экспорт дашборда через API
grafana
Экспортировать JSON дашборда через HTTP API Grafana
curl -s http://admin:admin@localhost:3000/api/dashboards/uid/MY_UID | jq .dashboard
Импорт дашборда через API
grafana
Импортировать JSON дашборда через HTTP API Grafana
curl -X POST -H "Content-Type: application/json" -d @dashboard.json http://admin:admin@localhost:3000/api/dashboards/import
Показать все настроенные источники данных
curl -s http://admin:admin@localhost:3000/api/datasources | jq .[].name
Добавить новый источник данных через API Grafana
curl -X POST -H "Content-Type: application/json" -d @ds.json http://admin:admin@localhost:3000/api/datasources
Grafana автоматически загружает дашборды из директории провизионирования при запуске
# Place YAML in /etc/grafana/provisioning/dashboards/
Установить Istio с демо-профилем конфигурации
istioctl install --set profile=demo -y
Включить инжект сайдкара
istio
Включить автоматический инжект сайдкара Envoy для неймспейса
kubectl label namespace default istio-injection=enabled
Проверить статус прокси
istio
Получить статус синхронизации всех Envoy-прокси в меше
istioctl proxy-status
Анализировать конфигурацию Istio на потенциальные проблемы
istioctl analyze
Показать полную конфигурацию Envoy-прокси для деплоя
istioctl proxy-config all deploy/myapp
Применить VirtualService для определения правил маршрутизации
kubectl apply -f virtualservice.yaml
Применить DestinationRule для балансировки нагрузки и circuit breaker
kubectl apply -f destinationrule.yaml
Включить mTLS (строгий)
istio
Включить строгий mutual TLS для всех воркloadов в неймспейсе
kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: default
spec:
mtls:
mode: STRICT
EOF
Инжект сайдкара вручную
istio
Вручную инжектировать сайдкар Istio в манифест деплоя
istioctl kube-inject -f deployment.yaml | kubectl apply -f -
Дашборд (Jaeger)
istio
Открыть дашборд Jaeger для распределённой трассировки
istioctl dashboard jaeger
Просмотр логов доступа
istio
Просмотреть логи доступа Envoy из контейнера сайдкара
kubectl logs -l app=myapp -c istio-proxy | head -50
Инжект ошибок — задержка
istio
Добавить искусственную задержку для тестирования отказоустойчивости
# In VirtualService spec.http[].fault.delay
Зеркалирование трафика
istio
Зеркалировать трафик на теневой сервис для тестирования
# In VirtualService spec.http[].mirror
Установить cert-manager через Helm
cert-manager
Установить cert-manager с CRD в отдельном неймспейсе
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
Проверить поды cert-manager
cert-manager
Убедиться, что все компоненты cert-manager запущены
kubectl get pods -n cert-manager
Список сертификатов
cert-manager
Показать все ресурсы Certificate во всех неймспейсах
kubectl get certificates -A
Описать сертификат
cert-manager
Показать статус и события ресурса Certificate
kubectl describe certificate my-cert -n default
Список запросов сертификатов
cert-manager
Показать все объекты CertificateRequest
kubectl get certificaterequests -A
Создать ClusterIssuer (Let's Encrypt)
cert-manager
Применить манифест ClusterIssuer для Let's Encrypt ACME
kubectl apply -f clusterissuer-letsencrypt.yaml
Проверить ClusterIssuers
cert-manager
Показать все ClusterIssuer и их статус готовности
kubectl get clusterissuers
Вручную запустить обновление
cert-manager
Принудительно обновить сертификат через cert-manager
kubectl annotate certificate my-cert cert-manager.io/issueTime="$(date -u +%Y-%m-%dT%H:%M:%SZ)" --overwrite
Просмотр логов cert-manager
cert-manager
Стримить логи основного контроллера cert-manager
kubectl logs -n cert-manager deploy/cert-manager -f
Установить Crossplane через Helm
crossplane
Установить Crossplane в отдельном неймспейсе
helm install crossplane crossplane-stable/crossplane --namespace crossplane-system --create-namespace
Список провайдеров
crossplane
Показать все установленные провайдеры Crossplane
kubectl get providers
Установить AWS провайдер
crossplane
Применить манифест Provider Crossplane для AWS
kubectl apply -f provider-aws.yaml
Список управляемых ресурсов
crossplane
Показать все управляемые ресурсы Crossplane всех типов
kubectl get managed
Список составных ресурсов
crossplane
Показать все экземпляры составных ресурсов Crossplane
kubectl get composite
Описать управляемый ресурс
crossplane
Показать статус и условия управляемого ресурса
kubectl describe rdsinstance my-db
Список XRD
crossplane
Показать все CompositeResourceDefinitions (XRD)
kubectl get compositeresourcedefinitions
Проверить здоровье провайдера
crossplane
Показать готовность провайдера и установленные пакеты
kubectl describe provider provider-aws
Трассировка ресурса Crossplane
crossplane
Трассировать составной ресурс и все его дочерние ресурсы
crossplane beta trace xr my-xr
Установить Linkerd CLI
linkerd
Скачать и установить Linkerd CLI
curl --proto =https --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
Проверка перед установкой
linkerd
Проверить, что кластер соответствует требованиям перед установкой Linkerd
linkerd check --pre
Установить CRD Linkerd
linkerd
Установить CRD Linkerd в кластер
linkerd install --crds | kubectl apply -f -
Установить control plane Linkerd
linkerd
Установить компоненты control plane Linkerd
linkerd install | kubectl apply -f -
Инжектировать сайдкар в деплой
linkerd
Инжектировать прокси-сайдкар Linkerd в существующий деплой
kubectl get deploy my-app -o yaml | linkerd inject - | kubectl apply -f -
Показать метрики golden-сигналов для всех деплоев в реальном времени
linkerd viz stat deploy
Топ живых запросов
linkerd
Показать top-подобный вид живых запросов к деплою
linkerd viz top deploy/my-app
Перехватить живой трафик
linkerd
Смотреть живой поток HTTP запросов/ответов для деплоя
linkerd viz tap deploy/my-app
Мониторинг сетевых событий
cilium
Показывать сброшенные пакеты в реальном времени
cilium monitor --type drop
Сканировать весь кластер Kubernetes на уязвимости и мисконфигурации
trivy k8s --report summary cluster
Вывод в формате SARIF
trivy
Вывести результаты сканирования в SARIF для CI/IDE
trivy image --format sarif --output results.sarif myimage:tag
Фильтр по серьёзности
trivy
Показывать только HIGH и CRITICAL уязвимости
trivy image --severity HIGH,CRITICAL myimage:tag
Пропустить уязвимости, для которых нет исправления
trivy image --ignore-unfixed myimage:tag
Сканировать SBOM
trivy
Сканировать файл Software Bill of Materials на уязвимости
trivy sbom ./sbom.json
Описать ресурс
k9s
Показать полный вывод kubectl describe для выбранного ресурса
d (on selected resource)
Открыть YAML ресурса для редактирования в k9s
e (on selected resource)
Собрать и применить
kustomize
Собрать kustomize overlay и применить к кластеру
kubectl apply -k ./overlays/prod
Предпросмотр вывода
kustomize
Отрендерить вывод kustomize без применения
kubectl kustomize ./overlays/prod | head -100
Установить тег образа
kustomize
Обновить тег образа в kustomization.yaml
kustomize edit set image myapp=myapp:v1.2.3
Добавить configMapGenerator
kustomize
Добавить генератор ConfigMap в kustomization.yaml
kustomize edit add configmap my-config --from-literal=key=value
Список ресурсов в overlay
kustomize
Быстро показать все виды ресурсов в kustomize-сборке
kustomize build ./overlays/prod | grep "^kind:"
Применить strategic merge patch
kustomize
Использовать patchesStrategicMerge для частичного переопределения базовых ресурсов
# Add patchesStrategicMerge in kustomization.yaml
Проверить статус APISIX
apisix
Проверить, что поды APISIX запущены в Kubernetes
kubectl get pods -n ingress-apisix
Показать все настроенные маршруты APISIX
curl http://apisix-admin:9180/apisix/admin/routes -H "X-API-KEY: $ADMIN_KEY"
Создать маршрут
apisix
Создать простой маршрут с roundrobin upstream
curl -X PUT http://apisix-admin:9180/apisix/admin/routes/1 -H "X-API-KEY: $ADMIN_KEY" -d '{"uri":"/api/*","upstream":{"nodes":{"backend:8080":1},"type":"roundrobin"}}'
Включить плагин на маршруте
apisix
Добавить плагин ограничения скорости на существующий маршрут
curl -X PATCH http://apisix-admin:9180/apisix/admin/routes/1 -H "X-API-KEY: $ADMIN_KEY" -d '{"plugins":{"limit-req":{"rate":100,"burst":50,"key":"remote_addr"}}}'
Список upstream-ов
apisix
Показать все настроенные upstream-ы APISIX
curl http://apisix-admin:9180/apisix/admin/upstreams -H "X-API-KEY: $ADMIN_KEY"
Создать consumer
apisix
Создать consumer APISIX с key-аутентификацией
curl -X PUT http://apisix-admin:9180/apisix/admin/consumers/myuser -H "X-API-KEY: $ADMIN_KEY" -d '{"plugins":{"key-auth":{"key":"user-api-key"}}}'
Включить JWT-аутентификацию на маршруте через конфигурацию плагина
# Add jwt-auth to plugins in route or consumer config
Список плагинов
apisix
Показать все доступные плагины APISIX
curl http://apisix-admin:9180/apisix/admin/plugins/list -H "X-API-KEY: $ADMIN_KEY"
Горячая перезагрузка конфигурации APISIX без даунтайма
apisix reload
Показать использование inode на файловых системах (важно при многих мелких файлах)
df -i
Найти большие файлы
linux
Найти файлы больше 100МБ на всей файловой системе
find / -type f -size +100M 2>/dev/null | sort
Подсчитать открытые файловые дескрипторы для запущенного процесса
cat /proc/$(pgrep myapp)/fd | wc -l
Показать все расположения системных и пользовательских cron-задач
ls /etc/cron.* /var/spool/cron/crontabs/
Показать все переменные окружения в алфавитном порядке
printenv | sort
Мониторинг дискового I/O
linux
Показывать расширённую статистику дискового I/O каждую секунду
iostat -xz 1
Тюнинг TCP — backlog
linux
Увеличить максимальный backlog для сокетов
sysctl -w net.core.somaxconn=65535
Интерактивно изменить порядок, squash или отредактировать последние 5 коммитов
git rebase -i HEAD~5
Сохранить рабочие изменения с описательным сообщением stash
git stash push -m "WIP: feature X"
Применить конкретный stash без его удаления
git stash apply stash@{2}
Начать бинарный поиск коммита, введшего баг
git bisect start && git bisect bad && git bisect good v1.0
Показать полную историю изменений файла включая переименования
git log --follow -p -- path/to/file.py
Откатить HEAD на один коммит, сохранив стейдженные изменения
git reset --soft HEAD~1
Удалить неотслеживаемые файлы и директории из рабочего дерева
git clean -fd
Показать локальные ветки, уже смёрженные в main
git branch --merged main
Перейти к типу ресурса: нажать ':' и ввести имя ресурса
:pod
# or :svc :deployment :helmreleases :kustomizations
Фильтровать ресурсы по паттерну имени (нажать '/')
/pattern
# Press '/' then type filter string, Esc to clear
Описать выбранный ресурс (аналог kubectl describe)
d
# Press 'd' on selected resource to view describe output
k9s — логи пода
k9s
Просмотр логов пода (нажать 'l' на поде, '0' — все контейнеры)
l
# Press 'l' on a pod; '0' for all containers, 'w' to wrap
k9s — шелл в под
k9s
Открыть шелл в контейнере пода (нажать 's' на поде)
s
# Press 's' on a pod to open a shell (uses first container)
Удалить выбранный ресурс (Ctrl+D, подтвердить Enter)
ctrl-d
# Press Ctrl+D on selected resource, confirm with Enter
Создать конфиг провижининга дашбордов Grafana (перезапустить после)
cat > /etc/grafana/provisioning/dashboards/default.yaml <<EOF
apiVersion: 1
providers:
- name: default
type: file
folder: ''
options:
path: /var/lib/grafana/dashboards
EOF
Роутинг 80% трафика на v1, 20% на v2 (канарейка)
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- myapp
http:
- route:
- destination:
host: myapp
subset: v1
weight: 80
- destination:
host: myapp
subset: v2
weight: 20
EOF
Определить сабсеты и circuit breaker (outlier detection)
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: myapp
spec:
host: myapp
trafficPolicy:
outlierDetection:
consecutive5xxErrors: 5
interval: 10s
baseEjectionTime: 30s
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
EOF
Инжект ошибок — задержка
istio
Добавить задержку 5s для 100% запросов для тестирования
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- myapp
http:
- fault:
delay:
percentage:
value: 100
fixedDelay: 5s
route:
- destination:
host: myapp
EOF
Зеркалирование трафика
istio
Зеркалировать 100% трафика на теневой сервис v2
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- myapp
http:
- route:
- destination:
host: myapp
subset: v1
weight: 100
mirror:
host: myapp
subset: v2
mirrorPercentage:
value: 100
EOF
Создать ClusterIssuer (Let's Encrypt)
cert-manager
Создать ClusterIssuer Let's Encrypt prod с HTTP-01 solver
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
EOF
Установить AWS провайдер
crossplane
Установить Crossplane AWS provider из реестра Upbound
kubectl apply -f - <<EOF
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws
spec:
package: xpkg.upbound.io/upbound/provider-aws:latest
EOF
Применить strategic merge patch
kustomize
Создать strategic merge patch и добавить в kustomization.yaml
cat > patch.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: myapp
resources:
limits:
memory: 512Mi
EOF
echo 'patches:\n- path: patch.yaml' >> kustomization.yaml
Добавить плагин jwt-auth к маршруту через Admin API
curl -X PATCH http://apisix-admin:9180/apisix/admin/routes/1 \
-H "X-API-KEY: $ADMIN_KEY" \
-d '{"plugins":{"jwt-auth":{"header":"Authorization","query":"jwt"}}}'
Фильтр по приоритету ошибок и выше
journalctl
Только err/crit/alert/emerg за текущую загрузку; -p принимает и диапазон (например -p warning..err)
journalctl -p err -b --no-pager
Фильтр по полю systemd-юнита
journalctl
Доверенная выборка по индексированному полю, в отличие от -u, который подмешивает coredump и шум PAM
journalctl _SYSTEMD_UNIT=sshd.service --since today
Объединение фильтров полей через OR
journalctl
Одиночный + это логическое OR между группами условий; совпадения одного поля внутри группы тоже по OR
journalctl _PID=1 + _COMM=sshd -o short-iso
Regex-поиск по сообщениям
journalctl
PCRE2-поиск по MESSAGE; сузьте шум через -p err. note: это скан, не по индексу
journalctl --grep='oom|out of memory' --case-sensitive=false -b
Подробный вывод со всеми полями
journalctl
Показывает все поля журнала включая курсор записи; -o json-pretty для машинного разбора
journalctl -u <name> -o verbose -n 1
Список загрузок и чтение прошлой
journalctl
Индекс прошлых загрузок, затем -b -1 читает предыдущую. note: нужно постоянное хранилище
journalctl --list-boots && journalctl -b -1 -p warning
Кольцевой буфер ядра с временем
journalctl
Как dmesg, но с реальным временем и фильтром по загрузке; -k это _TRANSPORT=kernel
journalctl -k -b -o short-precise --grep='segfault|I/O error'
Размер журнала и очистка по размеру/времени
journalctl
Показать занятый объём, затем урезать до 500M и удалить записи старше 2 дней
journalctl --disk-usage; journalctl --vacuum-size=500M --vacuum-time=2d
Слежение по syslog-идентификатору
journalctl
Слежение по SYSLOG_IDENTIFIER (не по юниту); -t повторяется, --no-hostname убирает лишнее
journalctl -t kernel -t sudo -f --no-hostname
Вывод выбранных полей колонками
journalctl
Урезать JSON до нужных полей и вывести табуляцией; __REALTIME_TIMESTAMP в микросекундах
journalctl -u <name> --output=json --output-fields=__REALTIME_TIMESTAMP,MESSAGE,_PID | jq -r '[.__REALTIME_TIMESTAMP,._PID,.MESSAGE]|@tsv'
Слияние журналов из каталога
journalctl
Чтение журналов из другого корня (rescue/форензика) без копирования файлов
journalctl -D /mnt/crashed/var/log/journal -b -1 -p err
Проверка постоянного хранилища журнала
journalctl
Если /var/log/journal нет, логи в памяти и теряются при перезагрузке. fix: mkdir + systemd-tmpfiles
journalctl --header | grep -iE 'file|state'; ls -d /var/log/journal 2>/dev/null || echo volatile
Критическая цепочка загрузки
systemd
Показывает последовательную цепочку зависимостей, реально задерживающую загрузку; честнее, чем blame
systemd-analyze critical-chain <unit>
Диаграмма загрузки SVG
systemd
Генерирует полную параллельную диаграмму загрузки в SVG, чтобы визуально найти последовательные задержки
systemd-analyze plot > boot.svg
Drop-in переопределение
systemd
Правка юнита через drop-in без изменения файла поставщика; --full форкает весь юнит целиком
systemctl edit <unit> # writes /etc/systemd/system/<unit>.d/override.conf
Перечитать файлы юнитов
systemd
Перечитывает файлы юнитов после правки; учтите: обязателен после ручных изменений, иначе systemctl предупредит об устаревшем конфиге
systemctl daemon-reload
Маскировать юнит
systemd
mask связывает юнит с /dev/null, чтобы он не запускался даже как зависимость; жёстче, чем disable
systemctl mask <unit> && systemctl unmask <unit>
Дерево зависимостей
systemd
Обход полного дерева Wants/Requires для отладки тянущихся зависимостей; --reverse покажет, кому нужен юнит
systemctl list-dependencies <unit> --all
Память юнита в реальном времени
systemd
Читает живые метрики cgroup прямо из systemd без ps; MemoryCurrent — учтённый RSS процесса
systemctl show -p MainPID,MemoryCurrent,TasksCurrent <unit>
Сбросить состояние failed
systemd
Сбрасывает счётчики сбоев, чтобы юниты перезапустились после StartLimitBurst, затем показывает оставшиеся failed
systemctl reset-failed && systemctl list-units --state=failed
Временный одноразовый таймер
systemd
Создаёт одноразовую пару таймер+сервис без написания файлов юнитов; удобно для разовых задач по расписанию
systemd-run --on-calendar='*-*-* 03:00:00' --unit=backup /usr/local/bin/backup.sh
Лимит ресурсов на лету
systemd
Применяет лимиты cgroup на лету без перезапуска; --runtime делает их временными (исчезают после перезагрузки)
systemctl set-property --runtime <unit> MemoryMax=512M CPUQuota=50%
Очередь активных задач
systemd
Показывает выполняющиеся задачи start/stop для диагностики зависшей загрузки или застрявшего юнита
systemctl list-jobs
Учёт памяти сервиса (cgroup v2)
cgroups
Текущее потребление памяти против жёсткого лимита сервиса; current около max — скорый OOM
cat /sys/fs/cgroup/system.slice/<name>.service/memory.current /sys/fs/cgroup/system.slice/<name>.service/memory.max
Память: задержки по PSI
cgroups
PSI: время простоя задач из-за реклейма памяти; рост avg10 — троттлинг до OOM
cat /sys/fs/cgroup/system.slice/<name>.service/memory.pressure
Сколько раз и на сколько мкс cgroup троттлился по квоте cpu.max
grep -E 'nr_throttled|throttled_usec' /sys/fs/cgroup/system.slice/<name>.service/cpu.stat
cpu.max — это 'квота период' в мкс; 'max' — без лимита. note: лучше systemctl set-property
cat /sys/fs/cgroup/system.slice/<name>.service/cpu.max # "max 100000" = unlimited; "50000 100000" = 0.5 core
PSI по IO плюс rbytes/wbytes/rios по major:minor; ловит шумных соседей по диску
cat /sys/fs/cgroup/system.slice/<name>.service/io.pressure /sys/fs/cgroup/system.slice/<name>.service/io.stat
Список PID в cgroup сервиса
cgroups
Все PID в слайсе сервиса; сверка с деревом из systemctl status
cat /sys/fs/cgroup/system.slice/<name>.service/cgroup.procs; systemctl status <name>.service | grep CGroup
cgls --all показывает и пустые cgroup; cgtop ранжирует слайсы по CPU/памяти/io
systemd-cgls --all --no-pager; systemd-cgtop -d 2 --depth=3
Разовый cgroup в legacy v1
cgroups
Разовый лимит через libcgroup v1. note: в единой иерархии v2 используйте systemd-run --scope -p
cgcreate -g memory:/<name>; cgset -r memory.limit_in_bytes=512M <name>; cgexec -g memory:/<name> <command>
Пространства имён конкретного PID
namespaces
Все пространства имён PID; сравнение inode-ссылок ns доказывает общий namespace
lsns -p <pid>; readlink /proc/<pid>/ns/net /proc/1/ns/net # equal inode = same netns
Tcpdump в netns контейнера с хоста
namespaces
Снифаем трафик контейнера хостовым tcpdump через его netns; в образе ничего не нужно
PID=$(docker inspect -f '{{.State.Pid}}' <name>); nsenter -t $PID -n tcpdump -ni any -c 50
Сокеты в netns/mntns процесса
namespaces
Входим в net+mount+pid ns свежего процесса и смотрим его реальные слушающие сокеты
nsenter -t $(pgrep -n <proc>) -n -m -p ss -tlnp
Изолированная песочница через unshare
namespaces
Запуск shell в новых net+pid ns с приватным /proc; ip netns для именованных netns
unshare --net --pid --fork --mount-proc bash # then: ip netns add test; ip netns exec test ip a
Добавить вторичный IP
iproute2
Назначить вторичный IP с префиксом на лету; примечание: не сохраняется после перезагрузки
ip addr add 10.0.0.5/24 dev <name> && ip addr show dev <name>
Задать MTU интерфейса
iproute2
Установить jumbo MTU и поднять линк; примечание: MTU должен совпадать на всём пути
ip link set dev <name> mtu 9000 && ip link set dev <name> up
JSON-вывод адресов в jq
iproute2
Машиночитаемый дамп интерфейсов; вывести поднятые линки и их локальные IP
ip -j a | jq -r '.[] | select(.operstate=="UP") | .ifname + " " + (.addr_info[]?.local // "-")'
Какой маршрут выбран
iproute2
Показать точный маршрут, src-адрес и интерфейс, выбранные ядром для назначения
ip route get <ip>
Маршрутизация по источнику
iproute2
Маршрутизация по адресу источника через отдельную таблицу; проверка ip rule show
ip rule add from <ip> table 100 && ip route add default via 192.168.1.1 dev <name> table 100
Команда в сетевом namespace
iproute2
Создать изолированный сетевой namespace и выполнить команды внутри него
ip netns add test && ip netns exec test ip -br a
Внести задержку и потери
iproute2
Эмулировать WAN-задержку и потери пакетов для тестов; снять через tc qdisc del
tc qdisc add dev <name> root netem delay 100ms loss 1% && tc -s qdisc show dev <name>
Удалить netem qdisc
iproute2
Удалить корневой qdisc, чтобы вернуть обычный трафик после тестов netem
tc qdisc del dev <name> root
Слежение за событиями сети
iproute2
Поток изменений маршрутов/линков/адресов/соседей в реальном времени; для отладки флаппинга
ip monitor all
FDB и порты моста
iproute2
Просмотр L2-таблицы пересылки (MAC->порт) и состояний портов моста
bridge fdb show br <name>; bridge link show
Внутренности TCP по сокету
iproute2
Показать rtt/cwnd/retrans по сокету на 443; найти медленных/лоссовых пиров
ss -tip state established '( dport = :443 )'
Закрыть сокеты по фильтру
iproute2
Принудительно закрыть подходящие сокеты (ядро>=4.9); нужен CONFIG_INET_DIAG_DESTROY
ss -K dst <ip> dport = :8080
Базовая цепочка с запретом по умолчанию; важно: сначала добавьте accept-правила, иначе заблокируете себя
nft add chain inet filter input '{ type filter hook input priority 0 ; policy drop ; }'
Именованный set как блок-лист IP
nftables
Переиспользуемый именованный set; flags interval позволяет хранить CIDR-диапазоны, а не только отдельные хосты
nft add set inet filter blocklist '{ type ipv4_addr ; flags interval ; }' && nft add element inet filter blocklist '{ 10.0.0.0/8, 192.0.2.5 }'
vmap сопоставляет ключи с вердиктами за O(1); заменяет длинную цепочку правил dport ==
nft add rule inet filter input tcp dport vmap '{ 22 : accept, 80 : accept, 443 : accept, 3306 : drop }'
Показать ruleset с хендлами правил
nftables
-a выводит '# handle N' для каждого правила; хендл нужен для удаления одного правила
nft -a list ruleset
Удалить одно правило по хендлу
nftables
Точечное удаление без сброса всей цепочки; хендл берётся из nft -a list ruleset
nft delete rule inet filter input handle 7
Именованный счётчик на правиле
nftables
Встроенный counter считает пакеты и байты; сброс через nft reset counters inet filter
nft add rule inet filter input tcp dport 22 counter accept comment \"ssh\"
SNAT masquerade для исходящего NAT
nftables
Source-NAT исходящего трафика на IP интерфейса; требует существующей postrouting-цепочки типа nat
nft add rule ip nat postrouting oifname \"eth0\" masquerade
Destination-NAT входящего трафика на бэкенд; дополните accept-правилом в forward-цепочке
nft add rule ip nat prerouting iif \"eth0\" tcp dport 443 dnat to 10.0.0.5:8443
Ограничить скорость новых соединений
nftables
Подавляет брутфорс SSH; пакеты сверх лимита проваливаются к политике цепочки
nft add rule inet filter input tcp dport 22 ct state new limit rate 10/minute accept
Транслирует события add/delete по мере появления; удобно для отладки динамических правил
nft monitor ruleset
nft -f применяет весь файл атомарно; при ошибке откат целиком, без частичного состояния
nft list ruleset > /etc/nftables.conf && nft -f /etc/nftables.conf
Аппаратная разгрузка через flowtable
nftables
Переносит установленные потоки на быстрый путь; 'flags offload' включает аппаратную разгрузку на NIC
nft add flowtable inet filter ft '{ hook ingress priority 0 ; devices = { eth0, eth1 } ; }' && nft add rule inet filter forward ct state established flow add @ft
Захват только TCP SYN-пакетов
tcpdump
Ловит только инициирующие SYN (без SYN-ACK) — для поиска сканов или переполнения backlog
tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
Захват флагов SYN и FIN
tcpdump
Показывает только пакеты открытия/закрытия соединений — для отслеживания короткоживущих сессий
tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
Фильтр по хосту без SSH-шума
tcpdump
Смотрит трафик к/от хоста, отбрасывая шум вашей собственной SSH-сессии
tcpdump -nn -i any host <ip> and not port 22
Просмотр тела пакетов в hex и ascii; -s 0 отключает обрезку по snaplen
tcpdump -nn -s 0 -X -i any port <port>
Ротация по 5 файлам по 100МБ — долгий захват не переполнит диск
tcpdump -nn -i any -s 0 -C 100 -W 5 -w /tmp/cap.pcap
Захват с ротацией по времени
tcpdump
Новый pcap каждый час с именем по времени — для захвата без присмотра
tcpdump -nn -i any -G 3600 -w '/tmp/cap-%Y%m%d-%H%M%S.pcap'
Фильтрация готового pcap офлайн
tcpdump
Повторная фильтрация сохранённого захвата без перезапуска; BPF работает при чтении
tcpdump -nn -r /tmp/cap.pcap 'port 443 and host <ip>'
Показывает DNS-запросы с MAC-адресами (-e) для привязки запросов к клиентам в LAN
tcpdump -nn -e -i any port 53
Извлечение полей в колонки
tshark
Выводит выбранные поля таблицей с заголовком; удобно подавать в awk/csv-обработку
tshark -r cap.pcap -Y http.request -T fields -e ip.src -e http.host -e http.request.uri -E header=y
Сборка TCP-потока в ascii
tshark
Собирает поток с индексом 0 в читаемый ascii; на серверах удобнее tshark, чем wireshark
tshark -r cap.pcap -q -z follow,tcp,ascii,0
Статистика TCP-разговоров
tshark
Ранжирует TCP-разговоры по байтам/пакетам — для поиска самых активных узлов в захвате
tshark -r cap.pcap -q -z conv,tcp
Число ретрансмиссий в секунду — для связи потерь пакетов со всплесками задержек приложения
tshark -i any -q -z io,stat,1,'COUNT(tcp.analysis.retransmission)tcp.analysis.retransmission'
Живой top горячих функций с цепочками вызовов; dwarf разворачивает стек без frame pointer
perf top -g --call-graph dwarf
Семплирует всю машину на 99Гц 30с, затем печатает отчёт; 99Гц уходит от синхронного алиасинга
perf record -F 99 -a -g -- sleep 30 && perf report --stdio
Конвейер flame graph
perf
Превращает perf.data в интерактивный flame graph SVG (инструменты FlameGraph от Brendan Gregg)
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
Три -d дают детали L1/LLC/TLB и простоев; показывает упор в память против упора в CPU
perf stat -d -d -d -- ./app
Записывает переключения контекста и показывает задержку пробуждения по задачам; ловит голодание в runqueue
perf sched record -- sleep 10 && perf sched latency --sort max
strace-подобная трассировка syscall со сводкой -s; меньше накладных, без остановки через ptrace
perf trace -s -p <pid>
Добавляет kprobe с аргументом и записывает его; смотрит внутренности ядра без пересборки
perf probe --add 'tcp_sendmsg size' && perf record -e probe:tcp_sendmsg -a -- sleep 5
Сводка по числу syscall
strace
Сводит число и время syscall по форкам, сортируя по времени; находит дорогой вызов
strace -c -f -S time -p <pid>
Расшифровка fd с таймингом
strace
Показывает пути/сокеты за fd плюс длительность и метки времени для файловых операций
strace -yy -T -tt -e trace=%file -p <pid>
Стек на каждый syscall
strace
Печатает стек на каждый openat, чтобы найти кто открывает файл; нужны debug-символы
strace -k -e trace=openat -f -p <pid>
Инъекция ошибок syscall
strace
Заставляет 3-й openat падать с ENOENT для проверки обработки ошибок; chaos-тест без кода
strace -f -e inject=openat:error=ENOENT:when=3 -p <pid>
Показывает только сигналы (SIGTERM/SIGCHLD), пропуская syscall; отлаживает загадочные kill. прим.: ltrace для вызовов библиотек
strace -f -e signal=all -e trace=none -p <pid>
Показывает, какой процесс занимает порт; -nP отключает резолв DNS и имён сервисов для скорости
lsof -nP -i :<port>
Все слушающие сокеты
lsof
Список всех TCP-листенеров с PID, без резолва имён; modern: ss -ltnp
lsof -nP -iTCP -sTCP:LISTEN
Находит удалённые, но ещё открытые файлы, занимающие диск; df полон, а du нет
lsof +L1
Показывает процессы, мешающие umount c 'device busy'; передайте путь точки монтирования
lsof /mnt/<name>
Убивает процесс на порту; -t выводит чистые PID, -r не запускает kill на пустом вводе
lsof -t -i:<port> | xargs -r kill
Показывает сокеты, которые приложение забыло закрыть; рост CLOSE_WAIT = утечка fd/соединений
lsof -nP -i -sTCP:CLOSE_WAIT
Показывает только сокеты, общающиеся с конкретным хостом/портом, по обоим концам
lsof -nP -i @<host>:<port>
Показывает только исполняемый код и библиотеки; -a объединяет фильтры по И, удобно после деплоя
lsof -p <pid> -a -d txt,mem
Быстрый подсчёт fd для поиска утечек против ulimit -n; быстрее: ls /proc/<pid>/fd | wc -l
lsof -nP -p <pid> | wc -l
Убирает заголовки и статистику; показывает только секцию ответа для скриптов и сравнений
dig +noall +answer example.com
Опрашивает каждый авторитативный NS напрямую; выявляет рассинхрон серийников SOA между ними
dig +nssearch example.com
Выгружает всю зону, если AXFR открыт; note: успех на публичном NS — это ошибка конфигурации
dig axfr @ns1.example.com example.com
Показывает записи RRSIG; флаг AD в строке flags означает валидированный ответ
dig +dnssec +multi example.com @1.1.1.1
Идёт по делегированию от корня до авторитативного, скрывая мусор RRSIG/DS
dig +trace +nodnssec example.com
Выявляет split-horizon или различия из-за устаревшего кэша между резолверами
diff <(dig +short @1.1.1.1 example.com) <(dig +short @8.8.8.8 example.com)
PTR для IPv6-адреса; -x сам раскрывает обратный формат по полубайтам
dig -x 2606:4700:4700::1111 +short
Вытягивает TXT-записи SPF, DMARC и DKIM одним циклом для аудита почты
for r in example.com _dmarc.example.com sel._domainkey.example.com; do dig +short TXT $r; done
Показывает, какие CA вправе выпускать сертификаты; без CAA выпустить может любой CA
dig +short CAA example.com
Возвращает priority/weight/port/target сервиса; используется AD, SIP, XMPP
dig +short SRV _sip._tcp.example.com
Проверяет доступность TCP/53; +ttlunits печатает TTL как 1h/30m, а не в секундах
dig +tcp +ttlunits +noall +answer example.com @8.8.8.8
Ловит синтаксические ошибки и пропущенные записи; запускайте перед rndc reload, чтобы избежать SERVFAIL
named-checkzone example.com /etc/bind/db.example.com
Чистит кэш, перечитывает конфиг без рестарта, проверяет; note: reload также перечитывает зоны
rndc flush && rndc reconfig && rndc status
Проверяет синтаксис конфига, затем выводит текущие аренды (срок, MAC, IP, имя хоста)
dnsmasq --test && cat /var/lib/misc/dnsmasq.leases
Полный разбор сертификата
openssl
Вывести все поля сертификата: subject, issuer, срок, расширения, SAN, key usage
openssl x509 -in cert.pem -noout -text
Проверка истечения (для CI)
openssl
Код 0, если сертификат жив дольше 24ч; удобно для мониторинга и алертов в CI
openssl x509 -in cert.pem -noout -checkend 86400 && echo OK || echo EXPIRING
Разбор цепочки с живого сервера
openssl
Получить всю цепочку с SNI; -servername обязателен для vhost/SNI-бэкендов
openssl s_client -connect <host>:443 -servername <host> -showcerts </dev/null 2>/dev/null
Извлечь список SAN
openssl
Показать только записи SAN; современные браузеры игнорируют CN, важен SAN
openssl x509 -in cert.pem -noout -ext subjectAltName
Проверить цепочку доверия; note: в -CAfile нужны промежуточные и корневой по порядку
openssl verify -CAfile ca-chain.pem cert.pem
Совпадение хэшей modulus доказывает соответствие ключа сертификату; пустой diff = совпало
diff <(openssl x509 -in cert.pem -noout -modulus | md5sum) <(openssl rsa -in key.pem -noout -modulus | md5sum)
CSR и ключ одной командой
openssl
Сгенерировать ключ и CSR с SAN; -addext избавляет от правки openssl.cnf
openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out req.csr -subj "/CN=<host>" -addext "subjectAltName=DNS:<host>"
Самоподписанный сертификат с SAN
openssl
Самоподписанный сертификат на год одной строкой; без SAN TLS-клиенты его отвергнут
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=<host>" -addext "subjectAltName=DNS:<host>"
PEM в связку PKCS12
openssl
Упаковать сертификат, ключ и цепочку в .p12 для Java-keystore и импорта в Windows
openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ca-chain.pem -out bundle.p12 -name <name>
Проверка STARTTLS
openssl
Проверить TLS на сервисах со STARTTLS; postgres меняйте на smtp/imap/mysql/ldap
openssl s_client -connect <host>:5432 -starttls postgres -showcerts </dev/null 2>/dev/null
Сгенерировать ключ Ed25519
openssl
Modern: ключи Ed25519 компактны и быстры в отличие от RSA; для подписи и mTLS
openssl genpkey -algorithm ed25519 -out ed25519.pem
Принудить версию для проверки поддержки; -tls1_3 / -no_tls1_2 для проверки политики
openssl s_client -connect <host>:443 -tls1_2 </dev/null 2>&1 | grep -E 'Protocol|Cipher'
Прерывать при ошибках, неопределённых переменных и сбоях в пайпах; разбивать только по переводу строки и табу
set -euo pipefail; IFS=$'\n\t'
Автоудаление каталога mktemp при выходе или сигнале; важно: заключайте $tmp в кавычки от пробелов
tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT INT TERM
Подстановка процессов сравнивает два потока без временных файлов
diff <(kubectl get cm a -o yaml) <(kubectl get cm b -o yaml)
mapfile -t убирает переводы строк и сохраняет пробелы в отличие от разбиения в for-цикле
mapfile -t lines < file.txt; printf '%s\n' "${lines[@]}"
basename, удаление расширения и глобальная замена без вызова sed или basename
f=/var/log/app.log.gz; echo "${f##*/}" "${f%.*}" "${f//log/LOG}"
Встроенное сопоставление по регексу извлекает группы; важно: не заключайте регекс справа в кавычки
[[ $s =~ ^([0-9]+)\.([0-9]+) ]] && echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
Запуск N параллельных задач с NUL-разделителями, безопасно для имён с пробелами
find . -name '*.log' -print0 | xargs -0 -P"$(nproc)" -n1 gzip
Проверка кода возврата каждого этапа пайпа; $? отдаёт только последнюю команду
curl -s "$url" | jq .data; echo "${PIPESTATUS[@]}"
POSIX-разбор опций с аргументами; -n принимает значение, -v является флагом
while getopts "n:v" o; do case $o in n) ns=$OPTARG;; v) verbose=1;; esac; done
SIGTERM на 30с, затем SIGKILL через 5с; код 124 означает принудительное завершение
timeout -k 5s 30s ./long_task.sh || echo "timed out: $?"
Открыть дескриптор 3 в файл, писать независимо от stdout и закрыть его
exec 3>>audit.log; echo "$(date -Is) start" >&3; exec 3>&-
zsh: рекурсивный список только обычных файлов и безопасное массовое переименование через zmv
setopt extendedglob; print -l **/*(.); autoload zmv; zmv '(*).txt' '$1.bak'
Сохраняет жёсткие ссылки, ACL, xattr и сырые uid/gid при миграции; учтите: завершающий слэш важен
rsync -aHAXv --numeric-ids /src/ user@<host>:/dst/
Показывает все изменения кодами (>f, cd, *deleting) до фактического копирования файлов
rsync -ai --dry-run --delete /src/ /dst/
Ограничивает полосу до 10 МБ/с, чтобы не забить канал; progress2 даёт общий прогресс и ETA
rsync -a --bwlimit=10M --info=progress2 /src/ user@<host>:/dst/
Бэкап в стиле Time Machine: неизменные файлы — хардлинки на prev, место занимают только дельты
rsync -a --delete --link-dest=../prev /src/ ./$(date +%F)/
Возобновляет прерванную передачу и проверяет дописанную часть по контрольной сумме; безопасно лишь при неизменном источнике
rsync -a --partial --append-verify --info=progress2 big.img user@<host>:/dst/
Идёт через нестандартный порт SSH и пропускает пути из excludes.txt (.git, node_modules, *.tmp)
rsync -a -e "ssh -p 2222" --exclude-from=excludes.txt /src/ user@<host>:/dst/
Сравнивает по контрольной сумме, а не mtime+размер; delete-after удаляет лишь после успешной передачи
rsync -ac --delete-after /src/ /dst/
Инкрементный бэкап по уровням: snapshot.snar хранит состояние, в архив идут только изменённые файлы
tar -czg snapshot.snar -f backup-$(date +%F).tgz /data
Копирует дерево без промежуточного файла, сохраняя права; для медленного канала добавьте zstd в конвейер
tar c -C /src . | ssh user@<host> 'tar x -C /dst'
Показывает байты и ETA через pv при потоке в zstd; du -sb даёт общий размер для шкалы
tar cf - /data | pv -s $(du -sb /data | awk '{print $1}') | zstd -T0 > data.tar.zst
Уровень 19 с окном 128 МБ и всеми ядрами; отличное сжатие для логов и бэкапов
zstd -19 --long=27 -T0 huge.bin -o huge.bin.zst
Обучает словарь на похожих мелких файлах, затем сжимает с ним каждый — заметный прирост сжатия
zstd --train samples/*.json -o dict.zstd && zstd -D dict.zstd file.json
Просмотр заданий служебной учётки из-под root; note: -u требует root или sudo
crontab -l -u <name> 2>/dev/null || echo 'no crontab'
Идемпотентно добавляет задание @reboot; note: при загрузке сеть не гарантирована, для зависимостей берите systemd
( crontab -l 2>/dev/null; echo '@reboot /usr/local/bin/warmup.sh' ) | crontab -
Вывод cron в syslog
cron
Перенаправляет stdout+stderr в journald/syslog с тегом вместо письма root
*/5 * * * * /opt/job.sh 2>&1 | /usr/bin/logger -t job
PATH в cron минимален; задайте PATH/MAILTO сверху, иначе задания тихо падают
crontab - <<'EOF'
MAILTO=ops@example.com
PATH=/usr/local/bin:/usr/bin:/bin
0 3 * * * backup.sh
EOF
Показывает, какие скрипты выполнятся, ничего не запуская; отладка cron.daily
run-parts --test /etc/cron.daily
modern: временный таймер OnCalendar с логами и повторами; замена строки crontab
systemd-run --on-calendar='*-*-* 03:00:00' --unit=backup /opt/backup.sh
Планирует один отложенный запуск; очередь смотрят atq, отмена atrm
at now + 1 hour <<< 'systemctl restart nginx'
Запускает, когда load average опустится ниже 1.5; note: нужен запущенный atd
batch <<< '/opt/heavy-reindex.sh'
Создаёт фоновую сессию и подаёт команду; переживает разрыв SSH
tmux new-session -d -s work && tmux send-keys -t work 'tail -f /var/log/app.log' Enter
Захват буфера панели
tmux
Сохраняет последние 3000 строк панели в файл для разбора без подключения
tmux capture-pane -p -S -3000 -t work > /tmp/pane.log
Запуск отсоединённой именованной сессии с логом; вернуться через screen -r deploy
screen -L -Logfile /tmp/job.log -dmS deploy bash -c './deploy.sh'
Тест IOPS случайного чтения 4k; примечание: --direct=1 минует кэш страниц для реальных цифр устройства
fio --name=randread --filename=/dev/<id> --rw=randread --bs=4k --iodepth=32 --numjobs=4 --runtime=60 --time_based --direct=1 --group_reporting
IOPS случайной записи 4k по файлу; примечание: уничтожит данные, если filename — сырое устройство
fio --name=randwrite --filename=/data/testfile --size=4G --rw=randwrite --bs=4k --iodepth=64 --numjobs=4 --runtime=60 --time_based --direct=1 --group_reporting
Пропускная способность последовательной записи (МБ/с) крупными блоками 1M и прямым I/O
fio --name=seqwrite --filename=/data/testfile --size=10G --rw=write --bs=1M --iodepth=16 --direct=1 --runtime=60 --time_based --group_reporting
Чистая задержка на операцию при iodepth=1; выводит хвостовые задержки p99/p99.9/p99.99
fio --name=latency --filename=/dev/<id> --rw=randread --bs=4k --iodepth=1 --numjobs=1 --runtime=30 --time_based --direct=1 --percentile_list=99:99.9:99.99
Реалистичная смешанная нагрузка 70% чтение / 30% запись; ближе к OLTP, чем чистые тесты
fio --name=mixed --filename=/data/testfile --size=8G --rw=randrw --rwmixread=70 --bs=4k --iodepth=32 --numjobs=4 --runtime=120 --time_based --direct=1 --group_reporting
Запуск короткого самотеста
smartctl
Запуск короткого SMART-самотеста и чтение его лога; неразрушающий фоновый тест
smartctl -t short /dev/sda && sleep 120 && smartctl -l selftest /dev/sda
Разбор атрибутов SMART
smartctl
Сводит сырые значения атрибутов SMART; следите за Reallocated_Sector_Ct и Pending
smartctl -A /dev/sda | awk '$1~/^[0-9]+$/{printf "%-3s %-24s raw=%s\n",$1,$2,$10}'
Полное здоровье и лог ошибок
smartctl
Полный дамп -x: здоровье, атрибуты, лог ошибок, история температур; -d auto определяет RAID/USB
smartctl -x -d auto /dev/sda | less
SMART-лог NVMe
nvme
Ключевые поля износа/здоровья NVMe; percentage_used>100 означает превышение ресурса по спецификации
nvme smart-log /dev/nvme0 | grep -E 'percentage_used|media_errors|critical_warning|temperature'
Выявляет ненулевые ошибки контроллера NVMe; дополняется id-ctrl для модели/прошивки
nvme error-log /dev/nvme0 | grep -A1 'error_count' | grep -v 'error_count.*: 0'
Скорость надёжной записи в худшем случае (без кэша, sync на каждый блок); примечание: это не тест IOPS
dd if=/dev/zero of=/data/ddtest bs=1M count=1024 oflag=direct,dsync status=progress; rm /data/ddtest
Поблочное клонирование диска; conv=noerror,sync продолжает копирование через сбойные сектора нулями
dd if=/dev/sda of=/dev/sdb bs=64M conv=noerror,sync status=progress
Получить сырые метрики Prometheus с apiserver без стека мониторинга
kubectl get --raw /metrics | grep apiserver_request_total
Проверить доступность etcd через эндпоинт здоровья apiserver
kubectl get --raw '/healthz/etcd?verbose'
Сырое потребление нод из metrics API в обход форматирования kubectl top
kubectl get --raw '/apis/metrics.k8s.io/v1beta1/nodes' | jq '.items[] | {name:.metadata.name, cpu:.usage.cpu, mem:.usage.memory}'
Клонировать под с отладочным контейнером в общем PID-namespace; оригинал не трогается
kubectl debug <pod> -n <ns> --copy-to=<pod>-dbg --share-processes --image=nicolaka/netshoot -- sleep infinity
Вывести полное дерево вложенных полей спецификации ресурса; удобно искать допустимые поля
kubectl explain deploy.spec --recursive | less
Накопить несколько правок без отдельных раскаток, затем применить всё разом
kubectl rollout pause deploy/<name> -n <ns>; kubectl rollout resume deploy/<name> -n <ns>
Показать аннотацию last-applied-configuration; сравнить намерение с реальным состоянием
kubectl apply view-last-applied deploy/<name> -n <ns> -o yaml
Предупреждения по всему кластеру, новые в конце; быстрая сортировка проблемных нагрузок
kubectl get events -A --field-selector type=Warning --sort-by=.lastTimestamp
Список подов в фазе Failed по всем неймспейсам для очистки или разбора
kubectl get pods -A --field-selector status.phase=Failed
Ждать по условию jsonpath
kubectl
Блокировать CI до появления внешнего IP у Service; работает по любому полю jsonpath
kubectl wait --for=jsonpath='{.status.loadBalancer.ingress[0].ip}' svc/<name> -n <ns> --timeout=120s
Проверить RBAC от чужого имени без его kubeconfig; нужен verb impersonate
kubectl auth can-i list secrets -n <ns> --as=<name> --as-group=system:serviceaccounts
Вывести наиболее перезапускаемые поды, чтобы быстро поймать crashloop
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.status.containerStatuses[0].restartCount}{"\n"}{end}' | sort -k3 -rn | head
Показать зарезервированный оверхед по нодам; разница = резервы kube/system
kubectl get nodes -o json | jq -r '.items[] | {node:.metadata.name, capCPU:.status.capacity.cpu, allocCPU:.status.allocatable.cpu, capMem:.status.capacity.memory, allocMem:.status.allocatable.memory}'
Собрать CM из файла KEY=VALUE и JSON-патчем добавить его в envFrom контейнера
kubectl create configmap <name> --from-env-file=app.env -n <ns> --dry-run=client -o yaml | kubectl apply -f -; kubectl patch deploy/<name> -n <ns> --type=json -p='[{"op":"add","path":"/spec/template/spec/containers/0/envFrom/-","value":{"configMapRef":{"name":"<name>"}}}]'
Рендерит только один манифест для проверки вывода; примечание: путь указывается от корня чарта
helm template <name> ./chart --show-only templates/deployment.yaml
Рендер с фиксированными версиями kube/API для офлайн-проверки возможностей CRD; включает CRD
helm template <name> ./chart --kube-version 1.29 --api-versions policy/v1 --include-crds
Подвох reuse-values
helm
примечание: --reuse-values тихо сохраняет устаревшие переопределения; --reset-values форсирует чистый мердж
helm upgrade --install <name> ./chart --reset-values -f values.yaml
Выгружает отрендеренные pre/post-хуки для отладки порядка падающих job-ов
helm get hooks <rel> -n <ns>
Тестовый откат
helm
Предпросмотр целевой ревизии отката перед фактическим применением
helm history <rel> -n <ns> && helm rollback <rel> <rev> --dry-run -n <ns>
update обновляет Chart.lock из репозиториев; build тянет сабчарты по существующему lock
helm dependency update ./chart && helm dependency build ./chart
Блокирует до готовности подов И завершения hook-Job-ов; исключает гонку с миграциями
helm upgrade --install <name> ./chart --wait --wait-for-jobs --timeout 10m -n <ns>
Статус релиза в JSON
helm
Извлекает машиночитаемое состояние деплоя для скриптов и gate-проверок
helm status <rel> -n <ns> -o json | jq '.info.status, .info.last_deployed'
Патчит отрендеренные манифесты через kustomize без форка upstream-чарта
helm upgrade --install <name> ./chart --post-renderer ./kustomize-hook.sh -n <ns>
Сохраняет OCI-чарт локально для инспекции или установки в air-gapped среде
helm pull oci://<host>/charts/<name> --version 1.2.3 --untar --untardir ./charts
Apply с diff по окружению
helmfile
apply сначала делает diff и синхронизирует только изменённые релизы; идемпотентный gitops-цикл
helmfile -e prod diff && helmfile -e prod apply
Выбор релиза по селектору
helmfile
Синхронизирует один помеченный релиз из большого helmfile; modern: -l app=web,tier=fe
helmfile -e prod -l name=<name> apply
Рендерит блок helmCharts: в манифесты; примечание: helm должен быть в PATH
kustomize build --enable-helm ./overlay
Подключение переиспользуемого компонента
kustomize
Подмешивает переиспользуемые патчи/ресурсы через components: (Kustomize v4+)
cat <<'EOF' >> kustomization.yaml
components:
- ../../components/monitoring
EOF
Перенос значения поля через replacements
kustomize
modern: replacements: переносит поле между ресурсами, замена устаревших vars:
cat <<'EOF' >> kustomization.yaml
replacements:
- source: {kind: ConfigMap, name: cfg, fieldPath: data.host}
targets:
- select: {kind: Deployment}
fieldPaths: [spec.template.spec.containers.0.env.0.value]
EOF
Инлайн-патч с селектором цели
kustomize
Патч JSON6902 применяется ко всем подходящим целям без отдельного файла
cat <<'EOF' >> kustomization.yaml
patches:
- target: {kind: Deployment, labelSelector: app=api}
patch: |-
- op: replace
path: /spec/replicas
value: 3
EOF
Фиксация по неизменяемому digest; newName+digest также задаётся в блоке images:
kustomize edit set image app=registry.example.com/app@sha256:<id>
Генератор секретов без хэш-суффикса
kustomize
примечание: disableNameSuffixHash даёт стабильное имя, но ломает рестарт при смене
cat <<'EOF' >> kustomization.yaml
secretGenerator:
- name: db-creds
literals: [PASSWORD=s3cr3t]
generatorOptions:
disableNameSuffixHash: true
EOF
TLS-listener Gateway со ссылкой на сертификат
gateway-api
Терминация TLS на шлюзе через certificateRefs к Secret
kubectl apply -f - <<'EOF'
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata: {name: gw, namespace: <ns>}
spec:
gatewayClassName: <name>
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs: [{name: tls-cert}]
EOF
Учит kustomize семантике слияния CRD, чтобы патчи объединялись корректно
cat <<'EOF' >> kustomization.yaml
openapi:
path: crd-schema.json
EOF
Проверка условия Accepted у HTTPRoute
gateway-api
Смотрит статус Accepted/ResolvedRefs для отладки неприкреплённого маршрута
kubectl describe httproute <name> -n <ns> | grep -A8 Conditions
Инвентаризация ресурсов Gateway API
gateway-api
Единый обзор классов, шлюзов и маршрутов во всех неймспейсах
kubectl get gatewayclass,gateway,httproute -A
HTTPRoute с весами для канарейки
gateway-api
Делит трафик 90/10 между стабильным и канареечным бэкендами по весу
kubectl apply -f - <<'EOF'
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata: {name: web, namespace: <ns>}
spec:
parentRefs: [{name: gw}]
rules:
- backendRefs:
- {name: web-stable, port: 80, weight: 90}
- {name: web-canary, port: 80, weight: 10}
EOF
Разрешает HTTPRoute из неймспейса edge ссылаться на Service в backend
kubectl apply -f - <<'EOF'
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata: {name: allow-routes, namespace: backend}
spec:
from: [{group: gateway.networking.k8s.io, kind: HTTPRoute, namespace: edge}]
to: [{group: "", kind: Service}]
EOF
Полное состояние endpoint: identity, применение политик, BPF-карты; запускать в pod cilium
cilium-dbg endpoint get <id> -o json | jq '.status.policy'
Сопоставления VIP-сервиса и бэкендов в BPF; проверка LB без kube-proxy
cilium-dbg bpf lb list
Записи таблицы conntrack
cilium
Записи отслеживания соединений в BPF; поиск зависших/утекающих потоков на узле
cilium-dbg bpf ct list global | head
Объясняет вердикт allow/deny между двумя identity; разбор drop-ов NetworkPolicy
cilium-dbg policy trace --src-identity <id> --dst-identity <id> --dport <port>
Подробное состояние агента
cilium
Полное состояние узла: режим datapath, IPAM, BPF-карты, контроллеры; первый шаг при сбоях
cilium status --verbose
Наблюдение TCP-egress к FQDN
cilium
Живые потоки L3/L7 от pod к DNS-имени; проверка egress-политики по FQDN
hubble observe --protocol tcp --from-pod <ns>/<pod> --to-fqdn '*.example.com'
Статус ClusterMesh
cilium
Проверка межкластерной связности и синхронизации удалённых endpoint/identity
cilium clustermesh status --wait
Таблица NAT в BPF
cilium
Записи masquerade/NAT в BPF; разбор исчерпания SNAT-портов или source IP egress
cilium-dbg bpf nat list | head
Статус BGP-пиров на узле
calico
Состояния BGP-сессий и IP пиров на узле; Established означает обмен маршрутами
calicoctl node status
Просмотр IP-пулов
calico
Пулы с CIDR, режимом IPIP/VXLAN, NAT-outgoing; проверка настроек инкапсуляции
calicoctl get ippool -o wide
Дамп конфигурации Felix
calico
Живая конфигурация dataplane Felix: режим BPF, уровень логов, MTU, бэкенд iptables
calicoctl get felixconfiguration default -o yaml
Распределение IPAM по блокам
calico
Утилизация IP по блокам; выявление исчерпания pod-IP до сбоев планирования
calicoctl ipam show --show-blocks
Дамп итоговой конфигурации nginx
ingress-nginx
Показывает полный действующий nginx.conf со всеми server-блоками, которые реально сгенерировал контроллер
kubectl exec deploy/ingress-nginx-controller -n ingress-nginx -- nginx -T | less
Метрики статуса контроллера
ingress-nginx
Текущие активные соединения и счётчики reading/writing/waiting с эндпоинта stub_status
kubectl exec deploy/ingress-nginx-controller -n ingress-nginx -- curl -s localhost:10254/nginx_status
Поиск таймаутов upstream в логах
ingress-nginx
Ищет таймауты бэкенда и оборванные клиентом запросы; note: 499 — клиент закрыл соединение до ответа upstream
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller --tail=2000 | grep -iE 'upstream timed out|504|499'
Аннотация канареечного сплита трафика
ingress-nginx
Направляет 20% трафика на канареечный ingress; нужен основной ingress на том же host/path
kubectl annotate ingress <name> -n <ns> nginx.ingress.kubernetes.io/canary=true nginx.ingress.kubernetes.io/canary-weight="20"
Аннотации лимита запросов и размера тела
ingress-nginx
Ограничивает RPS на IP клиента и поднимает лимит загрузки; burst по умолчанию 5x от rps
kubectl annotate ingress <name> -n <ns> nginx.ingress.kubernetes.io/limit-rps="10" nginx.ingress.kubernetes.io/proxy-body-size="50m"
Rewrite-target с группой захвата
ingress-nginx
Срезает префикс пути через regex-захват; путь должен содержать (/|$)(.*), чтобы $2 раскрылся
kubectl annotate ingress <name> -n <ns> nginx.ingress.kubernetes.io/rewrite-target='/$2' nginx.ingress.kubernetes.io/use-regex='true'
Список ingressclass и класс по умолчанию
ingress-nginx
Показывает контроллеры и какой IngressClass является дефолтным; помечен должен быть только один
kubectl get ingressclass -o custom-columns='NAME:.metadata.name,DEFAULT:.metadata.annotations.ingressclass\.kubernetes\.io/is-default-class'
Принудительное обновление сертификата
cert-manager
Запускает немедленный перевыпуск, не дожидаясь окна обновления; появится новый CertificateRequest
cmctl renew <name> -n <ns>
Диагностика статуса сертификата
cert-manager
Сквозной обзор: Certificate, Request, Order, Challenge и точная причина сбоя ACME
cmctl status certificate <name> -n <ns>
Просмотр содержимого выпущенного секрета
cert-manager
Декодирует tls.crt и показывает издателя, SAN и срок действия без ручного openssl x509
cmctl inspect secret <name> -n <ns>
ClusterIssuer с DNS01 на Route53
cert-manager
DNS01-издатель для wildcard-сертификатов; IRSA или секрет должен давать права на изменение записей route53
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-dns
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-dns
solvers:
- dns01:
route53:
region: us-east-1
hostedZoneID: <id>
EOF
Зависшие ACME-челленджи
cert-manager
Показывает ожидающие проверки и ошибку propagation/self-check, блокирующую выпуск
kubectl get challenges -A -o wide && kubectl describe challenge -n <ns> <name>
Трассировка синхронизации записей
external-dns
Показывает, какие DNS-записи external-dns добавляет или удаляет; note: для удаления нужен --policy=sync
kubectl logs deploy/external-dns -n external-dns -f | grep -iE 'CREATE|UPDATE|DELETE|record'
Проверка доступности metrics API
metrics-server
Проверяет здоровье агрегированного API; при FailedDiscovery добавьте --kubelet-insecure-tls для самоподписанных kubelet
kubectl get apiservice v1beta1.metrics.k8s.io -o jsonpath='{.status.conditions[?(@.type=="Available")].message}{"\n"}'
Поднять HA-кластер за VIP балансировщика; --upload-certs раздаёт CA остальным мастерам
kubeadm init --control-plane-endpoint "<host>:6443" --upload-certs --pod-network-cidr=10.244.0.0/16
Вывести свежую команду join
kubeadm
Сгенерировать новый токен и готовую строку join для воркера; токены живут 24ч по умолчанию
kubeadm token create --print-join-command
Показать сроки истечения всех сертификатов и kubeconfig; ловит тихий отказ apiserver заранее
kubeadm certs check-expiration
Обновить все сертификаты control-plane; note: перезапусти static pods (mv манифестов) для перечтения
kubeadm certs renew all && systemctl restart kubelet
Спланировать и применить апгрейд
kubeadm
Показать доступные версии, затем апгрейд control-plane; kubelet/kubectl обновляй отдельно после
kubeadm upgrade plan && kubeadm upgrade apply v1.30.2
Однонодовый k3s без встроенных Traefik/LB; подключай свой ingress и MetalLB вместо них
curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable servicelb
Первый сервер со встроенным etcd HA; остальные через --server https://<ip>:6443 и тот же токен
curl -sfL https://get.k3s.io | sh -s - server --cluster-init --token <id>
Добавить воркер; node-token лежит на сервере в /var/lib/rancher/k3s/server
curl -sfL https://get.k3s.io | K3S_URL=https://<ip>:6443 K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token) sh -
Встроенные crictl/ctr для отладки подов/образов когда kubectl недоступен; работают с containerd напрямую
k3s crictl ps -a && k3s ctr images ls -q
Декларативный конфиг сервера и запуск unit; добавь tls-san чтобы хост LB попал в сертификат API
printf 'token: <id>\ntls-san:\n - <host>\n' > /etc/rancher/rke2/config.yaml && systemctl enable --now rke2-server
rke2 несёт свои kubectl/crictl/ctr в /var/lib/rancher/rke2/bin, по умолчанию не в $PATH
export PATH=$PATH:/var/lib/rancher/rke2/bin KUBECONFIG=/etc/rancher/rke2/rke2.yaml && rke2 ctr images ls
Показать лидера, размер БД и raft-индекс по членам; сразу видно раздувание и split-brain
ETCDCTL_API=3 etcdctl --endpoints=https://<ip>:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint status --cluster -w table
Сделать бэкап etcd и вернуть место; defrag снимает алярм NOSPACE после compaction; делай в простой
ETCDCTL_API=3 etcdctl snapshot save /backup/snap.db && etcdctl defrag --cluster && etcdctl alarm disarm
Проверить здоровье apiserver и какая нода держит лиз лидера scheduler/CM
curl -sk https://localhost:6443/healthz && kubectl -n kube-system get lease kube-scheduler kube-controller-manager
Поды с наибольшим числом рестартов
k8s-debug
Ранжирует поды во всём кластере по числу рестартов, чтобы быстро находить crash-loop
kubectl get po -A --sort-by='.status.containerStatuses[0].restartCount' | tail -20
Поиск OOMKilled-контейнеров
k8s-debug
Выводит поды, у которых последний выход контейнера был OOMKilled, по всем namespace
kubectl get po -A -o jsonpath='{range .items[*]}{.metadata.namespace}{" "}{.metadata.name}{" "}{.status.containerStatuses[*].lastState.terminated.reason}{"\n"}{end}' | grep OOMKilled
Причина зависания Pending-подов
k8s-debug
Извлекает причины FailedScheduling для каждого Pending-пода (taints, ресурсы, affinity)
kubectl get po -A --field-selector=status.phase=Pending -o name | xargs -I{} kubectl describe {} -n <ns> | grep -A3 FailedScheduling
Диагностика узла NotReady
k8s-debug
Смотрит Conditions узла, затем хвост журнала kubelet, чтобы понять причину NotReady
kubectl describe node <node> | grep -A12 Conditions; ssh <node> 'journalctl -u kubelet -n 100 --no-pager'
Причина ImagePullBackOff
k8s-debug
Показывает ошибки pull из registry: неверный тег, отсутствие imagePullSecret или rate limit
kubectl get events -n <ns> --field-selector reason=Failed -o wide | grep -i 'pull\|manifest\|unauthorized'
Очистка вытесненных подов
k8s-debug
Массово удаляет все Evicted-поды, оставшиеся после вытеснения по нехватке ресурсов узла
kubectl get po -A | grep Evicted | awk '{print $2" -n "$1}' | xargs -L1 kubectl delete po
Снятие зависшего Terminating-пода
k8s-debug
Сбрасывает finalizers, чтобы снять под, зависший в Terminating; note: сначала убедитесь, что узел мёртв
kubectl patch po <pod> -n <ns> -p '{"metadata":{"finalizers":null}}' --type=merge; kubectl delete po <pod> -n <ns> --grace-period=0 --force
Сырая статистика kubelet
k8s-debug
Берёт актуальную память по подам из Summary API kubelet в обход metrics-server
kubectl get --raw /api/v1/nodes/<node>/proxy/stats/summary | jq '.pods[] | {name:.podRef.name, mem:.memory.workingSetBytes}'
Статистика conntrack на узле
k8s-debug
Проверяет conntrack drop/insert_failed по CPU; переполнение таблицы nf_conntrack теряет пакеты
kubectl debug node/<node> -it --image=nicolaka/netshoot -- conntrack -S
Тест разрешения DNS в кластере
k8s-debug
Резолвит FQDN сервиса из временного пода, чтобы отделить проблемы CoreDNS от DNS приложения
kubectl run dnstest --rm -it --image=nicolaka/netshoot --restart=Never -- dig +short <name>.<ns>.svc.cluster.local
События пода по времени
k8s-debug
Показывает только Warning-события одного пода в хронологии; modern: заменяет фильтр get events
kubectl events --for pod/<pod> -n <ns> --types=Warning
Логи предыдущего падения с метками
k8s-debug
Берёт логи предыдущего экземпляра упавшего контейнера, чтобы поймать трейс перед рестартом
kubectl logs <pod> -n <ns> -c <name> --previous --timestamps --tail=200
Отслеживает OCI-артефакт по диапазону semver вместо git; modern: GitOps прямо из реестра
flux create source oci <name> --url=oci://reg/repo --tag-semver='>=1.0.0' --interval=5m
Упаковывает манифесты в OCI-артефакт с тегом по коммиту; примечание: добавляет метаданные source и revision
flux push artifact oci://reg/manifests:$(git rev-parse --short HEAD) --path=./manifests --source=$(git config --get remote.origin.url) --revision=$(git rev-parse HEAD)
Серверный dry-run, показывающий, что именно Flux изменит до применения
flux diff kustomization <name> --path ./overlays/prod
Выводит все объекты, которыми владеет кастомизация, включая вложенные кастомизации
flux tree kustomization <name>
Рендерит итоговые манифесты офлайн с подстановками Flux, затем валидирует на сервере
flux build kustomization <name> --path ./ | kubectl apply --dry-run=server -f -
Показывает все ImageRepository, политики и автоматизации обновления по всем namespace
flux get images all -A
Показывает выбранный политикой тег и результаты последнего сканирования по каждому репозиторию
flux get image policy -A && flux get image repository -A
Направляет события согласования в Slack через provider и alert; примечание: webhook хранится в secret
flux create provider slack --type slack --secret-ref webhook && flux create alert prod --provider-ref slack --event-source 'Kustomization/*' --event-severity info
Создаёт webhook-URL, чтобы push в git мгновенно запускал согласование вместо опроса
flux create receiver github --type github --event github:push --secret-ref webhook-token --resource GitRepository/<name>
Немедленно подтягивает последний коммит, не трогая зависимые кастомизации
flux reconcile source git <name>
Выводит историю событий согласования объекта для диагностики дрейфа или сбоев
flux events --for Kustomization/<name>
Откладывает согласование app, пока не готова кастомизация infra; примечание: задаёт порядок применения
flux create kustomization app --source=GitRepository/<name> --path=./app --depends-on=infra --prune=true --interval=10m
Переопределяет Helm-значения на лету без правки Git; note: вызывает дрейф от источника до коммита
argocd app set <name> --helm-set image.tag=v2 --helm-set replicaCount=3
Задаёт переопределения параметров Kustomize/Helm через -p; modern: для аудита лучше overlay в Git
argocd app set <name> -p key=val -p env=prod
Сравнивает отрендеренные Argo манифесты с текущим состоянием кластера до синхронизации
argocd app manifests <name> | kubectl diff -f -
Просмотр ApplicationSet
argocd
Выводит ApplicationSet и сгенерированные дочерние приложения и генераторы
argocd appset list && argocd appset get <name> -o yaml
Регистрирует HTTPS-репозиторий с учёткой; modern: --ssh-private-key-path для доступа по SSH
argocd repo add https://git.example.com/repo.git --username <id> --password $TOKEN
Merge-патч спецификации без правки CR; удобно для быстрой смены targetRevision
argocd app patch <name> --patch '{"spec":{"source":{"targetRevision":"v2.1"}}}' --type merge
Отменяет идущую синхронизацию, зависшую на хуке или ожидающем ресурсе
argocd app terminate-op <name>
Запускает rollout restart Deployment через resource-действия Argo
argocd app actions run <name> restart --kind Deployment --resource-name <id>
Создаёт deny-окно синхронизации для заморозки деплоев в нерабочее время; расписание по cron
argocd proj windows add <name> --kind deny --schedule '0 0 * * *' --duration 8h --applications '*'
Задаёт опции синхронизации для prune и SSA; note: SSA решает конфликты apply больших CRD
argocd app set <name> --sync-option Prune=true --sync-option ServerSideApply=true
Экспорт/импорт всех приложений, проектов и настроек для DR; учитывает секреты кластеров
argocd admin export -n argocd > argo-backup.yaml # restore: argocd admin import -n argocd - < argo-backup.yaml
Синхронизирует только один ресурс по group:kind:name; изолирует правку без полной синхронизации
argocd app sync <name> --resource apps:Deployment:<id>
Сборка матрицы из bake-файла
docker
Сборка и push нескольких целей из одного HCL-файла; параллельно, без дублирования групп
docker buildx bake -f docker-bake.hcl --push
Просмотр мультиарх-манифеста
docker
Показывает платформы в списке манифестов без скачивания слоёв; проверка arm64+amd64
docker buildx imagetools inspect <reg>/<name>:tag --format '{{json .Manifest}}'
Кэш сборки в реестре
buildkit
Хранит полный кэш слоёв в реестре для CI; mode=max кэширует промежуточные стадии
docker buildx build --cache-to type=registry,ref=<reg>/cache,mode=max --cache-from type=registry,ref=<reg>/cache -t <reg>/<name> --push .
Создаёт сборщик BuildKit с поддержкой мультиарх и экспорта кэша; драйвер по умолчанию не умеет
docker buildx create --name multi --use --driver docker-container --driver-opt network=host
Постоянный cache-mount в RUN
buildkit
Переиспользует кэш пакетов между сборками, не раздувая слои; сохраняется между запусками
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
Монтирование секрета при сборке
buildkit
Использует файл секрета в одном RUN, не записывая его в слой; вместе с --secret
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci
Пробрасывает SSH-агент хоста в сборку для клона приватного git; ключ не попадает в образ
docker buildx build --ssh default -t <name> . # Dockerfile: RUN --mount=type=ssh git clone git@host:repo
Передаёт секрет в BuildKit; виден только в RUN --mount=type=secret,id=token, не в history
docker buildx build --secret id=token,src=token.txt -t <name> .
Удалённый демон по SSH
docker
Запуск docker на удалённом демоне по SSH; не нужен открытый TCP-сокет
docker context create remote --docker host=ssh://<host> && docker context use remote
Неизменяемый rootfs, запись только в /tmp, запрет эскалации привилегий; усиление контейнера
docker run --read-only --tmpfs /tmp --security-opt no-new-privileges --cap-drop ALL <name>
Слежение за OOM-убийствами
docker
Поток событий OOM в реальном времени для отлова контейнеров, убитых по лимиту памяти
docker events --filter event=oom --filter type=container
Анализ эффективности слоёв с падением сборки при избытке потраченного места
CI=true dive --lowestEfficiency 0.95 --highestWastedBytes 20MB <reg>/<name>:tag
Контейнер как systemd-юнит
podman
Создаёт переносимый .service, заново создающий контейнер при старте; note: современный путь — Quadlet
podman generate systemd --new --files --name <name>
Превращает запущенный под в манифест K8s для переноса в кластер
podman generate kube <pod> > pod.yaml
Поднимает поды/сервисы из манифеста K8s без кластера; --replace применяет заново начисто
podman play kube pod.yaml --replace
Показывает диапазон uid юзер-namespace для rootless; правьте права через chown внутри unshare
podman unshare cat /proc/self/uid_map; cat /etc/subuid
Автообновление из реестра
podman
Тянет новые образы и перезапускает помеченные контейнеры; нужна метка io.containers.autoupdate=registry
podman auto-update --dry-run && systemctl --user start podman-auto-update
Обновляет OCI-runtime и конфиг юзер-namespace после апгрейда podman/ядра; чинит зависшие контейнеры
podman system migrate
Выводит runtime-инфо, путь cgroup, mounts и pid CRI-контейнера, которого не видит kubectl
crictl inspect <id> | jq '.info'
Чистит осиротевшие sandbox-поды в NotReady, которые kubelet не собрал; восстановление на уровне ноды
crictl rmp -f $(crictl pods -q --state NotReady)
Очистка образов на ноде
crictl
Освобождает диск, удаляя образы без ссылок от контейнеров; безопасно при disk-pressure на ноде
crictl rmi --prune
containerd держит образы k8s в namespace k8s.io; в namespace по умолчанию пусто
ctr -n k8s.io images ls
Показывает задачи containerd с pid/статусом, когда kubelet или CRI не отвечает
ctr -n k8s.io task ls
Compose-стек на containerd
nerdctl
Запускает docker-compose.yml прямо на containerd без демона Docker; удобно для паритета с нодой k8s
nerdctl --namespace k8s.io compose up -d
Перенос реестр-в-реестр без демона и без локального pull; сохраняет дайджесты
skopeo copy --src-creds u:p --dest-creds u:p docker://<host>/<name> docker://<host>/<name>
Дёшево читает метки, архитектуру и слои удалённого образа; modern: --raw для manifest list
skopeo inspect docker://<host>/<name> | jq '.Labels, .Architecture, .Created'
95-й перцентиль задержки из гистограммы
prometheus
p95 задержки по job; note: всегда агрегируйте _bucket по le перед histogram_quantile
histogram_quantile(0.95, sum by(le,job)(rate(http_request_duration_seconds_bucket[5m])))
Прогноз заполнения диска
prometheus
алерт, когда линейный тренд за 6ч прогнозирует заполнение диска в ближайшие 4ч
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 4*3600) < 0
Обнаружение пропавшей цели через absent
prometheus
срабатывает, когда нет ни одной серии; ловит job, полностью исчезнувший из discovery
absent(up{job="node"} == 1)
Переписать метку через label_replace
prometheus
извлечь/создать новую метку через regex-группу; полезно для join и аккуратных дашбордов
label_replace(node_uname_info, "host", "$1", "nodename", "(.+)")
Максимум посекундного rate за окно
prometheus
подзапрос: пиковый 5m rate с шагом 1 минута за последний час; выявляет всплески
max_over_time(rate(node_network_receive_bytes_total[5m])[1h:1m])
without() сохраняет все метки кроме instance; чище, чем перечислять много меток в by()
sum without(instance) (rate(http_requests_total{code=~"5.."}[5m]))
Recording rule для дорогого отношения
prometheus
предвычисляет коэффициент ошибок SLO, чтобы дашборды и алерты работали быстро
groups:
- name: slo
rules:
- record: job:request_errors:ratio5m
expr: sum by(job)(rate(http_requests_total{code=~"5.."}[5m])) / sum by(job)(rate(http_requests_total[5m]))
Проверка правил и конфига через promtool
prometheus
проверка перед reload; запускайте в CI, чтобы поймать битые expr/yaml до деплоя
promtool check rules rules.yml && promtool check config prometheus.yml
Мгновенный запрос из CLI
prometheus
выполнить PromQL без браузера; удобно для скриптовых top-N расследований
promtool query instant http://localhost:9090 'topk(5, sum by(pod)(rate(container_cpu_usage_seconds_total[5m])))'
Поиск виновников кардинальности в TSDB
prometheus
показывает метрики и пары меток с высокой кардинальностью; первый шаг при росте памяти
promtool tsdb analyze /prometheus --limit 20
Заглушить алерт через amtool
alertmanager
ограниченное по времени заглушение по matcher; снять раньше: amtool silence expire <id>
amtool silence add alertname=HighLatency cluster=prod --duration 2h --comment 'deploy in progress'
Проверка дерева маршрутизации без срабатывания
alertmanager
показывает, в какой receiver попадёт набор меток; проверяйте маршруты до выката конфига
amtool config routes test --config.file=alertmanager.yml severity=critical team=db
Просмотр статуса кардинальности TSDB
victoriametrics
топ метрик по числу серий в VictoriaMetrics; быстро находит взрыв меток
curl -s 'http://vm:8428/api/v1/status/tsdb?topN=10' | jq '.data.seriesCountByMetricName'
Согласованный бэкап хранилища VM
victoriametrics
снапшот, затем vmbackup в S3 для согласованной копии; восстановление — vmrestore
curl -s http://vm:8428/snapshot/create | jq -r .snapshot | xargs -I{} vmbackup -storageDataPath=/vmdata -snapshotName={} -dst=s3://bucket/vm
Фильтр по подстроке, парсинг JSON и вывод только нужных полей. note: | json до line_format.
{app="api"} |= "error" | json | line_format "{{.level}} {{.msg}}"
Логов в секунду по уровням за окно 5 минут. modern: парсер logfmt для строк key=value.
sum by (level) (rate({app="api"} | logfmt [5m]))
p99 задержки из числового поля лога по маршрутам. note: unwrap требует числовое поле/метку.
quantile_over_time(0.99, {app="api"} | json | unwrap latency_ms [5m]) by (route)
Подсчёт строк по regex-совпадению ошибок в минуту по неймспейсу. |~ — это regex-match.
sum(count_over_time({namespace="prod"} |~ "timeout|deadline exceeded" [1m]))
CLI-запрос за последний час с лимитом строк и выводом JSONL. сначала задайте LOKI_ADDR.
logcli query '{job="app/api"} |= "panic"' --since=1h --limit=200 --output=jsonl
Метрический range-запрос по HTTP и извлечение результата через jq. step задаётся в секундах.
curl -sG "$LOKI_ADDR/loki/api/v1/query_range" --data-urlencode 'query=sum(rate({app="api"}[5m]))' --data-urlencode 'step=60' | jq '.data.result'
Ручная отправка записи лога для проверки приёма. note: метка времени — наносекунды epoch.
curl -s -H 'Content-Type: application/json' -XPOST "$LOKI_ADDR/loki/api/v1/push" -d '{"streams":[{"stream":{"app":"test"},"values":[["'$(date +%s%N)'","hello loki"]]}]}'
Поиск span с ошибкой у сервиса медленнее 2с. сочетает атрибут, статус и длительность.
{ .service.name = "api" && status = error && duration > 2s }
Поиск TraceQL через API
tempo
Поиск трейсов по TraceQL через HTTP и вывод их ID. limit ограничивает число результатов.
curl -sG "$TEMPO_ADDR/api/search" --data-urlencode 'q={ .http.status_code >= 500 }' --data-urlencode 'limit=20' | jq '.traces[].traceID'
Получить трейс по ID и посчитать длительность каждого span. note: время в unix-наносекундах.
curl -s "$TEMPO_ADDR/api/traces/<id>" | jq '.batches[].scopeSpans[].spans[] | {name, durationNs: (.endTimeUnixNano|tonumber)-(.startTimeUnixNano|tonumber)}'
Валидация конфига коллектора
opentelemetry
Статическая проверка пайплайна коллектора до перезапуска. ловит ошибки receivers/processors/exporters.
otelcol validate --config=/etc/otelcol/config.yaml
Настройка OTLP-экспортёра через env
opentelemetry
Эндпоинт автоинструментирования и атрибуты ресурса без правок кода. 4317=gRPC, 4318=HTTP.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 OTEL_RESOURCE_ATTRIBUTES=service.name=api,deployment.environment=prod
Отправка OTLP-трейса через curl
opentelemetry
Проверка OTLP HTTP-receiver тестовым payload. note: используйте порт 4318, а не 4317.
curl -s -XPOST http://collector:4318/v1/traces -H 'Content-Type: application/json' -d @trace.json -w '%{http_code}'
Просмотр живых событий на выходе трансформа для отладки VRL. modern: vector top для метрик потока.
vector tap --outputs-of parse_logs
Запуск workflow с параметрами
github-actions
Запускает workflow_dispatch с передачей входных параметров; примечание: нужен триггер workflow_dispatch
gh workflow run deploy.yml -f env=prod -f version=1.4.2 --ref main
Слежение за запуском в реальном времени
github-actions
Транслирует прогресс свежего запуска в реальном времени и завершается с его кодом возврата
gh run watch $(gh run list -w deploy.yml -L1 --json databaseId -q '.[0].databaseId')
Только логи упавших шагов
github-actions
Выводит логи только упавших шагов, отсекая шум от успешных задач
gh run view <id> --log-failed | less -R
Локальный запуск job через act
github-actions
Запускает job Actions в Docker локально до пуша; примечание: укажите реальный образ раннера
act -j build --secret-file .secrets -P ubuntu-latest=catthehacker/ubuntu:act-22.04
Перезапуск только упавших job
github-actions
Повторяет только упавшие job запуска, переиспользуя ранее успешные результаты
gh run rerun <id> --failed
Просмотр и очистка кэшей
github-actions
Находит самые крупные кэши Actions и удаляет устаревшие для освобождения квоты
gh cache list --sort size_in_bytes --order desc; gh cache delete <id>
Беспарольная OIDC-аутентификация в облако
github-actions
Права уровня job, дающие OIDC-токен для роли в облаке без статических ключей
permissions:
id-token: write
contents: read
Регистрация раннера по токену
gitlab-ci
Регистрирует раннер новым токеном авторизации; примечание: старый registration-token устарел
gitlab-runner register --non-interactive --url https://<host> --token glrt-<id> --executor docker --docker-image alpine:latest
Очистка мёртвых раннеров
gitlab-ci
Проверяет настроенные раннеры и снимает с регистрации те, что GitLab больше не знает
gitlab-runner verify --delete
Запуск пайплайна через API
gitlab-ci
Запускает пайплайн извне CI по trigger-токену с передачей своих переменных
curl -X POST -F token=$CI_TOKEN -F ref=main -F 'variables[DEPLOY]=true' https://<host>/api/v4/projects/<id>/trigger/pipeline
Локальный прогон CI-задачи
gitlab-ci
Прогоняет job из .gitlab-ci.yml локально в Docker; примечание: замена удалённому gitlab-runner exec
gitlab-ci-local --job build
Запускает job и ждёт завершения, транслируя вывод консоли (-f -v)
java -jar jenkins-cli.jar -s https://<host> -auth user:token build <name> -f -v
Проверяет Jenkinsfile на стороне сервера до коммита, ловя синтаксические ошибки заранее
curl -X POST -F "jenkinsfile=<Jenkinsfile" https://<host>/pipeline-model-converter/validate
Логи последнего PipelineRun
tekton
Транслирует логи самого свежего PipelineRun по всем его TaskRun
tkn pipelinerun logs -f --last -n <ns>
Проверить активный аккаунт, ARN и роль перед выполнением опасных команд
aws sts get-caller-identity --query '{acct:Account,arn:Arn}' --output table
Принять IAM-роль и сразу подставить временные ключи в окружение шелла
eval $(aws sts assume-role --role-arn <id> --role-session-name ops --query 'Credentials.[`AWS_ACCESS_KEY_ID=`+AccessKeyId,`AWS_SECRET_ACCESS_KEY=`+SecretAccessKey,`AWS_SESSION_TOKEN=`+SessionToken]' --output text | sed 's/^/export /')
Список запущенных prod-инстансов с id, приватным IP и AZ через JMESPath
aws ec2 describe-instances --filters Name=tag:Env,Values=prod Name=instance-state-name,Values=running --query 'Reservations[].Instances[].{id:InstanceId,ip:PrivateIpAddress,az:Placement.AvailabilityZone}' --output table
Зеркалирование в бакет; --delete чистит лишние ключи. note: --size-only игнорирует mtime
aws s3 sync ./ s3://<name>/ --delete --exclude '*.tmp' --exclude '.git/*' --size-only
Сгенерировать временную ссылку на скачивание без публикации объекта
aws s3 presign s3://<name>/path/file.tgz --expires-in 3600
Добавить/обновить контекст EKS с коротким алиасом вместо длинного ARN
aws eks update-kubeconfig --name <cluster> --region <id> --alias <cluster> --kubeconfig ~/.kube/config
Авторизовать Docker в ECR через stdin, чтобы токен не попал в историю
aws ecr get-login-password --region <id> | docker login --username AWS --password-stdin <id>.dkr.ecr.<id>.amazonaws.com
Интерактивная сессия на инстансе без открытого 22 порта и бастиона
aws ssm start-session --target i-<id> --region <id>
Стриминг лог-группы как tail -f. modern: заменяет неудобный filter-log-events
aws logs tail /aws/lambda/<name> --follow --since 10m --format short
Проверить, разрешено ли действие принципалу, до выдачи прав; allow/deny
aws iam simulate-principal-policy --policy-source-arn <id> --action-names s3:GetObject --resource-arns <id> --query 'EvaluationResults[].{action:EvalActionName,decision:EvalDecision}' --output table
Получить JSON-секрет и достать одно поле. note: значение видно в аргументах
aws secretsmanager get-secret-value --secret-id <name> --query SecretString --output text | jq -r '.password'
Отсортировать spot-историю и найти самую дешёвую AZ для типа инстанса
aws ec2 describe-spot-price-history --instance-types m6i.large --product-descriptions 'Linux/UNIX' --start-time $(date -u +%Y-%m-%dT%H:%M:%S) --query 'sort_by(SpotPriceHistory,&SpotPrice)[0:5].[AvailabilityZone,SpotPrice]' --output table
Идемпотентный деплой; CAPABILITY_NAMED_IAM нужен при создании IAM-ролей
aws cloudformation deploy --template-file stack.yaml --stack-name <name> --capabilities CAPABILITY_NAMED_IAM --parameter-overrides Env=prod --no-fail-on-empty-changeset
Подсчитать неприсоединённые EBS-тома через length(); --profile/--region задают область
aws ec2 describe-volumes --filters Name=status,Values=available --query 'length(Volumes[])' --output text --profile staging --region <id>
Аутентификация под сервисным аккаунтом в CI; примечание: workload identity предпочтительнее долгоживущих ключей
gcloud auth activate-service-account --key-file=key.json && gcloud config set project <id>
Получить kubeconfig для GKE; modern: с k8s 1.26 нужен gke-gcloud-auth-plugin в PATH
gcloud container clusters get-credentials <cluster> --region <id> --project <id>
Список ВМ с внешним IP
gcloud
Своя таблица работающих ВМ и публичных IP через проекции --format/--filter
gcloud compute instances list --format="table(name,status,EXTERNAL_IP)" --filter="status=RUNNING"
Аудит ролей по участникам; --flatten раскрывает вложенные bindings в строки
gcloud projects get-iam-policy <id> --flatten="bindings[].members" --format="table(bindings.role,bindings.members)"
Чтение свежих логов ошибок
gcloud
Выбрать ошибки за последний час по проекту; --freshness избегает полного сканирования
gcloud logging read 'severity>=ERROR' --limit 20 --freshness=1h --format='value(timestamp,resource.type,textPayload)'
SSH через IAP-туннель
gcloud
Доступ к ВМ без публичного IP через Identity-Aware Proxy; bastion не нужен
gcloud compute ssh <name> --zone <id> --tunnel-through-iap
Чтение значения секрета
gcloud
Вывести последнюю версию секрета из Secret Manager; в CI фиксируйте версию для воспроизводимости
gcloud secrets versions access latest --secret=<name> --project <id>
rsync в бакет хранилища
gcloud
Зеркалирование каталога в GCS; -d удаляет лишнее, современная замена gsutil rsync
gcloud storage rsync -r -d ./build gs://<name>/site
Неинтерактивная аутентификация для CI; modern: --federated-token для OIDC без секрета
az login --service-principal -u <id> -p "$AZ_SECRET" --tenant <id>
Добавить контекст AKS в kubeconfig; --admin обходит Azure AD RBAC если включён
az aks get-credentials -g <name> -n <cluster> --overwrite-existing
Получить чистое значение секрета без кавычек через --query/-o tsv; удобно для env
az keyvault secret show --vault-name <name> --name <name> --query value -o tsv
-d добавляет рантайм IP и состояние питания; обычный list этих полей не содержит
az vm list -d -o table --query "[].{name:name,ip:publicIps,state:powerState}"
Сброс кэша по URL
cloudflare
Выборочный сброс по файлам; примечание: purge_everything обнуляет кэш, избегайте в проде
curl -sX POST "https://api.cloudflare.com/client/v4/zones/<id>/purge_cache" -H "Authorization: Bearer $CF_TOKEN" -H 'Content-Type: application/json' --data '{"files":["https://<host>/app.js"]}'
Создание проксируемой DNS-записи
cloudflare
Добавить A-запись за прокси CF; proxied=true требует ttl=1 (auto)
curl -sX POST "https://api.cloudflare.com/client/v4/zones/<id>/dns_records" -H "Authorization: Bearer $CF_TOKEN" -H 'Content-Type: application/json' --data '{"type":"A","name":"<host>","content":"<ip>","proxied":true,"ttl":1}'
Задать folder-id по умолчанию для активного профиля; проверить через config list
yc config set folder-id <id> && yc config list
Изолировать креды по средам; использовать yc --profile prod или YC_PROFILE в CI
yc config profile create prod && yc config profile activate prod
IAM-токен (TTL ~12 ч) из OAuth; передать в API/Terraform через переменную YC_TOKEN
export YC_TOKEN=$(yc iam create-token)
Создать сервисный аккаунт для пайплайнов; роли выдавать отдельно по минимуму прав
yc iam service-account create --name sa-ci --description 'CI deployer'
JSON-ключ для неинтерактивной аутентификации; note: ротировать и хранить в vault
yc iam key create --service-account-name sa-ci --output key.json
Привязать роль на уровне каталога; лучше узкие роли вместо editor
yc resource-manager folder add-access-binding <id> --role editor --service-account-name sa-ci
Добавить внешний endpoint в kubeconfig; без --external — внутренний адрес VPC
yc managed-kubernetes cluster get-credentials <name> --external --force
Свести имя/статус/id кластеров в таблицу для скриптов и аудита
yc managed-kubernetes cluster list --format json | jq -r '.[]|[.name,.status,.id]|@tsv'
Группа узлов с автоскейлером и границами min/max в одной зоне
yc managed-kubernetes node-group create --cluster-name <name> --name ng-1 --platform standard-v3 --auto-scale min=1,max=5,initial=2 --location zone=ru-central1-a
Зональная подсеть в сети; CIDR не должен пересекаться с соседними
yc vpc subnet create --name sub-a --network-name net-1 --range 10.0.0.0/24 --zone ru-central1-a
Добавить stateful-правило SG; note: правила работают как allow-list
yc vpc security-group update-rules <name> --add-rule 'direction=ingress,port=443,protocol=tcp,v4-cidrs=[0.0.0.0/0]'
Вывести слушатели и target-группы NLB для отладки маршрутизации
yc load-balancer network-load-balancer get <name> --format json | jq '.listeners,.attached_target_groups'
Перечислить ALB и их статус в каталоге
yc application-load-balancer load-balancer list --format json | jq -r '.[]|[.name,.status]|@tsv'
Публичная зона; обязателен завершающий . в FQDN, далее делегировать NS у регистратора
yc dns zone create --name myzone --zone example.com. --public-visibility
Добавить apex A-запись с TTL 600 c; @ — корень зоны
yc dns zone add-records --name myzone --record '@ 600 A 1.2.3.4'
Поднять ВМ с публичным NAT-IP и инициализацией через cloud-init user-data
yc compute instance create --name web-1 --zone ru-central1-a --network-interface subnet-name=sub-a,nat-ip-version=ipv4 --create-boot-disk image-family=ubuntu-2204-lts,size=20 --metadata-from-file user-data=cloud-init.yaml
Развернуть отказоустойчивый кластер PG16; note: для прода берите preset s3, а не burstable класс b
yc managed-postgresql cluster create --name <name> --environment production --postgresql-version 16 --network-name <name> --host zone-id=ru-central1-a,subnet-name=<name> --resource-preset s3-c2-m8 --disk-size 50 --disk-type network-ssd
Показать FQDN хостов с ролью MASTER/REPLICA и состоянием для маршрутизации подключений
yc managed-postgresql cluster list-hosts --cluster-name <name> --format json | jq -r '.[] | "\(.name)\t\(.role)\t\(.health)"'
Создать пользователя через stdin и БД с этим владельцем; note: password-stdin не светит пароль в истории shell
yc managed-postgresql user create <name> --cluster-name <name> --password-stdin && yc managed-postgresql database create <name> --cluster-name <name> --owner <name>
Подключение через PgBouncer 6432 с YC CA; note: verify-full требует root.crt для проверки хоста
curl -s https://storage.yandexcloud.net/cloud-certs/CA.pem -o ~/.postgresql/root.crt && psql "host=<host> port=6432 sslmode=verify-full dbname=<name> user=<name> target_session_attrs=read-write"
Отфильтровать только нездоровые кластеры Redis для быстрого триажа парка
yc managed-redis cluster list --format json | jq -r '.[] | select(.health!="ALIVE") | "\(.name)\t\(.status)\t\(.health)"'
Аудит версий и пресетов кластеров ClickHouse для поиска кандидатов на обновление
yc managed-clickhouse cluster list --format json | jq -r '.[] | "\(.name)\t\(.config.version)\t\(.resources.resourcePresetId)"'
Выпустить S3-совместимый статический ключ для SA; note: secret показывается один раз, сохраните сразу
yc iam access-key create --service-account-name <name> --format json | jq -r '"AWS_ACCESS_KEY_ID=\(.access_key.key_id)\nAWS_SECRET_ACCESS_KEY=\(.secret)"'
Синхронизировать в YC bucket через S3 API; modern: --delete зеркалит и удаляет устаревшие объекты
aws --endpoint-url=https://storage.yandexcloud.net s3 sync ./dist s3://<name>/<id>/ --delete --exclude '*.map'
Вывести бакеты с лимитом размера в GiB и классом хранения за один проход
yc storage bucket list --format json | jq -r '.[] | "\(.name)\t\(.max_size/1073741824)GiB\t\(.default_storage_class)"'
Автоудаление объектов с префиксом через 30 дней для снижения стоимости хранения
aws --endpoint-url=https://storage.yandexcloud.net s3api put-bucket-lifecycle-configuration --bucket <name> --lifecycle-configuration '{"Rules":[{"ID":"expire-logs","Status":"Enabled","Filter":{"Prefix":"logs/"},"Expiration":{"Days":30}}]}'
Создать CR и подключить хелпер учёток docker; modern: yc как credential helper, без docker login
yc container registry create --name <name> && yc container registry configure-docker
Тег с подставленным id реестра и push; не хардкодит cr.yandex/<reg-id>
docker tag <name>:<id> cr.yandex/$(yc container registry get --name <name> --format json | jq -r .id)/<name>:<id> && docker push cr.yandex/$(yc container registry get --name <name> --format json | jq -r .id)/<name>:<id>
Перечислить все теги по всем репозиториям; полезно перед чисткой реестра (GC)
yc container repository list --format json | jq -r '.[].name' | while read r; do yc container image list --repository-name "$r" --format json | jq -r '.[] | "\(.name):\(.tags[]? // "<none>")"'; done
Выкатить новую ревизию из образа CR; note: concurrency ограничивает число запросов на инстанс
yc serverless container create --name <name>; yc serverless container revision deploy --container-name <name> --image cr.yandex/<id>/<name>:<id> --cores 1 --memory 512M --service-account-id <id> --concurrency 4
Читать YC Cloud Logging только ERROR/WARN; modern: --since принимает относительные окна 1h/30m
yc logging read --group-name <name> --since 1h --levels ERROR,WARN --format json | jq -r '.[] | "\(.timestamp) \(.level) \(.message)"'
Запросить wildcard-сертификат и проверить статус; note: для выпуска нужна DNS/HTTP-валидация
yc certificate-manager certificate request --name <name> --domains <host>,*.<host> && yc certificate-manager certificate list --format json | jq -r '.[] | "\(.name)\t\(.status)\t\(.not_after)"'
Поиск долгих запросов
postgres
Показать активные запросы, работающие дольше 5 минут, начиная с самых долгих
SELECT pid, now()-query_start AS dur, state, query FROM pg_stat_activity WHERE state='active' AND now()-query_start > interval '5 min' ORDER BY dur DESC;
Завершить зависший backend
postgres
Принудительно завершить процесс по pid; note: сначала пробуйте pg_cancel_backend, чтобы отменить только запрос
SELECT pg_terminate_backend(<pid>); -- graceful first: SELECT pg_cancel_backend(<pid>);
Топ запросов по общему времени
postgres
pg_stat_statements: ранжирование запросов по суммарному времени выполнения
SELECT query, calls, total_exec_time, mean_exec_time, rows FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20;
EXPLAIN с буферами
postgres
Выполнить запрос с реальными таймингами и попаданиями в буферы, чтобы увидеть дисковый I/O
EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT ... ; -- shared hit/read shows cache vs disk I/O
Дерево блокировок
postgres
Показать процессы, ждущие блокировок, и какие pid их блокируют
SELECT pid, pg_blocking_pids(pid) AS blocked_by, wait_event_type, query FROM pg_stat_activity WHERE cardinality(pg_blocking_pids(pid)) > 0;
Лаг репликации в байтах
postgres
Измерить лаг реплики в байтах и интервалы write/flush/replay
SELECT client_addr, state, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag_bytes, write_lag, flush_lag, replay_lag FROM pg_stat_replication;
Самые большие базы
postgres
Размер каждой базы в человекочитаемом виде, начиная с самых больших
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database ORDER BY pg_database_size(datname) DESC;
Размер таблиц и индексов
postgres
Топ таблиц по полному размеру с учётом индексов и TOAST
SELECT relname, pg_size_pretty(pg_total_relation_size(oid)) AS total, pg_size_pretty(pg_relation_size(oid)) AS table FROM pg_class WHERE relkind='r' ORDER BY pg_total_relation_size(oid) DESC LIMIT 20;
Поиск неиспользуемых индексов
postgres
Индексы, которые ни разу не сканировались (idx_scan=0); кандидаты на удаление для освобождения места
SELECT relname, indexrelname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid)) AS size FROM pg_stat_user_indexes WHERE idx_scan=0 ORDER BY pg_relation_size(indexrelid) DESC;
Проверка автовакуума
postgres
Найти таблицы с мёртвыми кортежами и давно не запускавшимся автовакуумом
SELECT relname, n_dead_tup, last_autovacuum, last_autoanalyze FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 20;
Перестройка индекса без блокировки
postgres
Перестроить распухший индекс онлайн; note: нельзя выполнять внутри транзакции
REINDEX INDEX CONCURRENTLY <name>; -- note: cannot run inside a transaction block
Создание индекса онлайн
postgres
Создать индекс без блокировки записи; отслеживать через pg_stat_progress_create_index
CREATE INDEX CONCURRENTLY idx_<name> ON <table>(col); -- monitor: SELECT * FROM pg_stat_progress_create_index;
Параллельный дамп и восстановление
postgres
Параллельный дамп/восстановление в custom-формате; note: -j требует custom или directory формат, а не обычный SQL
pg_dump -Fc -j 4 -d <name> -f db.dump && pg_restore -j 4 -d <name> db.dump
Нагрузочный тест pgbench
postgres
Запустить 60-секундный нагрузочный тест: 32 клиента, 8 потоков, отчёт каждые 5с
pgbench -c 32 -j 8 -T 60 -P 5 -d <name>; -- init once: pgbench -i -s 100 <name>
Сэмплирует пространство ключей и находит крупнейшие ключи по типам; прим.: оценочно, использует SCAN, не блокирует
redis-cli --bigkeys
Ключи по объёму памяти
redis
Сэмплирует ключи с сортировкой по реальному потреблению памяти, а не по числу элементов; находит пожирателей RAM
redis-cli --memkeys
Объём в байтах для одного ключа с накладными расходами; SAMPLES 0 — точно для коллекций
redis-cli MEMORY USAGE <name> SAMPLES 0
Анализ slowlog
redis
Показывает 10 самых медленных команд с аргументами и временем, затем очищает журнал
redis-cli SLOWLOG GET 10; redis-cli SLOWLOG RESET
Диагностика задержек
redis
Понятный анализ задержек с вероятными причинами; используйте вместе с LATENCY HISTORY <event>
redis-cli LATENCY DOCTOR
Находит долгоживущие/простаивающие соединения, утекающие сокеты; сортировка по age и idle
redis-cli CLIENT LIST | tr ' ' '\n' | grep -E 'addr=|age=|idle=' | paste - - - | sort -t= -k3 -rn | head
Проверка кластера
redis
Проверяет покрытие слотов, согласованность узлов и открытые слоты по всему кластеру
redis-cli --cluster check <host>:<port>
Статус набора реплик
mongodb
Состояние и время последней операции по каждому участнику; находит отстающие или нездоровые реплики
mongosh --eval 'rs.status().members.forEach(m=>print(m.name,m.stateStr,m.optimeDate))'
Завершение долгих операций
mongodb
Показывает запросы дольше 5с с ns и завершает каждый через killOp; прим.: killOp асинхронна, проверьте результат
mongosh --eval 'db.currentOp({secs_running:{$gt:5},op:{$ne:"none"}}).inprog.forEach(o=>{print(o.opid,o.secs_running,o.ns); db.killOp(o.opid)})'
План запроса со статистикой
mongodb
Показывает просмотренные и возвращённые документы и использование индекса; COLLSCAN — индекса нет
mongosh --eval 'db.<name>.find({status:"active"}).explain("executionStats").executionStats'
Поиск неиспользуемых индексов
mongodb
Число обращений к каждому индексу; ноль — кандидат на удаление ради экономии на записи
mongosh --eval 'db.<name>.aggregate([{$indexStats:{}}]).forEach(i=>print(i.name,i.accesses.ops))'
Записывает операции медленнее 100мс, затем читает худшие из system.profile
mongosh --eval 'db.setProfilingLevel(1,{slowms:100}); db.system.profile.find().sort({millis:-1}).limit(5)'
Самые медленные запросы
clickhouse
Топ медленных завершённых запросов за час с памятью; type=2 — QueryFinish
clickhouse-client -q "SELECT query_duration_ms, formatReadableSize(memory_usage) mem, substring(query,1,80) FROM system.query_log WHERE type=2 AND event_time>now()-3600 ORDER BY query_duration_ms DESC LIMIT 10"
Незавершённые мутации
clickhouse
Находит зависшие мутации ALTER/DELETE с причиной сбоя; блокируют изменения схемы
clickhouse-client -q "SELECT database, table, mutation_id, latest_fail_reason FROM system.mutations WHERE is_done=0"
Офлайн-проверка синтаксиса правил перед применением; note: ненулевой код выхода при ошибке, удобно для CI-гейта
falco -r /etc/falco/falco_rules.yaml --validate
Выбирает из JSON-вывода только события Falco уровня Critical; требует json_output: true в falco.yaml
kubectl logs -l app.kubernetes.io/name=falco -n falco | jq 'select(.priority=="Critical")'
Загрузка и управление версионированными правилами/плагинами через OCI; modern: заменяет ручное копирование файлов правил
falcoctl artifact install falco-rules:latest && falcoctl artifact list
Запускает Falco на 60 секунд и завершается; удобно для разовой диагностики подозрительного узла
falco -M 60 -o json_output=true 2>/dev/null | jq -c '{rule,output_fields}'
Показывает доступные поля фильтрации для написания условий и вывода в своих правилах
falco --list | grep -E 'k8s\.|container\.|proc\.' | sort
Минимальное своё правило с condition/output/priority; подхватывается из каталога rules.d
cat > /etc/falco/rules.d/shell.yaml <<'EOF'
- rule: Shell in container
desc: A shell was spawned in a container
condition: container and proc.name in (bash, sh, zsh)
output: "Shell spawned (pod=%k8s.pod.name cmd=%proc.cmdline)"
priority: WARNING
EOF
Показывает все политики Kyverno с режимом enforce/audit и готовностью одним взглядом
kubectl get cpol,pol -A -o custom-columns='NAME:.metadata.name,ACTION:.spec.validationFailureAction,READY:.status.ready'
Прогон политики по манифесту без кластера; формирует PolicyReport для гейта в CI
kyverno apply policy.yaml --resource resource.yaml --policy-report
Запуск набора тестов политик
kyverno
Выполняет наборы kyverno-test.yaml с проверкой pass/fail/skip ресурсов; -d даёт подробный diff
kyverno test ./tests --remove-color -d
Сводит проваленные результаты PolicyReport по всему кластеру с подсчётом по частоте
kubectl get polr,cpolr -A -o json | jq -r '.items[].results[] | select(.result=="fail") | "\(.policy)/\(.rule)"' | sort | uniq -c
Авто-добавление меток при admission через strategic merge patch; mutate выполняется до validate
kubectl apply -f - <<'EOF'
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-team-label
spec:
rules:
- name: add-label
match:
any:
- resources:
kinds: [Pod]
mutate:
patchStrategicMerge:
metadata:
labels:
team: "{{request.userInfo.username}}"
EOF
Список шаблонов и активных ограничений
opa-gatekeeper
Перечисляет ConstraintTemplates и все созданные виды constraint по всем неймспейсам
kubectl get constrainttemplates && kubectl get constraints -A
Аудит нарушений ограничения через status
opa-gatekeeper
Читает нарушающие ресурсы из status аудита ограничения без повторного сканирования
kubectl get k8srequiredlabels <name> -o jsonpath='{.status.totalViolations} {range .status.violations[*]}{"\n"}{.kind}/{.name}: {.message}{end}'
Офлайн-тест политик через gator
opa-gatekeeper
Проверка шаблонов и ограничений на фикстурах без кластера; modern: сдвиг проверки влево в CI
gator test -f policy/ && gator verify ./suite
Подписать образ по дайджесту
cosign
Подписывайте по неизменяемому дайджесту, не по тегу; примечание: подпись по тегу небезопасна
cosign sign --key cosign.key <host>/<name>@sha256:<id>
Беcключевая подпись через Fulcio/Rekor по OIDC-личности; modern: по умолчанию в cosign v2
COSIGN_EXPERIMENTAL=1 cosign sign <host>/<name>@sha256:<id>
Проверка беcключевой подписи с привязкой к личности и OIDC-издателю; примечание: задавайте оба
cosign verify --certificate-identity=<id> --certificate-oidc-issuer=<host> <host>/<name> | jq .
Аттестация SBOM CycloneDX
cosign
Прикрепляет подписанную аттестацию SBOM CycloneDX к дайджесту образа
cosign attest --key cosign.key --predicate sbom.json --type cyclonedx <host>/<name>@sha256:<id>
Проверить аттестацию по типу
cosign
Проверяет аттестацию и декодирует in-toto payload для разбора предиката
cosign verify-attestation --key cosign.pub --type cyclonedx <host>/<name> | jq -r '.payload' | base64 -d | jq .
Шифрует только значения на месте; примечание: ключи остаются читаемыми, diff обозрим
SOPS_AGE_RECIPIENTS=age1<id> sops -e -i secrets.yaml
Меняет data key на получателей из .sops.yaml без ручного перешифрования открытого текста
sops updatekeys secrets.yaml
Подставляет расшифрованные секреты в env для одной команды; примечание: ничего не пишется на диск
sops exec-env secrets.enc.yaml 'terraform apply'
Меняет одно вложенное значение без редактора; удобно для скриптовой ротации
sops --set '["db"]["password"] "s3cr3t"' secrets.enc.yaml
Переиспользует существующий SSH-ключ как получателя/identity age; новых ключей не нужно
age -R ~/.ssh/id_ed25519.pub -o out.age file && age -d -i ~/.ssh/id_ed25519 out.age
Точечно изменить поле KV
vault
Обновляет одно поле, не переписывая весь секрет; примечание: kv patch требует KV-v2
vault kv patch -mount=secret app api_key=<id>
Передаёт секрет одноразовым wrapping-токеном; примечание: повторное чтение — сигнал компрометации
T=$(vault kv get -wrap-ttl=60s -field=wrapping_token -mount=secret app); vault unwrap $T
Показывает действующие ACL-права текущего токена на пути; быстрый дебаг политик
vault token capabilities database/creds/readonly
Отзывает все lease под префиксом, мгновенно убивая утёкшие динамические креды БД
vault lease revoke -prefix database/creds/readonly
Перемещение ресурса в state
terraform
Переименование/рефакторинг адреса без уничтожения; в новых версиях лучше блок moved{}
terraform state mv 'aws_instance.web' 'aws_instance.app'
Удаление осиротевшего объекта из state
terraform
Забыть ресурс из state без удаления реальной инфраструктуры; note: объект остаётся живым
terraform state rm 'aws_s3_bucket.legacy'
Просмотр state одного ресурса
terraform
Вывести все атрибуты одного адреса для разбора дрейфа и отладки
terraform state show 'module.vpc.aws_subnet.private[0]'
Поиск по списку state
terraform
Отфильтровать управляемые адреса перед операциями со state
terraform state list | grep -i 'aws_iam'
Импорт через блок import
terraform
Декларативный импорт; -generate-config-out генерирует HCL для импортируемого объекта
cat > import.tf <<'EOF'
import {
to = aws_instance.web
id = "<id>"
}
EOF
terraform plan -generate-config-out=generated.tf
Рефакторинг через блок moved
terraform
Переименование адресов в коде без destroy/recreate; фиксируется в системе контроля версий
cat >> moved.tf <<'EOF'
moved {
from = aws_instance.web
to = aws_instance.app
}
EOF
Замена ресурса (современный taint)
terraform
Принудительный destroy+recreate одного ресурса; заменяет устаревший terraform taint
terraform apply -replace='aws_instance.web'
Точечный targeted plan
terraform
Ограничить план одним адресом; note: -target — аварийный приём, может скрывать дрейф
terraform plan -target='module.db.aws_db_instance.main'
Refresh-only план (детект дрейфа)
terraform
Синхронизировать state с реальной инфраструктурой без изменений; показывает внешний дрейф
terraform plan -refresh-only
Миграция backend при init
terraform
Перенести state в новый backend; -reconfigure пропускает миграцию и сбрасывает настройки
terraform init -migrate-state -backend-config=backend.hcl
Запрос outputs через jq
terraform
Передать машиночитаемые outputs в jq для скриптов и связывания систем
terraform output -json | jq -r '.endpoints.value[]'
Трассировка плана через TF_LOG
terraform
Записать отладку провайдера/API в файл; TRACE даёт максимально подробный уровень
TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform plan
Смена пароля vault-файла
ansible
Перешифровать vault новым паролем без раскрытия открытого текста; безопасная ротация секретов
ansible-vault rekey vault.yml --new-vault-password-file new_pass.txt
Совмещение vault-ID: файл для dev, интерактивный запрос для prod; секреты разделены по окружениям
ansible-playbook site.yml --vault-id dev@dev_pass.txt --vault-id prod@prompt
Редактирование vault на месте
ansible
Расшифровать, отредактировать в $EDITOR, зашифровать атомарно — открытый текст не пишется на диск
EDITOR=vim ansible-vault edit group_vars/prod/secrets.yml --vault-password-file ~/.vault_pass
Граф динамического инвентаря
ansible
Дерево динамического облачного инвентаря с переменными хостов; проверка группировки плагина перед запуском
ansible-inventory -i aws_ec2.yml --graph --vars
Инвентарь в формате YAML
ansible
Преобразовать динамический инвентарь в статический YAML для diff или офлайн-отладки
ansible-inventory -i aws_ec2.yml --list --yaml > resolved_inventory.yml
Автогруппировка хостов по фактам/тегам через плагин constructed; напр. role_web, region_eu
plugin: constructed
keyed_groups:
- key: tags.Role
prefix: role
- key: placement.region
prefix: region
Каркас роли через Molecule
ansible
Создать роль со сценарием Molecule; MOLECULE_DISTRO задаёт тестовый образ
molecule init role my_role --driver-name docker && cd my_role && MOLECULE_DISTRO=ubuntu2204 molecule create
Molecule converge и verify
ansible
Применить роль к тестовому инстансу, затем выполнить проверки (testinfra/ansible)
molecule converge && molecule verify
Повторный прогон роли с падением при changed — ловит неидемпотентные задачи
molecule idempotence
Вход в инстанс Molecule
ansible
Зайти по SSH в тестовый контейнер Molecule для разбора состояния до destroy
molecule login --host instance
Возобновление с нужной задачи
ansible
Пропустить всё до названной задачи; продолжить упавший плейбук без повтора подготовки
ansible-playbook site.yml --start-at-task "Deploy app config"
Сухой список задач и хостов
ansible
Показать план: все задачи и итоговые целевые хосты без подключения
ansible-playbook site.yml --list-tasks --list-hosts -i prod
Профилирование времени задач
ansible
Ранжировать задачи по времени выполнения для поиска медленных; profile_roles — вариант по ролям
ANSIBLE_CALLBACKS_ENABLED=profile_tasks ansible-playbook site.yml
Сохранить отправленные скрипты модулей в ~/.ansible/tmp для ручной отладки падающего модуля
ANSIBLE_KEEP_REMOTE_FILES=1 ansible-playbook site.yml -vvvv --limit <host>
CPU по потокам процесса
troubleshooting
Загрузка CPU по потокам — находим горячий TID внутри процесса для jstack/perf
pidstat -t -p <pid> 1
Живой просмотр горячих потоков
troubleshooting
Потоки процесса в реальном времени; горячий TID в hex (printf %x) сопоставляем с nid в jstack
top -H -p <pid>
Насыщение по ядрам CPU
troubleshooting
По ядрам %usr/%sys/%iowait — ловим одно перегруженное ядро против равномерной нагрузки
mpstat -P ALL 1
Очередь выполнения и ядра
troubleshooting
Колонка r в vmstat (готовые к запуску) выше nproc = насыщение CPU, а не просто высокий load
vmstat 1 5 | awk 'NR>2{print "runq="$1" blocked="$2}'; nproc
Число потоков процесса
troubleshooting
Число потоков на процесс и в системе; утечка потоков исчерпывает kernel.pid_max
ps -o nlwp= -p <pid>; ps -eLf | wc -l
Рост RSS во времени
troubleshooting
Снимаем RSS каждые 5с — подтверждаем реальную утечку (монотонный рост), а не обычную работу
while sleep 5; do ps -o rss= -p <pid> | awk '{print strftime("%T"),$1/1024"MB"}'; done
Быстрый итог по памяти
troubleshooting
Итог Rss/Pss/Swap одной командой без разбора всего smaps; дёшево при больших картах памяти
cat /proc/<pid>/smaps_rollup
Крупнейшие отображения памяти
troubleshooting
Топ отображений по RSS; находим утечку в куче, mmap или раздувшуюся библиотеку
pmap -x <pid> | sort -k3 -rn | head
Топ потребителей slab ядра
troubleshooting
Slab-кэши по размеру; раздутые dentry/inode объясняют давление на память ядра
slabtop -o -s c | head -20
Освобождаемая память slab
troubleshooting
Разделяем slab на освобождаемую и нет; большой SUnreclaim = реальная утечка в ядре
grep -E 'Slab|SReclaimable|SUnreclaim' /proc/meminfo
OOM killer в dmesg
troubleshooting
Жертвы OOM с читаемым временем; -T убирает нечитаемые тики ядра
dmesg -T | grep -iE 'killed process|out of memory' | tail
OOM-оценка процесса
troubleshooting
Выше oom_score = вероятнее жертва; oom_score_adj -1000 защищает процесс от OOM
cat /proc/<pid>/oom_score /proc/<pid>/oom_score_adj
OOM-события cgroup v2
troubleshooting
Счётчики oom_kill/max по cgroup; под упирается в memory.max до OOM на уровне ноды
cat /sys/fs/cgroup/<name>/memory.events | grep -E 'oom|max'
Удалённые файлы держат диск
troubleshooting
df полон, а du чист? Удалённые файлы держит открытый процесс; рестарт освобождает место
lsof +L1 | sort -k7 -rn | head
Насыщение по задержкам диска
troubleshooting
%util около 100 и растущий await = устройство перегружено; связать с шумным процессом
iostat -x 1 | awk '$1!~/^$/{print $1, "util="$NF, "await="$(NF-2)}'
Топ блочного I/O по процессам
troubleshooting
biotop из bcc: какой процесс грузит блочный I/O по байтам/задержке; modern: однострочники bpftrace
biotop-bpfcc -C 5 1
Проверка переполнения таблицы conntrack
troubleshooting
Считает отслеживаемые соединения; -S показывает insert_failed/drop при переполнении таблицы
conntrack -L 2>/dev/null | wc -l; conntrack -S
Просмотр событий conntrack в реальном времени
troubleshooting
Поток событий NEW/DESTROY вживую для отлова потерь NAT/таймаутов по порту
conntrack -E -p tcp --dport 443 -o timestamp
Исчерпание эфемерных портов
troubleshooting
Считает сокеты TIME-WAIT против диапазона портов; note: включай tw_reuse, не tw_recycle
ss -tan state time-wait | wc -l; sysctl net.ipv4.ip_local_port_range
Сводная статистика сокетов
troubleshooting
Сводка сокетов по состояниям; рост SYN-SENT указывает на потерю SYN или фаервол
ss -s; ss -tan state syn-sent | wc -l
Определение Path MTU
troubleshooting
Ищет узел падения PMTU; ping -M do запрещает фрагментацию для поиска blackhole MTU
tracepath -n <host>; ping -M do -s 1472 -c2 <host>
Проверка маршрута и ARP
troubleshooting
Показывает реальный src/интерфейс к адресу; записи FAILED означают проблему L2/ARP
ip route get <ip>; ip neigh show | grep -E 'FAILED|INCOMPLETE'
Доступность TCP-порта сквозь фаервол
troubleshooting
TCP-SYN traceroute проходит фильтрацию ICMP; nc -zv подтверждает открытый порт
traceroute -T -p 443 <host>; nc -zv <host> 443
Обход DNS через curl --resolve
troubleshooting
Привязывает хост к конкретному IP для теста бэкенда с сохранением SNI и Host
curl -sv --resolve <host>:443:<ip> https://<host>/healthz
Проверка DNS внутри кластера
troubleshooting
Одноразовый под для резолва имён в кластере; проверяет CoreDNS и сервис kube-dns
kubectl run dnsutils --image=tutum/dnsutils -it --rm --restart=Never -- nslookup kubernetes.default
Прямой запрос к CoreDNS
troubleshooting
Бьёт прямо в clusterIP CoreDNS; note: ndots:5 порождает лишние запросы для коротких имён
dig +short @$(kubectl -n kube-system get svc kube-dns -o jsonpath='{.spec.clusterIP}') <name>.<ns>.svc.cluster.local
Просмотр конфига и логов CoreDNS
troubleshooting
Смотрит Corefile (forward/cache) и логи на предмет SERVFAIL и ошибок upstream
kubectl -n kube-system get cm coredns -o yaml; kubectl -n kube-system logs deploy/coredns --tail=50
Перечисление шифров и протоколов TLS
troubleshooting
Оценивает поддерживаемые версии TLS и шифры; отмечает слабые и устаревшие наборы
nmap --script ssl-enum-ciphers -p 443 <host>
Проверка цепочки TLS и SNI
troubleshooting
Показывает полную цепочку с верным SNI; строка Verify ловит отсутствие промежуточных
openssl s_client -connect <host>:443 -servername <host> -showcerts 2>/dev/null | grep -E 'Verify|s:|i:'
Пакетная проверка срока сертификатов
troubleshooting
Перебирает много хостов и печатает notAfter; направь в sort для ближайших просрочек
for h in $(cat hosts.txt); do echo -n "$h "; echo | openssl s_client -connect $h:443 -servername $h 2>/dev/null | openssl x509 -noout -enddate; done
Декодирование claims JWT
troubleshooting
Декодирует payload для проверки exp/iss/aud; note: чинит base64url, подпись не проверяет
cut -d. -f2 <<<"$JWT" | tr '_-' '/+' | base64 -d 2>/dev/null | jq .
Список gRPC-сервисов через рефлексию
troubleshooting
Перечисляет сервисы и методы через рефлексию; -plaintext отключает TLS для отладки
grpcurl -plaintext <host>:<port> list; grpcurl -plaintext <host>:<port> describe <svc>