devops cheatsheet

1661 commands · click to copy

1661 shown
tool
tag
Все поды с расположением на нодах и IP-адресами
kubectl get pods -A -o wide
#pods
Подробная информация: события, условия, монтирование томов
kubectl describe pod <name> -n <ns>
#pods#debug
Потоковые логи в реальном времени; добавьте -c <container> для мульти-контейнерных подов
kubectl logs -f <pod> -n <ns>
#logs#debug
Логи последнего упавшего или перезапущенного экземпляра контейнера
kubectl logs <pod> --previous -n <ns>
#logs#debug
Интерактивная оболочка внутри работающего контейнера
kubectl exec -it <pod> -n <ns> -- bash
#pods#debug
Туннелирование порта кластерного сервиса на localhost
kubectl port-forward svc/<name> 8080:80 -n <ns>
#debug#network
Блокировать до завершения деплоя или таймаута (используется в CI)
kubectl rollout status deployment/<name> -n <ns>
#deployments
Вернуться к предыдущей ревизии
kubectl rollout undo deployment/<name> -n <ns>
#deployments
Немедленно изменить количество реплик
kubectl scale deployment/<name> --replicas=3 -n <ns>
#deployments
Последние события кластера, сначала старые — удобно при post-incident разборе
kubectl get events -A --sort-by='.lastTimestamp'
#debug
Валидация манифеста через живой API без применения изменений
kubectl apply --server-side --dry-run=server -f file.yaml
#config
Текущее состояние без служебных полей; удобен как базовый шаблон
kubectl get deployment/<name> -n <ns> -o yaml
#config
Удалить под в состоянии Terminating немедленно (используйте с осторожностью)
kubectl delete pod <name> -n <ns> --grace-period=0 --force
#pods#debug
Извлечь файл из работающего контейнера
kubectl cp <ns>/<pod>:/remote/path ./local-path
#debug
Cordon ноды kubectl
Пометить ноду как неналиняющую — новые поды сюда не попадают
kubectl cordon <node>
#nodes
Drain ноды kubectl
Аккуратно вытеснить все поды перед обслуживанием
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
#nodes
Открыть ресурс в $EDITOR; изменения применяются при сохранении
kubectl edit deployment/<name> -n <ns>
#deployments#config
Проверить что ServiceAccount имеет право делать
kubectl auth can-i list pods --as=system:serviceaccount:<ns>:<sa> -n <ns>
#rbac#debug
Деплой чарта; создаёт неймспейс если не существует
helm install <release> <chart> -f values.yaml -n <ns> --create-namespace
#helm
Безопасно в CI — устанавливает если нет, обновляет если есть
helm upgrade --install <release> <chart> -f values.yaml -n <ns>
#helm
Показать что именно изменится (требует плагин helm-diff)
helm diff upgrade <release> <chart> -f values.yaml -n <ns>
#helm#debug
Вывести сгенерированный YAML в stdout без деплоя
helm template <release> <chart> -f values.yaml --debug
#helm#debug
Все вычисленные значения для задеплоенного релиза
helm get values <release> -n <ns> --all
#helm
Все Helm-релизы во всех неймспейсах
helm list -A --output table
#helm
Вернуться к конкретной исторической ревизии
helm rollback <release> <revision> -n <ns>
#helm
Удалить релиз и все управляемые им ресурсы
helm uninstall <release> -n <ns>
#helm
Проверка структуры чарта и values; падает на предупреждениях в режиме --strict
helm lint <chart-dir> -f values.yaml --strict
#helm#debug
Убедиться что все контроллеры Flux запущены и CRD установлены
flux check
#flux
Сводная таблица: Kustomizations, HelmReleases, Sources — со статусом синхронизации
flux get all -A
#flux
Инициировать немедленный git pull + apply
flux reconcile kustomization <name> --with-source -n <ns>
#flux
Немедленно повторить цикл Helm install/upgrade
flux reconcile helmrelease <name> --with-source -n <ns>
#flux
Показать какие объекты Flux владеют этим ресурсом
flux trace <kind>/<name> -n <ns>
#flux#debug
Поставить на паузу — удобно при ручных hotfix
flux suspend kustomization <name> -n <ns>
#flux
Включить приостановленный Kustomization или HelmRelease
flux resume kustomization <name> -n <ns>
#flux
Бэкап текущего конфига Flux как YAML для бутстрапа другого кластера
flux export kustomization --all > clusters/cluster.yaml
#flux#config
Кросс-компиляция и push в реестр с BuildKit
docker buildx build --platform linux/amd64,linux/arm64 -t reg/img:tag --push .
#docker
Локальный запуск с переменными из файла; --rm удаляет контейнер при выходе
docker run --rm -it --env-file .env -p 8000:8000 img:tag
#docker
Каждый слой, его команда и размер; поиск лишнего
docker history --no-trunc img:tag
#docker#debug
Удалить остановленные контейнеры, неиспользуемые образы, сети, тома
docker system prune -af --volumes
#docker
Перетегировать и запушить в другой реестр
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
#docker
Показать изменения; сохранить артефакт плана для гейтинга в CI
terraform plan -var-file=prod.tfvars -out=plan.tfplan
#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
#terraform
Переименовать/реорганизовать ресурс без удаления и пересоздания
terraform state mv old.address new.address
#terraform
Присоединить debug-контейнер (netshoot) к работающему поду — общие PID/net namespace
kubectl debug -it <pod> --image=nicolaka/netshoot -n <ns>
#debug#network#pods
CPU и память по каждой ноде (требует metrics-server)
kubectl top nodes
#nodes#monitoring
Поды отсортированные по памяти во всех неймспейсах — найти прожорливые
kubectl top pods -A --sort-by=memory
#pods#monitoring
Вывести только поле data; передайте в python -m json.tool для форматирования
kubectl get cm <name> -n <ns> -o jsonpath='{.data}'
#config#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()]"
#secrets#debug
Перечислить все типы ресурсов в неймспейсе — удобно для аудита
kubectl api-resources --verbs=list --namespaced -o name | xargs -I{} kubectl get {} -n <ns> --ignore-not-found
#debug
Извлечь конкретные поля из объектов k8s API без jq
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}\t{.metadata.name}\t{.status.phase}\n{end}'
#debug#pods
Вывести только нужные поля без jq
kubectl get pods -n <ns> -o custom-columns='NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase'
#pods
Изменить поле ресурса без редактирования манифеста
kubectl patch deployment <name> -n <ns> -p '{"spec":{"replicas":2}}'
#deployments#config
Добавить/обновить аннотацию; --overwrite заменяет существующее значение
kubectl annotate pod <pod> -n <ns> key=value --overwrite
#config
Добавить или изменить лейбл на любом ресурсе
kubectl label node <node> role=worker --overwrite
#nodes#config
Запретить размещение подов без соответствующего toleration
kubectl taint nodes <node> key=value:NoSchedule
#nodes
Снять taint — поставить тире в конце
kubectl taint nodes <node> key=value:NoSchedule-
#nodes
Обновить образ контейнера без редактирования YAML
kubectl set image deployment/<name> <container>=image:tag -n <ns>
#deployments
Все ревизии с причиной изменения
kubectl rollout history deployment/<name> -n <ns>
#deployments
Перезапустить поды по одному без простоя
kubectl rollout restart deployment/<name> -n <ns>
#deployments
Создать новый неймспейс; идемпотентно через --dry-run=client | apply
kubectl create namespace <ns>
#config
Обновить requests и limits деплоймента без правки YAML
kubectl set resources deployment/<name> -c <container> --requests=cpu=100m,memory=128Mi --limits=cpu=500m,memory=512Mi -n <ns>
#deployments#config
Временный под для отладки; удаляется при выходе
kubectl run tmp --image=nicolaka/netshoot -it --rm --restart=Never -n <ns> -- bash
#debug#pods
Все лейблы назначенные на каждую ноду
kubectl get nodes --show-labels
#nodes
Разрешить планирование на ранее заблокированной ноде
kubectl uncordon <node>
#nodes
HPA — текущие/желаемые реплики и метрики
kubectl get hpa -A
#deployments#monitoring
Использованные vs жёсткие лимиты CPU, памяти, объектов в неймспейсе
kubectl describe resourcequota -n <ns>
#config
Показать min-available и текущее число здоровых подов
kubectl get pdb -A
#deployments
Дефолтные и максимальные ресурсные лимиты подов в неймспейсе
kubectl describe limitrange -n <ns>
#config
Все Custom Resource Definitions отсортированные по времени создания
kubectl get crds --sort-by='.metadata.creationTimestamp'
#config#debug
Pod IP-адреса за Service — диагностика несоответствия selector
kubectl get endpoints <svc> -n <ns>
#network#debug
Статус и дата истечения сертификатов cert-manager
kubectl get certificate -A -o wide
#network#debug
Проверить topologySpreadConstraints пода
kubectl get pod <pod> -n <ns> -o jsonpath='{.spec.topologySpreadConstraints}'
#pods#config
Применить манифесты и удалить устаревшие объекты по label selector
kubectl apply -f ./dir/ --prune -l app=<label> -n <ns>
#config
Показать что изменится при применении этого манифеста
kubectl diff -f file.yaml
#config#debug
Выполнить команду в каждом поде с нужным label selector
kubectl get pods -n <ns> -l app=<label> -o name | xargs -I{} kubectl exec {} -n <ns> -- <cmd>
#pods#debug
Обновление в реальном времени при изменении статусов
kubectl get pods -n <ns> -w
#pods#debug
Использование CPU по всем неймспейсам отсортировано
kubectl top pods -A --sort-by=cpu
#pods#monitoring
Сгенерировать краткосрочный bound-токен ServiceAccount
kubectl create token <sa-name> -n <ns> --duration=1h
#rbac#config
Все разрешения текущего пользователя в неймспейсе
kubectl auth can-i --list -n <ns>
#rbac#debug
Форс-рекреация всех подов — удобно после смены ConfigMap
kubectl delete pods --all -n <ns>
#pods
Все Ingress-ресурсы с хостами и адресами
kubectl get ingress -A
#network
Резервная копия/инспекция всех подов неймспейса в YAML
kubectl get pods -n <ns> -o yaml > pods-dump.yaml
#debug#pods
Перечислить все образы контейнеров запущенных в кластере
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .spec.containers[*]}{.image}{"\n"}{end}{end}'
#debug#pods
Все доступные версии чарта в добавленных репозиториях
helm search repo <chart> --versions
#helm
Авторизоваться в OCI Helm-реестре
helm registry login registry.example.com -u user -p pass
#helm
Загрузить упакованный чарт в OCI реестр
helm push mychart-0.1.0.tgz oci://registry.example.com/charts
#helm
Создать .tgz архив из директории чарта
helm package ./my-chart --destination ./dist
#helm
Вывести README чарта в stdout
helm show readme <chart>
#helm
Сохранить дефолтные values в файл для кастомизации
helm show values <chart> > values.yaml
#helm
Установить плагин Helm по URL (например helm-diff, helm-secrets)
helm plugin install https://github.com/databus23/helm-diff
#helm
Все установленные плагины Helm с версиями
helm plugin list
#helm
Все Kubernetes манифесты генерируемые этим Helm-релизом
helm get manifest <release> -n <ns>
#helm#debug
Запустить тестовые хуки определённые в чарте
helm test <release> -n <ns>
#helm#debug
Расшифровать SOPS/age-зашифрованный файл values (требует плагин helm-secrets)
helm secrets view secrets.yaml
#helm#secrets
Вывести post-install notes задеплоенного релиза
helm get notes <release> -n <ns>
#helm
Установить Flux и запушить начальную конфигурацию в GitHub
flux bootstrap github --owner=<org> --repository=<repo> --branch=main --path=clusters/production --personal
#flux#config
Зарегистрировать git-репозиторий как источник Flux
flux create source git <name> --url=https://github.com/org/repo --branch=main -n flux-system
#flux
Зарегистрировать Helm-репозиторий как источник Flux
flux create source helm <name> --url=https://charts.example.com -n flux-system
#flux
Задеплоить чарт через ресурс HelmRelease в Flux
flux create helmrelease <name> --source=HelmRepository/<repo> --chart=<chart> --chart-version='>=1.0.0' -n <ns>
#flux#helm
Последние события из неймспейса flux-system
kubectl get events -n flux-system --sort-by='.lastTimestamp' | tail -20
#flux#debug
Удалить Kustomization или HelmRelease из кластера
flux delete kustomization <name> -n <ns>
#flux
Автоматически обновлять теги образов в git при пуше новых образов
flux create image update <name> --git-repo-ref=<repo> --git-repo-path=./deploy --checkout-branch=main --push-branch=main -n flux-system
#flux#config
Стриминг логов конкретного контроллера Flux
flux logs --kind=kustomize-controller -n flux-system --tail=50
#flux#debug
Определить какие теги образов должен отслеживать Flux
flux create image policy <name> --image-ref=<image-repo> --select-semver='>=1.0.0' -n flux-system
#flux
Вывести все манифесты для overlay в stdout
kustomize build ./overlays/prod
#kustomize
Собрать и применить kustomization за один шаг через kubectl
kubectl apply -k ./overlays/prod
#kustomize
Diff kustomization kustomize
Показать изменения перед применением
kubectl diff -k ./overlays/prod
#kustomize#debug
Добавить файл ресурса в kustomization.yaml
kustomize edit add resource ./deployment.yaml
#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>
#kustomize
Все настраиваемые поля kustomization
kustomize cfg list-setters .
#kustomize
Передать переменные времени сборки в ARG инструкции Dockerfile
docker build --build-arg VERSION=1.2.3 --build-arg ENV=prod -t img:tag .
#docker
Завершить с ошибкой при HIGH или CRITICAL уязвимостях
trivy image --exit-code 1 --severity HIGH,CRITICAL img:tag
#docker#security
Генерировать Software Bill of Materials для образа
docker sbom img:tag
#docker#security
Сетевые настройки запущенного контейнера
docker inspect <container> | jq '.[0].NetworkSettings.Networks'
#docker#debug#network
Собрать и запустить все сервисы в фоне
docker compose up -d --build
#docker#compose
Стриминг последних 100 строк и следить за сервисом compose
docker compose logs -f --tail=100 <service>
#docker#compose#logs
Остановить и удалить контейнеры, сети и тома
docker compose down -v
#docker#compose
Детальное использование диска по образам, контейнерам, томам
docker system df -v
#docker
Войти в контейнер под root даже если дефолтный пользователь другой
docker exec -it -u root <container> bash
#docker#debug
Добавить файл в запущенный контейнер без пересборки
docker cp ./local-file.conf <container>:/etc/app/config.conf
#docker#debug
Импортировать образ сохранённый через docker save
docker load < img.tar.gz
#docker
Освободить диск в самохостированном Docker Registry
docker exec -it registry bin/registry garbage-collect /etc/docker/registry/config.yml
#docker
Собрать только до конкретного stage в многостадийном Dockerfile
docker build --target builder -t img:builder .
#docker
Все workspace; текущий отмечен *
terraform workspace list
#terraform
Создать новый workspace и переключиться на него
terraform workspace new staging && terraform workspace select staging
#terraform
Проверить конфигурацию Terraform на синтаксические ошибки
terraform validate
#terraform
Автоформатировать все .tf файлы рекурсивно
terraform fmt -recursive
#terraform
Вывести все output значения в JSON; удобно в пайплайнах
terraform output -json
#terraform
Уничтожить один ресурс не трогая остальное
terraform destroy -target=module.vpc.aws_vpc.main
#terraform
Пометить ресурс для пересоздания при следующем apply
terraform taint module.eks.aws_instance.node
#terraform
Убрать ресурс из state не уничтожая его в облаке
terraform state rm module.path.resource_type.name
#terraform
Синхронизировать state с реальной инфраструктурой
terraform refresh -var-file=prod.tfvars
#terraform
Визуализировать граф зависимостей ресурсов (требует Graphviz)
terraform graph | dot -Tsvg > graph.svg
#terraform#debug
Отфильтровать ресурсы state по паттерну
terraform state list | grep <pattern>
#terraform
Plan всех зависимых Terragrunt-модулей по порядку
terragrunt run-all plan --terragrunt-non-interactive
#terragrunt
Применить все модули в порядке зависимостей, без интерактива
terragrunt run-all apply --terragrunt-non-interactive
#terragrunt
Уничтожить все модули в обратном порядке зависимостей
terragrunt run-all destroy --terragrunt-non-interactive
#terragrunt
Вывести outputs всех модулей в JSON
terragrunt run-all output -json
#terragrunt
Запустить terraform validate по всем модулям
terragrunt run-all validate
#terragrunt
Запустить плейбук с 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
#ansible
Симулировать выполнение без реальных изменений
ansible-playbook -i inventory playbook.yml --check --diff
#ansible
Проверить связь со всеми хостами из inventory
ansible all -i inventory -m ping
#ansible
Выполнить команду на всех хостах
ansible all -i inventory -m shell -a 'uptime'
#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'
#ansible#debug
Зашифровать строку inline для использования в плейбуке
ansible-vault encrypt_string 'secret_value' --name 'db_password'
#ansible#secrets
Зашифровать весь файл переменных через Ansible Vault
ansible-vault encrypt vars/secrets.yml
#ansible#secrets
Расшифровать файл зашифрованный Ansible Vault
ansible-vault decrypt vars/secrets.yml
#ansible#secrets
Просмотреть содержимое зашифрованного файла не расшифровывая на диске
ansible-vault view vars/secrets.yml
#ansible#secrets
Загрузить роли из requirements.yml в локальную директорию
ansible-galaxy install -r requirements.yml -p roles/
#ansible
Установить коллекцию Ansible из Galaxy
ansible-galaxy collection install community.kubernetes
#ansible
Все хосты и группы из inventory
ansible-inventory -i inventory --list | jq 'keys'
#ansible
Передать дополнительные переменные переопределяющие дефолты плейбука
ansible-playbook playbook.yml -e 'env=prod version=2.0'
#ansible
Максимальная детализация — каждая задача, соединение, вывод
ansible-playbook playbook.yml -vvv
#ansible#debug
Проверить синтаксис YAML без выполнения задач
ansible-playbook playbook.yml --syntax-check
#ansible
Авторизоваться в Vault с токеном
vault login <token>
#vault
Авторизоваться через AppRole метод аутентификации
vault write auth/approle/login role_id=<role> secret_id=<secret>
#vault
Прочитать секрет KV v2; добавьте -format=json для скриптов
vault kv get -mount=secret path/to/secret
#vault#secrets
Записать или обновить секрет KV v2
vault kv put -mount=secret path/to/secret key=value
#vault#secrets
Перечислить все ключи по KV пути
vault kv list -mount=secret path/to/
#vault#secrets
Мягкое удаление последней версии KV секрета
vault kv delete -mount=secret path/to/secret
#vault#secrets
Все версии, даты создания, статус удаления
vault kv metadata get -mount=secret path/to/secret
#vault#secrets
Выпустить краткосрочный токен ограниченный политикой
vault token create -policy=read-only -ttl=1h
#vault
Все включённые методы аутентификации в Vault
vault auth list
#vault
Включить и настроить Kubernetes метод аутентификации
vault auth enable kubernetes && vault write auth/kubernetes/config kubernetes_host=https://$KUBERNETES_PORT_443_TCP_ADDR:443
#vault#config
Привязать ServiceAccount к политике Vault
vault write auth/kubernetes/role/my-role bound_service_account_names=<sa> bound_service_account_namespaces=<ns> policies=<policy> ttl=1h
#vault#config
Загрузить HCL файл политики в Vault
vault policy write my-policy policy.hcl
#vault#config
Все политики в Vault
vault policy list
#vault
Подключить новый secrets engine по указанному пути
vault secrets enable -path=myapp kv-v2
#vault#config
Зашифровать данные через transit engine Vault
vault write transit/encrypt/my-key plaintext=$(echo -n 'secret' | base64)
#vault#secrets
Расшифровать ciphertext через transit engine
vault write transit/decrypt/my-key ciphertext=vault:v1:... | base64 -d
#vault#secrets
TTL, политики и права текущего токена
vault token lookup
#vault
Продлить TTL текущего токена
vault token renew
#vault
Статус запечатки, режим HA, информация о кластере
vault status
#vault#debug
Статус синхронизации, время последней синхронизации, ошибка если есть
kubectl describe externalsecret <name> -n <ns>
#secrets#debug
Все ESO ExternalSecrets и их статус Ready
kubectl get externalsecret -A
#secrets
Запустить немедленную синхронизацию обновлением аннотации
kubectl annotate externalsecret <name> -n <ns> force-sync=$(date +%s) --overwrite
#secrets
Все cluster-scope secret stores и их статус
kubectl get clustersecretstore
#secrets
Создать и запечатать k8s секрет одной командой
kubectl create secret generic mysecret --dry-run=client -n <ns> --from-literal=key=value -o yaml | kubeseal -o yaml > sealed.yaml
#secrets#config
Скачать сертификат запечатки для офлайн операций
kubeseal --fetch-cert --controller-name=sealed-secrets > pub-cert.pem
#secrets
Запечатать без доступа к кластеру используя сохранённый сертификат
kubeseal --cert pub-cert.pem -o yaml < secret.yaml > sealed.yaml
#secrets
Все SealedSecrets и статус синхронизации
kubectl get sealedsecret -A
#secrets
Проверить здоровье всех компонентов Cilium; ждать готовности
cilium status --wait
#cilium#network
Запустить встроенные end-to-end тесты связности
cilium connectivity test
#cilium#network#debug
Все управляемые Cilium эндпоинты с security identity
cilium endpoint list
#cilium#network
Поток сетевых событий конкретного пода в реальном времени
hubble observe --pod <ns>/<pod> -f
#cilium#hubble#network#debug
Только отклонённые соединения по всему кластеру
hubble observe --verdict DROPPED -f
#cilium#hubble#network#debug
Потоки всех подов неймспейса за последние 5 минут
hubble observe --namespace <ns> --since 5m
#cilium#hubble#network
Все Cilium и стандартные NetworkPolicy ресурсы
kubectl get ciliumnetworkpolicies,networkpolicies -A
#cilium#network
Статус Hubble relay и observer
hubble status
#cilium#hubble
Дропы пакетов в реальном времени из dataplane Cilium
cilium monitor --type drop
#cilium#network#debug
Разовый PromQL запрос из командной строки
curl -sG 'http://prometheus:9090/api/v1/query' --data-urlencode 'query=up' | jq .
#prometheus#monitoring
Выполнить instant PromQL запрос через promtool
promtool query instant http://prometheus:9090 'up{job="kubelet"}'
#prometheus#monitoring#debug
Запросить 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#monitoring
Проверить синтаксис файлов правил алертов/записи
promtool check rules rules.yml
#prometheus#monitoring
Создать silence для подавления оповещений при обслуживании
amtool silence add --alertmanager.url=http://alertmanager:9093 alertname=<name> --duration=2h --comment='Maintenance'
#alertmanager#monitoring
Все активные silences в Alertmanager
amtool silence query --alertmanager.url=http://alertmanager:9093
#alertmanager#monitoring
Немедленно завершить активный silence
amtool silence expire <id> --alertmanager.url=http://alertmanager:9093
#alertmanager#monitoring
Проверить корректность конфигурации Alertmanager
amtool check-config alertmanager.yml
#alertmanager#monitoring
Все срабатывающие алерты в Alertmanager
amtool alert query --alertmanager.url=http://alertmanager:9093
#alertmanager#monitoring
Горячая перезагрузка конфигурации без перезапуска
curl -X POST http://prometheus:9090/-/reload
#prometheus#monitoring
Статус кластера: green/yellow/red, шарды, ноды
curl -s http://localhost:9200/_cluster/health | jq .
#elasticsearch#monitoring
Табличный список индексов отсортированный по размеру
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"}}'
#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#monitoring
Полнотекстовый поиск документов по слову
curl -s -X POST http://localhost:9200/<index>/_search -H 'Content-Type: application/json' -d '{"query":{"match":{"message":"error"}}}'
#elasticsearch
Создать snapshot elasticsearch
Создать snapshot в зарегистрированном репозитории
curl -X PUT http://localhost:9200/_snapshot/<repo>/<snapshot>
#elasticsearch
Текущая ILM фаза и действие для индекса
curl -s 'http://localhost:9200/<index>/_ilm/explain' | jq '.indices | to_entries[] | {index:.key, phase:.value.phase, action:.value.action}'
#elasticsearch
Экспортировать дашборд 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
#kibana
Список всех 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#debug
Отправить сообщения в топик в интерактивном режиме из stdin
kafka-console-producer.sh --bootstrap-server kafka:9092 --topic <name>
#kafka#debug
Все consumer groups
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --list
#kafka
Lag по каждой партиции для consumer group
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --describe --group <group>
#kafka#monitoring#debug
Сбросить consumer group на начало топика
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --group <group> --topic <topic> --reset-offsets --to-earliest --execute
#kafka
Увеличить (только) количество партиций топика
kafka-topics.sh --bootstrap-server kafka:9092 --alter --topic <name> --partitions 6
#kafka
Самые ранние и последние offsets по партициям
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafka:9092 --topic <name>
#kafka#debug
Открыть интерактивную сессию Redis CLI
redis-cli -h redis -p 6379 -a <password>
#redis
Полная информация о сервере: память, CPU, клиенты, персистентность
redis-cli -h redis INFO all
#redis#monitoring
Стриминг всех команд выполняемых на Redis сервере
redis-cli -h redis MONITOR
#redis#debug
Последние 20 медленных запросов со временем выполнения
redis-cli -h redis SLOWLOG GET 20
#redis#debug#monitoring
Байты занимаемые конкретным ключом
redis-cli -h redis MEMORY USAGE <key>
#redis#debug
Удалить все ключи текущей БД асинхронно
redis-cli -h redis FLUSHDB ASYNC
#redis
Запустить фоновое сохранение RDB snapshot
redis-cli -h redis BGSAVE
#redis
Роль master/replica, offset репликации, подключённые реплики
redis-cli -h redis INFO replication
#redis#monitoring
Неблокирующий поиск ключей по паттерну (предпочтительнее KEYS в продакшне)
redis-cli -h redis --scan --pattern 'session:*' | head -20
#redis#debug
Оставшийся TTL в секундах; -1 = нет TTL, -2 = ключ не найден
redis-cli -h redis TTL <key>
#redis#debug
Открыть интерактивный шелл MongoDB
mongosh 'mongodb://user:pass@mongo:27017/dbname'
#mongodb
Члены replica set, отставание, статус выборов
mongosh --eval 'rs.status()' mongodb://mongo:27017
#mongodb#monitoring
Размер данных, хранилища, количество коллекций
mongosh --eval 'db.stats()' mongodb://mongo:27017/mydb
#mongodb#monitoring
Количество документов, размеры индексов, хранилище коллекции
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#debug#monitoring
Экспортировать базу данных в 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
#mongodb
Зарегистрировать MinIO сервер в клиенте mc
mc alias set myminio https://minio.example.com ACCESSKEY SECRETKEY
#minio
Все бакеты на сервере
mc ls myminio
#minio
Создать новый S3-совместимый бакет
mc mb myminio/my-bucket
#minio
Загрузить локальный файл в MinIO
mc cp ./file.tar.gz myminio/my-bucket/backups/
#minio
Непрерывная синхронизация локальной директории с бакетом
mc mirror --watch ./data myminio/my-bucket/data
#minio
Ёмкость сервера, время работы, диски, статус
mc admin info myminio
#minio#monitoring
Размер хранилища по каждому бакету
mc du --depth 1 myminio
#minio#monitoring
Применить правила истечения/перемещения объектов к бакету
mc ilm import myminio/my-bucket < lifecycle.json
#minio#config
Удалить конкретный объект из бакета
mc rm myminio/my-bucket/path/to/file.txt
#minio
Удалить бакет и все его объекты
mc rb --force myminio/my-bucket
#minio
Открыть интерактивную сессию ClickHouse CLI
clickhouse-client -h clickhouse -u default --password <pass> --database mydb
#clickhouse
Все базы данных в ClickHouse
clickhouse-client -q 'SHOW DATABASES'
#clickhouse
Все таблицы в базе данных
clickhouse-client -q 'SHOW TABLES FROM 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#monitoring
Все текущие запросы со временем выполнения
clickhouse-client -q 'SELECT query_id, user, elapsed, query FROM system.processes ORDER BY elapsed DESC'
#clickhouse#monitoring#debug
Завершить долгий или зависший запрос
clickhouse-client -q "KILL QUERY WHERE query_id='<id>'"
#clickhouse#debug
Очистить кэши ClickHouse для освобождения памяти
clickhouse-client -q 'SYSTEM DROP MARK CACHE; SYSTEM DROP UNCOMPRESSED CACHE'
#clickhouse
Принудительно синхронизировать реплику с состоянием ZooKeeper
clickhouse-client -q 'SYSTEM SYNC REPLICA mydb.myTable'
#clickhouse#monitoring
Топология кольца, нагрузка, состояние, Host ID
nodetool status
#cassandra#monitoring
Heap локальной ноды, uptime, gossip, датацентр
nodetool info
#cassandra#monitoring
Открыть интерактивный CQL шелл
cqlsh <host> 9042 -u cassandra -p cassandra
#cassandra
Все keyspace кластера
cqlsh -e 'DESCRIBE KEYSPACES'
#cassandra
Запустить incremental repair на primary range (при обслуживании)
nodetool repair -pr <keyspace>
#cassandra
Текущие compaction операции и длина очереди
nodetool compactionstats
#cassandra#monitoring
Принудительно сбросить memtable в SSTable
nodetool flush <keyspace> <table>
#cassandra
Схема таблицы с полными настройками
cqlsh -e 'DESCRIBE TABLE <keyspace>.<table>'
#cassandra
Очереди с количеством сообщений и потребителей
rabbitmqctl list_queues name messages consumers durable
#rabbitmq#monitoring
Все exchanges и их типы
rabbitmqctl list_exchanges name type durable
#rabbitmq
Все привязки очередей к exchanges
rabbitmqctl list_bindings
#rabbitmq
Все активные AMQP соединения
rabbitmqctl list_connections name peer_host port user
#rabbitmq#monitoring
Удалить все сообщения из очереди без её удаления
rabbitmqctl purge_queue <queue>
#rabbitmq
Информация ноды, запущенные приложения, память, порты
rabbitmqctl status
#rabbitmq#monitoring
Включить HTTP API управления и веб-интерфейс на порту 15672
rabbitmq-plugins enable rabbitmq_management
#rabbitmq#config
Экспортировать exchanges, очереди, bindings, пользователей, политики
rabbitmqctl export_definitions /tmp/rabbitmq-definitions.json
#rabbitmq#config
Squash, перестановка или редактирование последних 5 коммитов
git rebase -i HEAD~5
#git
Применить один коммит из другой ветки
git cherry-pick <sha>
#git
Последние движения HEAD включая rebase и reset
git reflog show --date=relative | head -20
#git#debug
Сохранить незакоммиченную работу (включая untracked) с меткой
git stash push -m 'WIP: feature-x' -u
#git
Применить и удалить конкретный stash
git stash pop stash@{2}
#git
Бинарный поиск по истории для нахождения регрессии
git bisect start && git bisect bad HEAD && git bisect good <good-sha>
#git#debug
Переключиться на ветку в параллельной директории без stash
git worktree add ../feature-branch feature/my-feature
#git
Инициализировать и обновить все submodule рекурсивно
git submodule update --init --recursive
#git
Содержимое файла на историческом коммите
git show <sha>:path/to/file
#git
Компактный визуальный граф всех веток репо
git log --oneline --graph --decorate --all | head -40
#git
Найти все коммиты которые добавляли или удаляли строку 'password'
git log -S 'password' --oneline --all
#git#security#debug
Добавить staged изменения в последний коммит без смены сообщения
git commit --amend --no-edit
#git
Удалить ветку из удалённого репозитория
git push origin --delete feature/old-branch
#git
Удалить неотслеживаемые файлы и директории (включая gitignore)
git clean -fdx
#git
Обновить все remote и удалить устаревшие tracking ветки
git fetch --all --prune --tags
#git
Форматировать и раскрасить JSON файл
cat data.json | jq '.'
#jq
Выбрать объекты где поле равно значению
cat data.json | jq '.items[] | select(.status == "Running")'
#jq
Выбрать только нужные поля в новый массив
cat data.json | jq '[.items[] | {name:.metadata.name, ns:.metadata.namespace}]'
#jq
Агрегировать элементы по значению поля
cat data.json | jq 'group_by(.namespace) | map({ns: .[0].namespace, count: length})'
#jq
Удалить поле из JSON вывода
cat data.json | jq 'del(.metadata.managedFields)'
#jq
Raw вывод (-r) для скриптов; одно значение на строку
cat data.json | jq -r '.items[].metadata.name'
#jq
Глубокое слияние двух JSON файлов (override побеждает)
jq -s '.[0] * .[1]' base.json override.json
#jq
Извлечь значение из YAML файла
yq '.spec.replicas' deployment.yaml
#yq
Обновить поле YAML файла на месте
yq -i '.spec.replicas = 3' deployment.yaml
#yq
Вывести YAML как JSON для обработки через jq
yq -o=json deployment.yaml
#yq
Глубокое слияние базового YAML с файлом переопределений
yq '. *= load("override.yaml")' base.yaml
#yq
Разбить мульти-документ YAML в JSON массив
yq -s '.' multi.yaml | yq -o=json
#yq
Найти файлы больше 100MB отсортированные по размеру
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20
#linux
15 самых больших директорий верхнего уровня
du -sh /* 2>/dev/null | sort -rh | head -15
#linux
TCP listening порты с PID и именем процесса (современный netstat)
ss -tlnp
#linux#network
Какой процесс слушает конкретный порт
ss -tlnp | grep :<port>
#linux#network#debug
15 процессов с наибольшим потреблением CPU
ps aux --sort=-%cpu | head -15
#linux#monitoring
15 процессов с наибольшим потреблением памяти
ps aux --sort=-%mem | head -15
#linux#monitoring
Стриминг логов systemd unit за последние 10 минут
journalctl -u <service> -f --since '10 minutes ago'
#linux#logs
Статус сервиса, последние строки логов, активные таймеры
systemctl status <service> --no-pager -l
#linux
Захватить конкретный трафик в pcap файл
tcpdump -i eth0 -nn host <ip> and port 80 -w /tmp/capture.pcap
#linux#network#debug
Использование inode по файловым системам; может вызвать 'no space' без полного диска
df -i | sort -k5 -rn
#linux
Все файлы, сокеты, соединения открытые процессом
lsof -p <pid>
#linux#debug
Повторять команду каждые 2 секунды с подсветкой изменений
watch -n 2 'kubectl get pods -n <ns>'
#linux
Запустить скрипт без привязки к терминалу; вывод в файл
nohup ./script.sh > /tmp/out.log 2>&1 &
#linux
Пробросить локальный порт 8080 на внутренний хост через bastion
ssh -L 8080:internal-service:80 user@bastion -N -f
#linux#network
Распаковать gz-архив tar в конкретную директорию
tar -xzf archive.tar.gz -C /target/dir/
#linux
Криптографически стойкий случайный пароль 32 байта
openssl rand -base64 32
#linux#security
Дата истечения и subject сертификата живого TLS endpoint
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
#linux#network#security
Сумма 3-й колонки файла с разделением пробелами
awk '{sum += $3} END {print sum}' file.txt
#linux
Глобальная замена строки в файле на месте
sed -i 's/old-string/new-string/g' file.txt
#linux
Подсчёт и ранжирование дублирующихся строк в файле
sort file.txt | uniq -c | sort -rn | head -20
#linux
Сканировать локальную директорию на уязвимости и мисконфигурации
trivy fs --severity HIGH,CRITICAL .
#trivy#security
Аудит безопасности кластера: образы, конфиги, RBAC
trivy k8s --report summary cluster
#trivy#security
Сканировать рабочие нагрузки только в конкретном неймспейсе
trivy k8s --namespace production --report summary all
#trivy#security
Проверить шаблоны Helm чарта на мисконфигурации безопасности
trivy config ./my-chart
#trivy#security#helm
Результаты сканирования в машиночитаемом формате
trivy image --format json -o results.json img:tag
#trivy#security
Найти мисконфигурации в Terraform/Kubernetes/Helm коде
trivy config --severity MEDIUM,HIGH,CRITICAL ./terraform
#trivy#security#terraform
Пропустить уязвимости без доступного патча
trivy image --ignore-unfixed --severity HIGH,CRITICAL img:tag
#trivy#security
Предварительно скачать актуальную базу уязвимостей
trivy image --download-db-only
#trivy#security
Все маршруты 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#network
Просмотреть конфигурацию конкретного маршрута APISIX
curl -s http://apisix:9180/apisix/admin/routes/<id> -H 'X-API-KEY: <key>' | jq .
#apisix#network
Все upstream APISIX с нодами
curl -s http://apisix:9180/apisix/admin/upstreams -H 'X-API-KEY: <key>' | jq '.list[].value | {id:.id, nodes:.nodes}'
#apisix#network
Все доступные плагины APISIX
curl -s http://apisix:9180/apisix/admin/plugins/list -H 'X-API-KEY: <key>' | jq .
#apisix
Горячая перезагрузка конфигурации APISIX из etcd
curl -X PUT http://apisix:9180/apisix/admin/configs/reload -H 'X-API-KEY: <key>'
#apisix#config
Здоровье процесса APISIX через control plane API
curl -s http://apisix:9080/apisix/status | jq .
#apisix#monitoring
Отправить 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#network
Полные заголовки запроса/ответа включая редиректы
curl -sLv https://example.com 2>&1 | grep -E '^[<>*]'
#curl#network#debug
Замерить 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#network#debug
Скачать файл показывая прогресс-бар
curl -L --progress-bar -o output.file https://example.com/file.tar.gz
#curl#network
HTTP запрос с Basic Authentication
curl -s -u user:password https://api.example.com/endpoint | jq .
#curl#network
Получить только код ответа — удобно в скриптах
curl -so /dev/null -w '%{http_code}' https://example.com
#curl#network#debug
Открыть k9s в рамках одного неймспейса
k9s -n <ns>
#k9s
Открыть k9s с конкретным kubeconfig контекстом
k9s --context <context>
#k9s
Переключить ресурс: :pods, :svc, :helmreleases, :ns
# In k9s press ':' then type 'helmreleases' or 'kustomizations'
#k9s
Нажать / и ввести паттерн для фильтрации ресурсов
# In k9s press '/' to filter by name pattern
#k9s
Показать kubectl describe для выбранного ресурса
# In k9s press 'd' on selected resource
#k9s
Стриминг логов выбранного пода/контейнера
# In k9s press 'l' on a pod
#k9s
Открыть интерактивный шелл в выбранном поде
# In k9s press 's' on a pod
#k9s
Удалить выбранный ресурс с подтверждением
# In k9s press Ctrl+D on selected resource
#k9s
Переключить активный контекст кластера
kubectl config use-context <context>
#config
Все контексты в текущем kubeconfig
kubectl config get-contexts
#config
Объединить несколько kubeconfig файлов в один
KUBECONFIG=~/.kube/config:~/.kube/cluster2.yaml kubectl config view --flatten > ~/.kube/merged.yaml
#config
Не нужно добавлять -n в каждую команду для этого контекста
kubectl config set-context --current --namespace=<ns>
#config
API server и CoreDNS endpoints кластера
kubectl cluster-info
#debug#config
Все условия каждой ноды (Ready, MemoryPressure, DiskPressure)
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{": "}{range .status.conditions[*]}{.type}={.status},{" "}{end}{"\n"}{end}'
#nodes#debug
Немедленно запустить CronJob как разовый Job
kubectl create job --from=cronjob/<name> manual-run -n <ns>
#config#debug
Заблокировать до готовности подов или таймаута
kubectl wait pod -l app=<label> -n <ns> --for=condition=Ready --timeout=120s
#pods#config
Дерево дисков, разделов, loop-устройств с типом ФС
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,UUID
#linux#disk#filesystem
UUID, метка и тип ФС для всех блочных устройств
blkid
#linux#disk#filesystem
Примонтировать ext4 раздел в /mnt/data
mount -t ext4 /dev/sdb1 /mnt/data
#linux#filesystem
Все реальные смонтированные ФС в виде дерева
findmnt --real
#linux#filesystem
Перемонтировать корневую ФС в режиме чтения-записи (напр. после rescue)
mount -o remount,rw /
#linux#filesystem
Проверка ФС без изменений; для реального исправления сначала отмонтировать
fsck -n /dev/sdb1
#linux#filesystem#debug
Форматировать раздел в ext4 с меткой
mkfs.ext4 -L datalabel /dev/sdb1
#linux#filesystem#disk
Расширить ext4 до размера раздела (после изменения раздела)
resize2fs /dev/sdb1
#linux#filesystem#disk
Метаданные ext2/3/4: размер блока, счётчик монтирований, время
tune2fs -l /dev/sda1 | grep -E 'Block (count|size)|Mount count|Last mount'
#linux#filesystem
Использование диска /var на 2 уровня вглубь
du -h --max-depth=2 /var | sort -rh | head -20
#linux#disk
Место только на реальных ФС, без tmpfs/overlay
df -hT --type=ext4 --type=xfs --type=btrfs
#linux#disk
Интерактивный редактор таблицы разделов MBR/GPT
fdisk /dev/sdb
#linux#disk#partitions
Создать один GPT раздел на весь диск
parted /dev/sdb -- mklabel gpt mkpart primary ext4 1MiB 100%
#linux#disk#partitions
Физические тома LVM с использованием места
pvs && pvdisplay
#linux#lvm#disk
Группы томов LVM со свободными PE
vgs && vgdisplay
#linux#lvm#disk
Список логических томов с путями к устройствам
lvs -o +devices
#linux#lvm#disk
Расширить LVM логический том на 10G и увеличить ext4 ФС онлайн
lvextend -L +10G /dev/vg0/lv_data && resize2fs /dev/vg0/lv_data
#linux#lvm#disk#filesystem
Выделить 2G swap-файл, права, форматировать и включить
fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile
#linux#disk#memory
Активные swap-пространства и общая статистика памяти
swapon --show && free -h
#linux#memory
Краткий список всех интерфейсов с IP
ip -br a
#linux#network
Все правила маршрутизации включая policy routes
ip route show table all
#linux#network
Добавить статический маршрут (до перезагрузки)
ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0
#linux#network
Кэш соседей (ARP/NDP) с состоянием доступности
ip neigh show
#linux#network
TX/RX байты, ошибки, дропы интерфейса
ip -s link show eth0
#linux#network#monitoring
Запрос A-записей через конкретный DNS-сервер
dig +short A example.com @8.8.8.8
#linux#network#dns
PTR-запись для IP-адреса
dig +short -x 8.8.8.8
#linux#network#dns
Полная цепочка разрешения DNS от корневых серверов
dig +trace example.com
#linux#network#dns
Все установленные TCP соединения с инфо о процессе
ss -tnp state established
#linux#network
Количество соединений в каждом состоянии TCP
ss -tan | awk 'NR>1{print $1}' | sort | uniq -c | sort -rn
#linux#network#monitoring
Traceroute + ping в TCP-режиме для обхода блокировки ICMP
mtr --report --tcp --port 443 example.com
#linux#network#debug
Пинг с DF-битом 1500 байт для обнаружения MTU проблем
ping -M do -s 1472 -c 3 8.8.8.8
#linux#network#debug
Все правила filter table со счётчиками пакетов и номерами строк
iptables -L -n -v --line-numbers
#linux#network#security
Полный ruleset nftables в читаемом виде
nft list ruleset
#linux#network#security
Измерить TCP-пропускную способность: 4 потока, 10 секунд
iperf3 -c <server_ip> -t 10 -P 4
#linux#network#monitoring
Трафик в реальном времени по соединениям на интерфейсе
iftop -i eth0 -n
#linux#network#monitoring
Версия ядра и полная информация о системе
uname -r && uname -a
#linux#kernel
Последние 50 ошибок/предупреждений ядра с читаемыми временными метками
dmesg -T --level=err,warn | tail -50
#linux#kernel#debug
Все загруженные в данный момент модули ядра
lsmod | sort
#linux#kernel
Загрузить модуль с зависимостями и проверить
modprobe <module> && lsmod | grep <module>
#linux#kernel
Параметры, версия, лицензия и зависимости модуля
modinfo <module>
#linux#kernel
Список всех параметров ядра; фильтрация по имени
sysctl -a | grep vm.swappiness
#linux#kernel
Включить IP-форвардинг немедленно (также добавьте в /etc/sysctl.d/)
sysctl -w net.ipv4.ip_forward=1
#linux#kernel#network
Параметры, переданные ядру при загрузке
cat /proc/cmdline
#linux#kernel
Выделенные FD, свободные FD и системный максимум
cat /proc/sys/fs/file-nr
#linux#kernel#monitoring
Расширенная статистика дисков каждые 2с, 5 итераций; смотреть %iowait, await
iostat -xz 2 5
#linux#disk#monitoring
CPU, память, swap, IO статистика системы в секунду
vmstat 1 5
#linux#memory#monitoring
Накопленное дисковое чтение/запись по процессам (нужен root)
iotop -ao
#linux#disk#monitoring
CPU, память, диск через sysstat (5 проб, 1с интервал)
sar -u -r -d 1 5
#linux#monitoring
Перехватить сетевые и файловые системные вызовы процесса
strace -f -e trace=network,file -p <pid>
#linux#debug#monitoring
Аппаратные счётчики CPU за 5 секунд
perf stat -e cycles,instructions,cache-misses -- sleep 5
#linux#monitoring#performance
Модель CPU, топология сокеты/ядра/потоки, частота
lscpu | grep -E 'Model|Socket|Core|Thread|MHz'
#linux#hardware
Физические слоты DIMM: размер, скорость, тип (нужен root)
dmidecode -t memory | grep -E 'Size|Speed|Locator|Type:'
#linux#hardware
Сетевые карты, GPU, NVMe контроллеры с информацией о драйвере
lspci -v | grep -A5 'VGA\|Ethernet\|NVMe'
#linux#hardware
Запретить изменение файла любым пользователем включая root
chattr +i /etc/resolv.conf && lsattr /etc/resolv.conf
#linux#filesystem#security
Расширенные атрибуты файлов в /etc/ (не по умолчанию)
lsattr -R /etc/ 2>/dev/null | grep -v '^\-\-\-\-'
#linux#filesystem
POSIX ACL: владелец, группа и дополнительные права пользователей
getfacl /srv/shared
#linux#filesystem#security
Выдать alice полный доступ без изменения групп-владельца
setfacl -m u:alice:rwx /srv/shared
#linux#filesystem#security
Найти setuid/setgid исполняемые файлы (аудит безопасности)
find / -perm /6000 -type f -ls 2>/dev/null
#linux#security
Список PID и полных командных строк по имени процесса
pgrep -la nginx
#linux
Отправить SIGTERM всей группе процессов
kill -TERM -$(pgrep -f 'my-app')
#linux
Понизить приоритет (nice +10) работающего процесса
renice -n 10 -p <pid>
#linux#performance
Запустить команду в временном scope systemd с лимитами ресурсов
systemd-run --scope -p MemoryMax=512M -p CPUQuota=50% -- ./heavy.sh
#linux#performance#cgroups
Логи nginx между двумя временными метками
journalctl --since '2024-01-15 10:00' --until '2024-01-15 10:30' -u nginx
#linux#logs
Структурированный экспорт логов для отправки в агрегаторы
journalctl -u <service> -o json | jq '{ts: .REALTIME_TIMESTAMP, msg: .MESSAGE}'
#linux#logs
Состояние синхронизации, смещение и источник NTP
timedatectl status && chronyc tracking
#linux#network
Все таймеры с временем последнего и следующего срабатывания
systemctl list-timers --all --no-pager
#linux
Добавить публичный ключ в authorized_keys на удалённом хосте
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
#linux#ssh
Синхронизировать директорию на удалённый хост с удалением лишних файлов
rsync -avz --progress --delete src/ user@host:/dest/
#linux#filesystem
Затереть диск нулями с проверкой (для NVMe используйте hdparm ATA secure erase)
shred -vzn 1 /dev/sdb
#linux#disk#security
Общее состояние SMART и ключевые показатели отказа
smartctl -a /dev/sda | grep -E 'SMART overall|Reallocated|Pending|Uncorrectable'
#linux#disk#monitoring
Запись 1GB с принудительной синхронизацией для измерения скорости
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 conv=fdatasync
#linux#disk#performance
Список Linux-неймспейсов для сети, PID и монтирования
lsns -t net,pid,mnt
#linux#kernel#containers
Дерево cgroup-иерархии systemd с назначенными ресурсами
systemd-cgls
#linux#kernel#cgroups
Найти самые большие лог-файлы по числу строк
find /var/log -name '*.log' -exec wc -l {} + | sort -rn | head -20
#linux#logs
Стриминг нескольких лог-файлов вперемешку в одном терминале
tail -f /var/log/syslog /var/log/auth.log
#linux#logs
grep внутри .gz файлов без распаковки
zgrep -i 'error' /var/log/syslog.*.gz
#linux#logs
Принудительная ротация логов вне расписания
logrotate -f /etc/logrotate.conf
#linux#logs
Вывести активные cron-задачи для каждого пользователя
for u in $(cut -f1 -d: /etc/passwd); do crontab -l -u $u 2>/dev/null | grep -v '^#' | sed "s|^|$u: |"; done
#linux
Разобрать cron-выражение и показать следующие 5 запусков
systemd-analyze calendar '*/5 * * * *'
#linux
Разделить stdout и stderr в разные файлы
command > /tmp/out.log 2> /tmp/err.log
#linux
Вывод stdout+stderr в файл и экран одновременно
command 2>&1 | tee /tmp/all.log
#linux
Найти файлы с текстом и заменить его на месте
grep -rl 'old_string' /etc/ | xargs sed -i 's/old_string/new_string/g'
#linux
Напечатать 1-й и 3-й столбцы из файла
awk '{print $1, $3}' /etc/passwd
#linux
Просуммировать значения второго столбца в файле
awk '{sum += $2} END {print sum}' file.txt
#linux
Удалить все строки-комментарии начинающиеся с #
sed -i '/^#/d' config.conf
#linux
Напечатать блок текста между метками START и END
sed -n '/START/,/END/p' file.txt
#linux
Подсчитать вхождения каждой уникальной строки
sort file.txt | uniq -c | sort -rn
#linux
Активные сессии пользователей и что они выполняют
who -H && w
#linux#security
Последние 20 записей о входах с IP и длительностью
last -n 20 | head -25
#linux#security
Топ IP с неудачными попытками входа по SSH за 24 часа
journalctl -u ssh --since '24h ago' | grep 'Failed password' | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10
#linux#security
Список sudo-правил для конкретного пользователя
sudo -l -U <username>
#linux#security
Добавить пользователя в несколько групп без удаления текущих
usermod -aG docker,sudo alice
#linux
Суммарный виртуальный размер процесса из smaps
cat /proc/<pid>/smaps | awk '/^Size/{sum+=$2} END{print sum/1024" MB"}'
#linux#memory#debug
Проверить THP и hugepages — использование и конфигурацию
grep -E 'HugePages|AnonHugePages|Transparent' /proc/meminfo
#linux#memory#kernel
Отключить THP в рантайме (лечит задержки Redis, MongoDB)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#linux#memory#kernel
NUMA-узлы, привязка CPU и распределение памяти
numactl --hardware
#linux#hardware#performance
Увеличить listen backlog для высоконагруженных сервисов
sysctl -w net.core.somaxconn=65535 net.ipv4.tcp_max_syn_backlog=65535
#linux#network#kernel
Включить контроль перегрузки BBR от Google для лучшей пропускной способности
sysctl -w net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
#linux#network#kernel#performance
Все UDP listening-сокеты с информацией о процессах
ss -ulnp
#linux#network
Привязать процесс к определённым ядрам CPU
taskset -cp 0,1 <pid>
#linux#performance
Счётчики прерываний по CPU, обновление каждую секунду
watch -n1 'cat /proc/interrupts | head -30'
#linux#hardware#monitoring
Жёсткие и мягкие лимиты ресурсов для работающего процесса
cat /proc/<pid>/limits
#linux#debug
Установить высокий лимит FD для сессии и сохранить постоянно
ulimit -n 1048576 && echo '* soft nofile 1048576 * hard nofile 1048576' >> /etc/security/limits.conf
#linux#kernel#performance
Переписать сообщение последнего коммита (только локально)
git commit --amend -m 'new message'
#git
Слить, переупорядочить или отредактировать последние 5 коммитов
git rebase -i HEAD~5
#git
Сохранить только src/ в stash с описательным именем
git stash push -m 'wip: feature-x' -- src/
#git
Список stash и применение конкретного по индексу
git stash list && git stash apply stash@{2}
#git
Применить коммиты от A до B включительно на текущую ветку
git cherry-pick A^..B
#git
Аннотировать строки 10–25 автором и датой
git blame -L 10,25 --date=short src/main.py
#git#debug
Бинарный поиск по истории для нахождения сломавшего коммита
git bisect start && git bisect bad HEAD && git bisect good v1.0
#git#debug
Список добавленных, изменённых, удалённых файлов между ветками
git diff --name-status main..feature/x
#git
ASCII-граф полной истории коммитов со всеми ветками
git log --oneline --graph --decorate --all
#git
Переместить HEAD назад на один коммит; изменения остаются в дереве
git reset HEAD~1
#git
Сбросить изменения и удалить неотслеживаемые файлы/директории
git restore . && git clean -fd
#git
Список всех тегов с первой строкой аннотации
git tag -l -n1
#git
GPG-подписанный аннотированный тег для релиза
git tag -s v1.2.3 -m 'Release 1.2.3'
#git#security
Удалить локальные ссылки на удалённые ветки которых больше нет
git fetch --prune
#git
Клонировать только последний коммит одной ветки (быстро для CI)
git clone --depth=1 --single-branch --branch main <url>
#git
Список авторов отсортированный по числу коммитов
git shortlog -sn --all
#git
Найти все коммиты чьё сообщение содержит паттерн
git log --all --grep='fix:' --oneline
#git
Найти когда строка была добавлена или удалена во всех ветках
git log -S 'functionName' --patch --all
#git#debug
Скачать коммиты и деревья; блобы загружаются по требованию
git clone --filter=blob:none <url>
#git
Переключиться на ветку в отдельной директории без смены текущей
git worktree add ../hotfix-branch hotfix/urgent
#git
Передать переменные сборки в инструкции 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
Все слои с полными командами и размерами
docker history --no-trunc <image>
#docker#debug
Просмотреть объединённую ФС контейнера как tar-поток
docker export <container> | tar -tvf - | head -30
#docker#debug
Добавленные (A), изменённые (C), удалённые (D) файлы в контейнере
docker diff <container>
#docker#debug
Сохранить ФС работающего контейнера как образ
docker commit -m 'debug snapshot' <container> debug-snapshot:$(date +%s)
#docker#debug
Ограничить контейнер 512MB RAM и половиной ядра CPU
docker run --memory=512m --cpus=0.5 --oom-kill-disable=false myapp
#docker#performance
Одноразовый снапшот CPU и памяти для всех контейнеров
docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'
#docker#monitoring
Удалить все неиспользуемые образы <none>:<none>
docker image prune -f
#docker
Удалить остановленные контейнеры, образы, сети, тома
docker system prune -a --volumes -f
#docker
Извлечь файл из запущенного или остановленного контейнера
docker cp <container>:/app/config.yaml ./local-config.yaml
#docker#debug
Пересобрать и запустить сервисы, удалить лишние контейнеры
docker compose up -d --build --remove-orphans
#docker
Запустить 5 реплик сервиса worker
docker compose up -d --scale worker=5
#docker
Стримить последние 100 строк конкретного сервиса Compose
docker compose logs -f --tail=100 worker
#docker#logs
IP-адреса всех контейнеров в сети bridge
docker network inspect bridge | jq '.[0].Containers | to_entries[] | .value | {Name, IPv4Address}'
#docker#network
Создать bridge-сеть с кастомной подсетью
docker network create --driver bridge --subnet 172.30.0.0/24 mynet
#docker#network
Экспортировать образ в архив и импортировать на другом хосте
docker save myapp:1.0 | gzip > myapp.tar.gz && docker load < myapp.tar.gz
#docker
Встроенная проверка здоровья Docker через curl (в Dockerfile)
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl -sf http://localhost:8080/health || exit 1
#docker
Показать только CVE для которых есть исправление
docker scout cves --only-fixed myapp:latest
#docker#security
Полноценный сетевой отладчик с хостовыми PID и сетью
docker run --rm -it --pid=host --network=host --privileged nicolaka/netshoot
#docker#debug#network
Отправить JSON через POST
curl -X POST https://api.example.com/v1/items -H 'Content-Type: application/json' -d '{"name":"foo"}'
#curl
Передать JWT/Bearer токен в заголовке Authorization
curl -H 'Authorization: Bearer $TOKEN' https://api.example.com/me
#curl#security
Следовать до 5 редиректов с полным выводом запрос/ответ
curl -Lv --max-redirs 5 https://example.com
#curl#debug
Тихая загрузка с ошибкой при неуспехе и следованием редиректам
curl -sSL -o /tmp/result.json https://api.example.com/data
#curl
Измерить TTFB и общее время запроса
curl -o /dev/null -sS -w 'ttfb: %{time_starttransfer}s\ntotal: %{time_total}s\n' https://example.com
#curl#monitoring
Напечатать HTTP заголовки ответа без тела
curl -sI https://example.com
#curl#debug
Multipart загрузка файла с дополнительными полями формы
curl -F 'file=@./report.pdf' -F 'user=alice' https://upload.example.com/api
#curl
Принудить HTTP/2 и проверить протокол в ответе
curl --http2 -sI https://example.com | grep -i 'http\|alt-svc'
#curl#network
Переопределить DNS для host:port (тест за CDN/балансировщиком)
curl --resolve example.com:443:1.2.3.4 https://example.com
#curl#network#debug
Повторить до 5 раз с задержкой 2с при любой ошибке
curl --retry 5 --retry-delay 2 --retry-all-errors https://api.example.com/healthz
#curl
Отправить данные формы в URL-encoded формате
curl -d 'user=alice&pass=secret' -X POST https://auth.example.com/login
#curl
mTLS-запрос с клиентским сертификатом и кастомным CA
curl --cert client.crt --key client.key --cacert ca.crt https://secure.example.com
#curl#security
Скачать 5 URL параллельно и вывести коды ответа
cat urls.txt | xargs -P 5 -I{} curl -sSL -o /dev/null -w '%{url_effective} %{http_code}\n' {}
#curl
Проверить, что 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
#curl#network#debug
Ограничить скорость загрузки до 1 МБ/с
curl --limit-rate 1M -O https://example.com/bigfile.iso
#curl
Стримить все команды Redis (исключая PING)
redis-cli MONITOR | grep -v PING
#redis#debug#monitoring
Последние 20 медленных команд со временем выполнения в мкс
redis-cli SLOWLOG GET 20
#redis#debug#monitoring
Суммарная память по ключам с заданным паттерном
redis-cli --scan --pattern 'session:*' | xargs -n1 redis-cli MEMORY USAGE | awk '{sum+=$1} END{print sum/1024/1024" MB"}'
#redis#monitoring
Безопасно удалить ключи через SCAN без блокирующего KEYS
redis-cli --scan --pattern 'cache:*' | xargs -r redis-cli DEL
#redis
Записать ключ со сроком жизни 1 час (EX = секунды)
redis-cli SET mykey 'value' EX 3600
#redis
Атомарно увеличить целочисленный счётчик
redis-cli INCRBY counter:hits 1
#redis
Опубликовать сообщение в канал Redis pub/sub
redis-cli PUBLISH events '{"type":"login","user":"alice"}'
#redis
Подписаться и слушать сообщения в канале
redis-cli SUBSCRIBE events
#redis
Роль, подключённые реплики, задержка репликации
redis-cli INFO replication
#redis#monitoring
Запустить фоновое RDB-сохранение и проверить время снапшота
redis-cli BGSAVE && redis-cli LASTSAVE
#redis
Асинхронно очистить базу данных с индексом 1
redis-cli -n 1 FLUSHDB ASYNC
#redis
Топ 10 записей из sorted set с баллами
redis-cli ZREVRANGEBYSCORE leaderboard +inf -inf WITHSCORES LIMIT 0 10
#redis
Добавить сообщение в Redis Stream с авто-ID
redis-cli XADD mystream '*' event login user alice
#redis
Здоровье кластера и список нод с диапазонами слотов
redis-cli -c CLUSTER INFO && redis-cli -c CLUSTER NODES
#redis#monitoring
100к запросов, 50 клиентов, глубина pipeline 10 (краткий вывод)
redis-benchmark -q -n 100000 -c 50 -P 10
#redis#performance
Проверить SSH и Python на всех хостах
ansible all -m ping -i inventory.ini
#ansible
Выполнить shell-команду на всех хостах группы webservers
ansible webservers -m shell -a 'uptime && free -h' -i inventory.ini
#ansible
Собрать и отфильтровать Ansible facts для одного хоста
ansible <host> -m setup -i inventory.ini | jq '.ansible_facts | {os: .ansible_distribution, mem: .ansible_memtotal_mb}'
#ansible#debug
Показать что изменится без реального применения
ansible-playbook site.yml --check --diff -i inventory.ini
#ansible#debug
Переопределить переменные из командной строки
ansible-playbook deploy.yml -e 'env=prod version=2.1.0' -i inventory.ini
#ansible
Запустить 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
#ansible#debug
Зашифровать значение inline для использования в vars
ansible-vault encrypt_string 'supersecret' --name 'db_password'
#ansible#security
Показать расшифрованное содержимое vault-файла
ansible-vault view group_vars/all/vault.yml
#ansible#security
Отправить локальный файл на все хосты с правами
ansible all -m copy -a 'src=./nginx.conf dest=/etc/nginx/nginx.conf owner=root mode=0644' -i inventory.ini
#ansible
Ad-hoc перезапуск сервиса с повышением привилегий (-b)
ansible webservers -m service -a 'name=nginx state=restarted' -b -i inventory.ini
#ansible
Отобразить иерархию групп инвентаря в виде дерева
ansible-inventory -i inventory.ini --graph
#ansible
Запустить полный тест Molecule: create, converge, verify, destroy
molecule test -s default
#ansible#debug
Показать все values (пользователя + дефолты чарта) для релиза
helm get values <release> -n <ns> --all
#helm#debug
Рендер и валидация манифестов без установки
helm template myrelease ./mychart -f values-prod.yaml | kubectl apply --dry-run=client -f -
#helm#debug
Показать YAML diff текущего и нового релиза (плагин helm-diff)
helm diff upgrade <release> ./mychart -f values.yaml -n <ns>
#helm#debug
Автоматический откат если апгрейд не прошёл за 5 минут
helm upgrade <release> ./mychart -n <ns> -f values.yaml --atomic --timeout 5m
#helm
Переопределить конкретные values чарта из командной строки
helm upgrade <release> ./mychart --set image.tag=v1.5.0 --set replicaCount=3
#helm
Вывести Kubernetes YAML применённый текущим релизом
helm get manifest <release> -n <ns>
#helm#debug
Показать историю и откатить на предыдущую ревизию
helm history <release> -n <ns> && helm rollback <release> 0 -n <ns>
#helm
Список всех версий чарта в настроенных репозиториях
helm search repo <chart> --versions | head -20
#helm
Вывести дефолтный values.yaml для версии чарта
helm show values <repo>/<chart> --version <ver>
#helm
Создать версионный .tgz архив чарта
helm package ./mychart --destination ./dist
#helm
Загрузить чарт в OCI-совместимый container registry
helm push mychart-1.0.0.tgz oci://registry.example.com/charts
#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#debug
Принудительно заменить ресурсы которые нельзя пропатчить
helm upgrade <release> ./mychart -n <ns> --force
#helm
Установить плагин helm-diff для сравнения релизов
helm plugin install https://github.com/databus23/helm-diff
#helm
Рекурсивно форматировать все .tf файлы в поддиректориях
terraform fmt -recursive
#terraform
Проверить синтаксис конфигурации без обращения к remote state
terraform validate
#terraform#debug
Сгенерировать план с prod переменными, сохранить в файл
terraform plan -var-file=prod.tfvars -out=prod.tfplan
#terraform
Применить ранее сохранённый план без повторного подтверждения
terraform apply prod.tfplan
#terraform
Вывести все атрибуты конкретного ресурса из state
terraform state show 'aws_instance.web[0]'
#terraform#debug
Переименовать или переместить ресурс без уничтожения
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]'
#terraform
Удалить ресурс из state без его уничтожения в облаке
terraform state rm 'aws_instance.legacy'
#terraform
Вывести все outputs в компактном JSON
terraform output -json | jq 'to_entries[] | {(.key): .value.value}'
#terraform
Уничтожить один ресурс без полного плана
terraform destroy -target='aws_instance.web' -auto-approve
#terraform
Освободить заблокированный state после неудачного apply
terraform force-unlock <lock-id>
#terraform#debug
Создать и активировать Terraform workspace
terraform workspace new staging && terraform workspace select staging
#terraform
Отобразить граф зависимостей как SVG (требует graphviz)
terraform graph | dot -Tsvg > graph.svg && open graph.svg
#terraform#debug
Зафиксировать версии провайдеров для нескольких платформ
terraform providers lock -platform=linux_amd64 -platform=darwin_arm64
#terraform
Отфильтровать элементы массива где value не null
jq '[.[] | select(.value != null)]' data.json
#jq
Подсчитать записи сгруппированные по полю status
jq 'group_by(.status) | map({status: .[0].status, count: length})' data.json
#jq
Уплостить один уровень вложенных массивов
jq 'flatten(1)' nested.json
#jq
Создать объект с ключами из поля id
jq 'INDEX(.[]; .id)' items.json
#jq
Глубокое слияние двух JSON объектов (правый приоритетнее)
jq -s '.[0] * .[1]' base.json override.json
#jq
Опциональные цепочки с запасным значением по умолчанию
jq '.config?.database?.host // "localhost"' config.json
#jq
Получить 5 последних событий отсортированных по timestamp
jq 'sort_by(.timestamp) | reverse | .[0:5]' events.json
#jq
Вывести выбранные поля в формате CSV
jq -r '.[] | [.id, .name, .status] | @csv' data.json
#jq
Добавить новую пару ключ-значение в каждый элемент массива
jq '[.[] | . + {"env": "prod"}]' items.json
#jq
Рекурсивно привести все строковые значения к нижнему регистру
jq 'walk(if type == "string" then ascii_downcase else . end)' data.json
#jq
Выполнить мгновенный PromQL-запрос через HTTP API
curl -sG 'http://prometheus:9090/api/v1/query' --data-urlencode 'query=up' | jq '.data.result'
#prometheus#monitoring
Получить данные временного ряда для метрики 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'
#prometheus#monitoring
PromQL: топ 10 подов по скорости использования CPU
topk(10, sum by (pod) (rate(container_cpu_usage_seconds_total[5m])))
#prometheus#monitoring
PromQL: алерт когда / диск занят более чем на 85%
100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100) > 85
#prometheus#monitoring
Горячая перезагрузка конфига и правил без перезапуска
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#monitoring
Подсчитать метрики и показать первые 20
curl -s http://prometheus:9090/api/v1/label/__name__/values | jq '.data | length, .[0:20]'
#prometheus#debug
PromQL: подсчитать активные серии сгруппированные по job
count by (job) ({__name__=~".+"})
#prometheus#monitoring
Создать тишину в Alertmanager на 2 часа
amtool silence add alertname=HighMemory --duration=2h --comment='Investigating'
#prometheus#monitoring
Статус TSDB prometheus
Просмотр TSDB head: чанки и активные серии
curl -s http://prometheus:9090/api/v1/status/tsdb | jq '{head_chunks: .data.headStats.numChunks, series: .data.headStats.numSeries}'
#prometheus#monitoring
Интерактивная сессия psql к базе данных
psql -h localhost -U myuser -d mydb
#postgres
Все базы с размером и кодировкой
psql -U postgres -c '\l+'
#postgres
Список таблиц в схеме public
psql -U myuser -d mydb -c '\dt public.*'
#postgres
План запроса с реальным временем и буферами
psql -U myuser -d mydb -c 'EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT * FROM orders WHERE status = $1;'
#postgres#debug#performance
Топ 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#monitoring#performance
Выполняющиеся запросы с длительностью и 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#monitoring
Завершить все запросы выполняющиеся дольше 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#debug
Топ 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#monitoring
Какие индексы используются и как часто
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#monitoring#performance
Индексы которые ни разу не использовались — кандидаты на удаление
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#performance
Дамп в 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
#postgres
Освободить мёртвые кортежи и обновить статистику для планировщика
psql -U myuser -d mydb -c 'VACUUM (VERBOSE, ANALYZE) orders;'
#postgres#performance
Состояние репликации и лаг в байтах по репликам
psql -U postgres -c "SELECT client_addr, state, sent_lsn, replay_lsn, (sent_lsn - replay_lsn) AS lag_bytes FROM pg_stat_replication;"
#postgres#monitoring
Активные блокировки с состоянием и запросом
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;"
#postgres#debug
Проверить nginx.conf без перезагрузки
nginx -t
#nginx
Плавная перезагрузка конфига без разрыва соединений
nginx -s reload
#nginx
Список встроенных и динамических модулей в бинарнике
nginx -V 2>&1 | tr ' ' '\n' | grep module
#nginx#debug
Стримить IP, путь, код ответа и размер ответа
tail -f /var/log/nginx/access.log | awk '{print $1, $7, $9, $10}'
#nginx#logs#monitoring
Частота каждого HTTP кода в access log
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
#nginx#monitoring
Самые популярные пути из access log
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
#nginx#monitoring
Топ 10 клиентских IP по числу запросов
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
#nginx#monitoring#security
Лимит 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;
#nginx#security
Round-robin upstream с резервом и keepalive соединениями
upstream backend { server 10.0.0.1:8080; server 10.0.0.2:8080 backup; keepalive 32; }
#nginx#network
Сжимать текстовые ответы ≥1KB на уровне 6
gzip on; gzip_types text/plain text/css application/json application/javascript; gzip_min_length 1024; gzip_comp_level 6;
#nginx#performance
Кастомное JSON-тело для ответа на rate limit или ошибку
error_page 429 /429.json; location = /429.json { default_type application/json; return 429 '{"error":"rate_limited"}'; }
#nginx
Постоянный редирект всего HTTP трафика на HTTPS
server { listen 80; return 301 https://$host$request_uri; }
#nginx#security
Встроенная страница статуса: активные, чтение, запись, ожидание
curl -s http://localhost/stub_status
#nginx#monitoring
Заблокировать подсеть и конкретный IP в location/server блоке
deny 192.168.1.0/24; deny 10.0.0.1; allow all;
#nginx#security
WebSocket прокси с обязательными заголовками Upgrade
location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; }
#nginx#network
Сгенерировать 4096-битный RSA закрытый ключ
openssl genrsa -out private.key 4096
#openssl#security
Современный Ed25519 ключ (меньше и быстрее RSA)
openssl genpkey -algorithm ed25519 -out private.key && openssl pkey -in private.key -pubout -out public.key
#openssl#security
Запрос на подпись сертификата для передачи в CA
openssl req -new -key private.key -out request.csr -subj '/CN=example.com/O=MyOrg/C=RU'
#openssl#security
Создать самоподписанный сертификат и ключ одной командой
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'
#openssl#security
Subject, Issuer, даты действия, SAN
openssl x509 -in cert.pem -noout -text | grep -E 'Subject:|Issuer:|Not (Before|After)|DNS:'
#openssl#security#debug
Вывести дату начала и окончания действия
openssl x509 -in cert.pem -noout -dates
#openssl#security
Проверить цепочку сертификатов по CA-bundle
openssl verify -CAfile ca.pem cert.pem
#openssl#security#debug
Убедиться что сертификат и ключ соответствуют друг другу
diff <(openssl x509 -pubkey -noout -in cert.pem) <(openssl pkey -pubout -in key.pem) && echo 'MATCH'
#openssl#security#debug
Упаковать сертификат + ключ + CA в .p12 файл
openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ca.pem -out bundle.p12 -name myalias
#openssl#security
Разделить .p12 на отдельные PEM файлы сертификата и ключа
openssl pkcs12 -in bundle.p12 -nokeys -out cert.pem && openssl pkcs12 -in bundle.p12 -nocerts -nodes -out key.pem
#openssl#security
Срок и издатель TLS-сертификата живого сервера
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject -issuer
#openssl#security#network
Показать полную цепочку: 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:'
#openssl#security#debug
Зашифровать файл паролем AES-256-CBC + PBKDF2
openssl enc -aes-256-cbc -pbkdf2 -in secret.txt -out secret.enc
#openssl#security
Расшифровать файл зашифрованный командой выше
openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out secret.txt
#openssl#security
Сгенерировать 64-символьный hex токен (например для API ключей)
openssl rand -hex 32
#openssl#security
Создать новую tmux сессию с именем 'work'
tmux new-session -s work
#tmux
Подключиться к существующей именованной сессии
tmux attach-session -t work
#tmux
Показать все активные сессии tmux
tmux ls
#tmux
Отсоединиться от сессии, оставив её в фоне
<prefix> d
#tmux
Завершить сессию и все её окна
tmux kill-session -t work
#tmux
Разделить текущую панель на левую и правую
<prefix> %
#tmux
Разделить текущую панель на верхнюю и нижнюю
<prefix> "
#tmux
Переместить фокус на соседнюю панель
<prefix> <arrow keys>
#tmux
Уменьшить текущую панель на 5 строк (-U вверх, -L влево, -R вправо)
tmux resize-pane -D 5
#tmux
Создать новое окно в текущей сессии
<prefix> c
#tmux
Переименовать текущее окно
<prefix> ,
#tmux
Перейти в окно по номеру
<prefix> 0-9
#tmux
Перейти в режим прокрутки/копирования; навигация стрелками или vi
<prefix> [
#tmux
Отправлять ввод во все панели одновременно (операции на нескольких серверах)
tmux setw synchronize-panes on
#tmux
Выполнить команду в каждой панели текущей сессии
tmux list-panes -s -F '#{session_name}:#{window_index}.#{pane_index}' | xargs -I{} tmux send-keys -t {} 'uptime' Enter
#tmux
Найти 'error' во всех файлах /var/log (любой регистр)
grep -ri 'error' /var/log/
#grep
3 строки до и 5 строк после каждого совпадения
grep -B3 -A5 'FATAL' app.log
#grep#debug
Вывести только количество совпадающих строк
grep -c 'POST /api' /var/log/nginx/access.log
#grep#monitoring
Извлечь IP-адреса из лога через Perl-regex
grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' access.log | sort -u
#grep
Убрать строки-комментарии и пустые строки из конфига
grep -v '^#' /etc/nginx/nginx.conf | grep -v '^\s*$'
#grep
Рекурсивный поиск только по .py файлам
grep -r --include='*.py' 'import os' /srv/app/
#grep
Рекурсивный поиск игнорируя .git и node_modules
grep -r --exclude-dir='.git' --exclude-dir='node_modules' 'TODO' .
#grep
Показать файл и номер строки для каждого совпадения
grep -rn 'panic:' /var/log/app/
#grep#debug
Файлы с TODO/FIXME/HACK в Python-коде
rg 'TODO|FIXME|HACK' --type py -l
#grep
3 строки контекста вокруг совпадений в Go файлах
rg 'panic' -C3 --glob '*.go'
#grep#debug
Поиск в скрытых и .gitignore файлах
rg 'secret_key' --hidden --no-ignore
#grep#security
Предпросмотр замены без записи в файл
rg 'old_value' --replace 'new_value' --passthru config.yaml
#grep
Суммарные совпадения, файлы, время поиска
rg 'error' /var/log/ --stats 2>&1 | tail -5
#grep#monitoring
Обрабатывать бинарный файл как текст для поиска в памяти
grep -a 'password' /proc/<pid>/mem 2>/dev/null | strings | head -20
#grep#security#debug
Найти строки содержащие ERROR, WARN или CRIT
grep -E '(ERROR|WARN|CRIT)' app.log | tail -50
#grep
Включить автозапуск и запустить немедленно одной командой
systemctl enable --now myapp.service
#systemd
Список всех юнитов в состоянии failed
systemctl list-units --state=failed
#systemd#debug
Перечитать определения юнитов и перезапустить сервис
systemctl daemon-reload && systemctl restart myapp.service
#systemd
Создать drop-in файл с частичными переопределениями
systemctl edit myapp.service
#systemd
Вывести полный unit-файл включая drop-in файлы
systemctl cat myapp.service
#systemd#debug
Топ 20 юнитов по времени инициализации
systemd-analyze blame | head -20
#systemd#performance#monitoring
Граф зависимостей загрузки в формате SVG
systemd-analyze dot --require | dot -Tsvg > boot.svg && open boot.svg
#systemd#debug
Минимальный шаблон 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
#systemd
Запустить временный one-shot юнит от конкретного пользователя
systemd-run --uid=1000 --gid=1000 --wait /usr/bin/myapp --task
#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#performance
Текущие память, CPU и потоки из cgroup
systemctl status myapp.service | grep -E 'Memory:|CPU:|Tasks:'
#systemd#monitoring
Все socket-активируемые юниты и их состояние
systemctl list-units --type=socket --all
#systemd#network
Полностью запретить запуск сервиса любыми средствами
systemctl mask snapd.service
#systemd#security
Переменные среды переданные в сервис
systemctl show myapp.service -p Environment
#systemd#debug
Создать и активировать изолированное Python-окружение
python3 -m venv .venv && source .venv/bin/activate
#python
Установить зависимости без кэша pip
pip install -r requirements.txt --no-cache-dir
#python
Сохранить точные версии всех установленных пакетов
pip freeze > requirements.txt
#python
Список пакетов для которых доступны новые версии
pip list --outdated --format=columns
#python
Раздать текущую директорию по HTTP на порту 8080
python3 -m http.server 8080
#python
Форматировать JSON-файл через стандартную библиотеку
python3 -m json.tool < input.json
#python
CPU профилирование отсортированное по накопительному времени
python3 -m cProfile -s cumulative script.py | head -30
#python#performance#debug
Запустить скрипт под отладчиком Python
python3 -m pdb script.py
#python#debug
Встроенный breakpoint() аналог import pdb; pdb.set_trace()
breakpoint() # Python 3.7+ — drops into pdb at this line
#python#debug
Остановить на первом провале, подробный вывод, краткий трейсбэк
pytest -x -v --tb=short tests/
#python#debug
Скомпилировать в байткод для поиска синтаксических ошибок
python3 -m py_compile script.py && echo OK
#python#debug
Предпросмотр изменений, затем применить форматирование Black
black --check --diff . && black .
#python
Быстрый линтер с автофиксом (замена flake8, isort, pyupgrade)
ruff check . --fix
#python
Строгая статическая проверка типов пакета
mypy --strict --ignore-missing-imports src/
#python#debug
Список публичных атрибутов любого Python объекта
python3 -c "import json; print([x for x in dir(json) if not x.startswith('_')])"
#python#debug
Явно указать файл идентификации
ssh -i ~/.ssh/id_ed25519 user@host
#ssh
Прыжок через бастион до внутреннего хоста
ssh -J bastion.example.com user@internal-host
#ssh#network
Цепочка нескольких jump-хостов в одной команде
ssh -J user@bastion1,user@bastion2 user@target
#ssh#network
Пробросить localhost:5432 на db.internal:5432 через бастион
ssh -L 5432:db.internal:5432 user@bastion -N
#ssh#network
Опубликовать локальный порт 3000 как 8080 на VPS
ssh -R 8080:localhost:3000 user@vps -N
#ssh#network
Создать локальный SOCKS5 прокси через VPS
ssh -D 1080 user@vps -N -f
#ssh#network#security
Переиспользовать существующее соединение для последующих команд
ssh -o ControlMaster=auto -o ControlPath=~/.ssh/mux-%r@%h:%p -o ControlPersist=10m user@host
#ssh#performance
Выполнить команду по SSH без интерактивной оболочки
ssh user@host 'sudo systemctl status nginx'
#ssh
Рекурсивное копирование на нестандартном порту
scp -r -P 2222 ./dist/ user@host:/var/www/app/
#ssh
Пробросить SSH агент на удалённый хост (использовать осторожно)
ssh -A user@bastion
#ssh#security
Запустить агент и загрузить ключ для сессии
eval $(ssh-agent) && ssh-add ~/.ssh/id_ed25519
#ssh
Псевдоним: команда 'ssh dev' применяет все настройки
cat >> ~/.ssh/config <<'EOF' Host dev HostName 10.0.0.5 User ubuntu IdentityFile ~/.ssh/dev_key ProxyJump bastion EOF
#ssh
Завершить зависшую SSH-сессию: тильда затем точка
~.
#ssh#debug
Получить и вывести fingerprint host keys без подключения
ssh-keyscan -t ed25519,rsa host 2>/dev/null | ssh-keygen -lf -
#ssh#security
Принудительная команда и ограничение 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
#ssh#security
KQL — фильтрация логов по значениям полей
status: 404 AND method: GET
#kibana
События за последний час с медленными ответами
response_time > 500 AND @timestamp > now-1h
#kibana#monitoring
Поиск с подстановочным знаком в значении поля
message: *OOMKilled*
#kibana#debug
Фильтр по вложенным полям метаданных Kubernetes
kubernetes.pod.name: web-* AND kubernetes.namespace: prod
#kibana#debug
Зарегистрировать новый 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
curl -s http://kibana:5601/api/status | jq '{status: .status.overall.level, version: .version.number}'
#kibana#monitoring
Все зарегистрированные index patterns
curl -s http://kibana:5601/api/saved_objects/_find?type=index-pattern | jq '.saved_objects[].attributes.title'
#kibana
Запускать Elasticsearch запросы прямо в Dev Tools
GET logs-*/_search { "query": {"match": {"level": "error"}}, "size": 10 }
#kibana#elasticsearch#debug
Сбросить объект конфигурации Kibana
curl -X DELETE http://kibana:5601/api/saved_objects/config/7.17.0 -H 'kbn-xsrf: true'
#kibana#debug
Список всех Kibana Spaces по ID
curl -s http://kibana:5601/api/spaces/space | jq '.[].id'
#kibana
Скопировать дашборд в другой 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}'
#kibana
Зашифровать Kubernetes Secret YAML в SealedSecret
kubeseal --format=yaml < secret.yaml > sealed-secret.yaml
#sealed-secrets#security
Создать и запечатать 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#security
Сохранить сертификат для offline шифрования
kubeseal --fetch-cert --controller-name=sealed-secrets --controller-namespace=kube-system > pub.pem
#sealed-secrets#security
Зашифровать без доступа к кластеру используя сохранённый сертификат
kubeseal --cert pub.pem --format yaml < secret.yaml > sealed.yaml
#sealed-secrets#security
Стриминг логов контроллера для отладки проблем шифрования
kubectl logs -n kube-system -l app.kubernetes.io/name=sealed-secrets -f
#sealed-secrets#debug
Все SealedSecrets по всем неймспейсам
kubectl get sealedsecrets -A
#sealed-secrets
Получить расшифрованный secret и перешифровать текущим ключом
kubectl get secret mysecret -o yaml | kubeseal --format yaml > sealed-new.yaml
#sealed-secrets#security
Статус SecretStore external-secrets
Все SecretStore и статус синхронизации
kubectl get secretstore,clustersecretstore -A -o wide
#external-secrets#debug
Запустить немедленную синхронизацию через обновление аннотации
kubectl annotate externalsecret mysecret force-sync=$(date +%s) --overwrite
#external-secrets
Условия синхронизации: Ready, SecretSynced
kubectl get externalsecret mysecret -o jsonpath='{.status.conditions[*]}'
#external-secrets#debug
Просмотр шаблонизации значений в spec ExternalSecret
kubectl get externalsecret mysecret -o yaml | grep -A10 'template:'
#external-secrets#debug
Компактная таблица всех ExternalSecrets с состоянием синхронизации
kubectl get externalsecrets -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,STORE:.spec.secretStoreRef.name,READY:.status.conditions[0].status'
#external-secrets
Извлечь одно поле из YAML
yq '.spec.replicas' deployment.yaml
#yq
Изменить YAML файл на месте с yq v4
yq -i '.spec.replicas = 3' deployment.yaml
#yq
Добавить переменную среды в первый контейнер
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
#yq
Глубокое слияние двух YAML документов
yq eval-all 'select(fileIndex==0) * select(fileIndex==1)' base.yaml override.yaml
#yq
Преобразовать YAML в JSON
yq -o=json '.' config.yaml
#yq
Красиво вывести JSON как YAML
cat config.json | yq -P '.'
#yq
Выбрать только Running pods из списка
yq '.items[] | select(.status.phase == "Running")' pods.yaml
#yq#debug
Точечное обновление образа для именованного контейнера
yq -i '(.spec.template.spec.containers[] | select(.name == "app") | .image) = "myapp:v2.0.0"' deployment.yaml
#yq#ci
Извлечь metadata.name из всех YAML файлов в директории
yq '.metadata.name' manifests/*.yaml
#yq
Запустить terraform plan для текущего Terragrunt модуля
terragrunt plan
#terragrunt#terraform
Применить все модули стека в порядке зависимостей
terragrunt run-all apply
#terragrunt#terraform
Уничтожить все модули стека без интерактивного подтверждения
terragrunt run-all destroy --terragrunt-non-interactive
#terragrunt#terraform
terraform validate для всех модулей
terragrunt run-all validate
#terragrunt#terraform
Все выходные значения Terragrunt в JSON
terragrunt output -json | jq '.'
#terragrunt
Переинициализировать и обновить фиксации провайдеров
terragrunt init --upgrade
#terragrunt#terraform
Дамп разрешённого terragrunt.hcl как JSON для отладки
terragrunt render-json
#terragrunt#debug
Визуализировать граф зависимостей модулей Terragrunt
terragrunt graph-dependencies | dot -Tsvg > deps.svg
#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
#terragrunt#terraform
Подключить эфемерный контейнер для отладки к работающему поду
kubectl debug -it mypod --image=busybox --target=app
#k8s-debug#kubectl
Привилегированная оболочка на узле кластера через debug pod
kubectl debug node/my-node -it --image=ubuntu
#k8s-debug#kubectl
Открыть оболочку в конкретном контейнере мульти-контейнерного пода
kubectl exec -it mypod -c sidecar-name -- /bin/sh
#k8s-debug#kubectl
Показать requests и limits для каждого контейнера
kubectl get pod mypod -o jsonpath='{range .spec.containers[*]}{.name}{"\t"}{.resources}{"\n"}{end}'
#k8s-debug#kubectl
Проверить условия узла: Ready, MemoryPressure, DiskPressure
kubectl describe node my-node | grep -A5 'Conditions:'
#k8s-debug#kubectl
Топ 20 подов по потреблению памяти
kubectl top pods -A --sort-by=memory | head -20
#k8s-debug#kubectl#monitoring
Стриминг событий для конкретного пода
kubectl get events -n mynamespace --field-selector involvedObject.name=mypod --watch
#k8s-debug#kubectl
Скачать файл из работающего контейнера
kubectl cp mynamespace/mypod:/var/log/app.log ./app.log
#k8s-debug#kubectl
Создать новый топик Kafka с 6 партициями и RF=3
kafka-topics.sh --bootstrap-server kafka:9092 --create --topic my-topic --partitions 6 --replication-factor 3
#kafka
Отставание на каждой партиции для consumer group
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --describe --group my-group
#kafka#monitoring
Сбросить offsets на начало топика
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --group my-group --reset-offsets --to-earliest --topic my-topic --execute
#kafka
Отправлять сообщения 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
Увеличить количество партиций (уменьшить нельзя)
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
#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
#kafka#debug
Имя очереди, количество сообщений и потребителей
rabbitmqctl list_queues name messages consumers
#rabbitmq
Узлы кластера, disk-узлы и партиции
rabbitmqctl cluster_status
#rabbitmq#debug
Удалить все сообщения из очереди не удаляя её
rabbitmqctl purge_queue my_queue -p my_vhost
#rabbitmq
Все exchanges с типом и признаком durable
rabbitmqctl list_exchanges name type durable
#rabbitmq
Привязки exchange→queue для vhost
rabbitmqctl list_bindings -p my_vhost
#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
#rabbitmq
Подключиться к Atlas или любому MongoDB URI с mongosh
mongosh 'mongodb+srv://user:pass@cluster.example.com/mydb'
#mongodb
Статистика выполнения включая использование индекса
db.orders.find({status:'new'}).explain('executionStats')
#mongodb#debug
Индекс по userId↑ и createdAt↓
db.orders.createIndex({userId: 1, createdAt: -1}, {background: true})
#mongodb
Топ 10 пользователей по сумме оплаченных заказов
db.orders.aggregate([{$match:{status:'paid'}},{$group:{_id:'$userId',total:{$sum:'$amount'}}},{$sort:{total:-1}},{$limit:10}])
#mongodb
Отставание вторичных нод и окно oplog
rs.printSecondaryReplicationInfo()
#mongodb#monitoring
Операции выполняющиеся более 5 секунд
db.currentOp({active:true, secs_running:{$gt:5}})
#mongodb#debug
Дамп всех коллекций базы в BSON файлы
mongodump --uri='mongodb://localhost:27017' --db=mydb --out=/backup/$(date +%F)
#mongodb
Выполнить одиночный запрос через 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#debug#monitoring
Принудительно остановить запрос по query_id
clickhouse-client -q "KILL QUERY WHERE query_id = 'abc-123'"
#clickhouse#debug
Топ 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#monitoring
Форсировать слияние всех партов (осторожно на больших таблицах)
clickhouse-client -q 'OPTIMIZE TABLE mydb.mytable FINAL'
#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'
#clickhouse#monitoring
Кольцо кластера со статусом, нагрузкой и владением данными
nodetool status
#cassandra
Отображает ожидающие и активные задачи компакции
nodetool compactionstats
#cassandra#monitoring
Выполнить CQL команду без интерактивной оболочки
cqlsh -u cassandra -p cassandra -e 'DESCRIBE KEYSPACES;'
#cassandra
Задержки чтения/записи и количество SSTable для таблицы
nodetool tablestats mykeyspace.mytable
#cassandra#monitoring
Полная починка для синхронизации всех реплик keyspace
nodetool repair -full mykeyspace
#cassandra
Состояние gossip для всех узлов (отладка)
nodetool gossipinfo
#cassandra#debug
Принудительно сбросить данные из памяти в SSTables
nodetool flush mykeyspace
#cassandra
Статус кластера: green/yellow/red с количеством шардов
curl -s http://es:9200/_cluster/health?pretty
#elasticsearch#monitoring
Все индексы по убыванию размера
curl -s 'http://es:9200/_cat/indices?v&s=store.size:desc'
#elasticsearch#monitoring
Удалить конкретный индекс (необратимо)
curl -X DELETE http://es:9200/logs-2024.01.01
#elasticsearch
Поиск с 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#debug
Все шарды с состоянием и причиной назначения
curl -s 'http://es:9200/_cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason'
#elasticsearch#debug
Повторить назначение всех неудавшихся шардов
curl -X POST http://es:9200/_cluster/reroute?retry_failed=true
#elasticsearch#debug
Изменить количество реплик у живого индекса
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'
#elasticsearch
Вывести 3-е поле (разделитель — пробел)
awk '{print $3}' file.txt
#awk#linux
Разделитель — двоеточие; вывести имя пользователя и UID
awk -F: '{print $1, $3}' /etc/passwd
#awk#linux
Вывести номер строки и содержимое для строк с ERROR
awk '/ERROR/ {print NR": "$0}' app.log
#awk#linux#debug
Накопить числовую колонку и вывести сумму
awk '{sum += $4} END {print sum}' access.log
#awk#linux
Диапазонный паттерн: строки от START до END включительно
awk '/START/,/END/' file.txt
#awk#linux
Обработать все строки кроме первой (заголовка)
awk 'NR>1 {print $1, $2}' data.csv
#awk#linux
Частота первого поля (например IP-адресов)
awk '{count[$1]++} END {for (k in count) print count[k], k}' access.log | sort -rn
#awk#linux#network
NF = количество полей; $NF = последнее поле
awk '{print $NF}' file.txt
#awk#linux
Строки где поле 2 > 500 И поле 5 равно POST
awk '$2 > 500 && $5 == "POST"' access.log
#awk#linux
Выровненный вывод с фиксированными шириной столбцов
awk '{printf "%-20s %5d\n", $1, $2}' data.txt
#awk#linux
Загрузить программу awk из внешнего файла
awk -f transform.awk input.txt
#awk#linux
Глобальная замена с записью обратно в файл
awk '{gsub(/foo/, "bar"); print}' input.txt > tmp && mv tmp input.txt
#awk#linux
Корректный разбор CSV полей с кавычками через FPAT
gawk -v FPAT='([^,]+)|("[^"]+")' '{print $2}' data.csv
#awk#linux
Выполнить код до и после обработки всех строк
awk 'BEGIN{print "Start"} {lines++} END{print lines" lines processed"}' file.txt
#awk#linux
Left-join data.txt с lookup.txt по первому полю
awk 'NR==FNR{a[$1]=$2; next} $1 in a {print $0, a[$1]}' lookup.txt data.txt
#awk#linux
Заменить первое вхождение 'foo' на 'bar' в каждой строке
sed 's/foo/bar/' file.txt
#sed#linux
Заменить все вхождения в строке флагом /g
sed 's/foo/bar/g' file.txt
#sed#linux
Изменить файл на месте (без резервной копии)
sed -i 's/old/new/g' config.cfg
#sed#linux
Редактировать на месте, сохранив оригинал как .bak
sed -i.bak 's/old/new/g' file.txt
#sed#linux
Удалить все строки-комментарии начинающиеся с #
sed '/^#/d' config.txt
#sed#linux
Удалить все пустые строки или строки из пробелов
sed '/^[[:space:]]*$/d' file.txt
#sed#linux
Вывести строки с 10 по 20 (подавить вывод флагом -n)
sed -n '10,20p' file.txt
#sed#linux
Вывести только строки содержащие ERROR
sed -n '/ERROR/p' app.log
#sed#linux#debug
Вставить строку-комментарий перед каждой директивой server_name
sed '/^server_name/i # Added by deploy script' nginx.conf
#sed#linux
Добавить строку настройки после заголовка [defaults]
sed '/^\[defaults\]/a ansible_python_interpreter=/usr/bin/python3' ansible.cfg
#sed#linux
Флаг /I в GNU sed для замены без учёта регистра
sed 's/error/ERROR/gI' file.txt
#sed#linux
Применить несколько замен одной командой
sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt
#sed#linux
Обрезать пробелы в начале и конце каждой строки
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' file.txt
#sed#linux
Применить замену только к строкам с 5 по 15
sed '5,15s/DEBUG/INFO/g' app.log
#sed#linux
Вывести значение DB_HOST из .env файла
sed -n 's/^DB_HOST=//p' .env
#sed#linux
Записать файл и выйти из vim
:wq
#vim#linux
Принудительный выход, отбросив все изменения
:q!
#vim#linux
Заменить все вхождения с подтверждением (c)
:%s/old/new/gc
#vim#linux
Открыть vim с курсором на строке 42
vim +42 file.txt
#vim#linux
/ ищет вперёд, ? — назад; n/N — следующее/предыдущее
/pattern (n/N next/prev) ?pattern (backward)
#vim#linux
Удалить все строки начинающиеся с # (комментарии)
:g/^#/d
#vim#linux
Перейти в начало (gg), переформатировать до конца файла (=G)
gg=G
#vim#linux
Макросы автоматизируют повторяющиеся правки в vim
qa (record into a) q (stop) @a (play) 10@a (play 10 times)
#vim#linux
Включить номера строк (отключить: :set nonumber)
:set number
#vim#linux
Вертикальное разделение; Ctrl-w + стрелки для навигации
:vsplit other.txt
#vim#linux
Выполнить цель 'build' в текущем Makefile
make build
#make#linux
Вывести что будет выполнено без фактического запуска
make -n deploy
#make#linux
Переопределить переменные Makefile при вызове
make IMAGE=myapp:v2 TAG=latest push
#make#linux#ci
Запустить до 4 рецептов параллельно
make -j4 test
#make#linux
Соглашение: ## комментарии делают Makefile самодокументируемым
grep -E '^[a-zA-Z_-]+:.*?##' Makefile | awk -F':.*##' '{printf "%-20s %s\n", $1, $2}'
#make#linux
Безусловно пересобрать все цели
make -B build
#make#linux
Использовать Makefile в другой директории или с другим именем
make -f infra/Makefile plan
#make#linux
Предотвратить путаницу между целями и файлами с тем же именем
.PHONY: build test deploy clean
#make#linux
$@ раскрывается в имя текущей цели внутри рецепта
build: docker build -t $(IMAGE) . && echo 'Built $@'
#make#linux
Разбить большой Makefile на модульные включения
include mk/*.mk
#make#linux
Запустить nginx в фоне без привилегий root
podman run -d --name web -p 8080:80 nginx:alpine
#podman#containers
Собрать из Containerfile (совместим с Dockerfile)
podman build -t myapp:latest -f Containerfile .
#podman#containers
Создать systemd unit для управления жизненным циклом контейнера
podman generate systemd --new --name web > ~/.config/systemd/user/web.service
#podman#containers#systemd
Запустить pod из Kubernetes манифеста (локальное тестирование)
podman play kube deployment.yaml
#podman#containers#kubectl
Сгенерировать Kubernetes-совместимый манифест из запущенного пода
podman generate kube mypod > pod.yaml
#podman#containers#kubectl
Объединить контейнеры в pod с общим сетевым пространством имён
podman pod create --name mypod -p 8080:80 && podman run -d --pod mypod nginx:alpine
#podman#containers
Список слоёв файловой системы образа
podman image inspect myapp:latest | jq '.[0].RootFS.Layers'
#podman#containers#debug
Все контейнеры: имя, статус, образ
podman ps -a --format '{{.Names}}\t{{.Status}}\t{{.Image}}'
#podman#containers
Неинтерактивно удалить все завершённые контейнеры
podman container prune -f
#podman#containers
Аутентифицироваться в container registry
podman login registry.example.com -u myuser
#podman#containers
Аутентифицировать 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#kubectl
Все приложения ArgoCD с статусом синхронизации и здоровья
argocd app list
#argocd
Запустить синхронизацию и удалить лишние ресурсы
argocd app sync myapp --prune
#argocd
Принудительно получить манифесты заново из Git
argocd app get myapp --refresh
#argocd#debug
Показать что изменится при синхронизации
argocd app diff myapp
#argocd#debug
Откатиться к ревизии 3 в истории приложения
argocd app rollback myapp 3
#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#ci
Удалить объект приложения ArgoCD без удаления ресурсов Kubernetes
argocd app delete myapp --cascade=false
#argocd
Зарегистрировать внешний кластер через kubeconfig контекст
argocd cluster add my-k8s-context
#argocd#kubectl
Все кластеры под управлением ArgoCD
argocd cluster list
#argocd
Переопределить образ контейнера для Kustomize приложения без изменений в Git
argocd app set myapp --kustomize-image myapp=myregistry/myapp:v1.2.3
#argocd#kustomize
Отключить автоматическую синхронизацию для ручного управления
argocd app set myapp --sync-policy none
#argocd
Все Kubernetes ресурсы управляемые приложением
argocd app resources myapp
#argocd#debug
Ждать пока приложение синхронизировано и здорово (CI)
argocd app wait myapp --sync --health --timeout 120
#argocd#ci
Изолировать приложения в проекте с ограничениями по источнику и назначению
argocd proj create myproject --description 'Production apps' --dest 'https://kubernetes.default.svc,prod' --src 'https://github.com/org/*'
#argocd#security
Кросс-компиляция Go бинаря для Linux/amd64
GOOS=linux GOARCH=amd64 go build -o bin/app ./cmd/app
#go#ci
Запустить все тесты с определением race condition
go test -race -count=1 ./...
#go#debug
Сгенерировать HTML отчёт о покрытии и открыть в браузере
go test -coverprofile=cov.out ./... && go tool cover -html=cov.out
#go#debug
Скачать конкретную версию модуля и обновить go.mod
go get github.com/some/pkg@v1.2.3
#go
Добавить недостающие и удалить неиспользуемые зависимости
go mod tidy
#go
Скопировать все зависимости модулей в директорию vendor/
go mod vendor
#go#ci
Запустить бенчмарки, собрать CPU профиль, открыть pprof UI
go test -cpuprofile=cpu.prof -bench=. ./... && go tool pprof cpu.prof
#go#debug#performance
Вывести import paths всех пакетов в модуле
go list ./...
#go
Переформатировать все .go файлы в текущем дереве
gofmt -w .
#go
Сообщить о вероятных ошибках в исходном коде Go
go vet ./...
#go#debug
Запустить команду под strace и сохранить вывод в файл
strace -o trace.log ls /tmp
#strace#linux#debug
Трассировать системные вызовы уже запущенного процесса
strace -p $(pgrep nginx | head -1) -o /tmp/nginx.trace
#strace#linux#debug
Фильтровать только syscall связанные с файлами
strace -e trace=openat,read,write curl https://example.com
#strace#linux#debug
Сводная таблица количества и времени системных вызовов
strace -c -e trace=all python3 app.py
#strace#linux#debug#performance
Трассировать syscall во всех дочерних процессах
strace -f -e trace=process nginx -t
#strace#linux#debug
-tt добавляет абсолютное время; -T — время каждого вызова
strace -tt -T curl https://example.com 2>&1 | head -40
#strace#linux#debug#performance
Найти файлы которые процесс пытается открыть но не находит
strace -e trace=openat -e trace=file myapp 2>&1 | grep 'ENOENT'
#strace#linux#debug
Захватить все сетевые системные вызовы
strace -e trace=network,socket curl https://example.com 2>&1 | grep -v '^---'
#strace#linux#debug#network
Захватить весь трафик на eth0 без DNS-разрешения
tcpdump -i eth0 -n
#tcpdump#network#linux
Сохранить пакеты в PCAP файл для анализа в Wireshark
tcpdump -i eth0 -w /tmp/capture.pcap
#tcpdump#network#linux
Воспроизвести и отобразить пакеты из сохранённого PCAP файла
tcpdump -r /tmp/capture.pcap -n | head -50
#tcpdump#network#linux
Захватить только трафик к/от конкретного IP
tcpdump -i any host 10.0.0.5 -n
#tcpdump#network#linux
Захватить только HTTPS трафик
tcpdump -i eth0 port 443 -n
#tcpdump#network#linux
Мониторинг всех DNS запросов на любом интерфейсе
tcpdump -i any -n port 53
#tcpdump#network#linux#debug
Захватить и вывести строки 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#network#linux#debug
BPF фильтр: трафик строго между двумя узлами
tcpdump -i eth0 'host 10.0.0.1 and host 10.0.0.2'
#tcpdump#network#linux
Подробный вывод с ASCII содержимым пакетов PostgreSQL
tcpdump -i eth0 -vvv -A -s 0 port 5432
#tcpdump#network#linux#debug
Остановиться после захвата 100 пакетов
tcpdump -i eth0 -c 100 -w capture.pcap
#tcpdump#network#linux
Правила цепочки INPUT с счётчиками пакетов/байт
iptables -L INPUT --line-numbers -n -v
#iptables#linux#network#security
Добавить правило разрешающее входящий HTTPS трафик
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#iptables#linux#network#security
Вставить DROP правило на позицию 1 для конкретного IP источника
iptables -I INPUT 1 -s 203.0.113.5 -j DROP
#iptables#linux#network#security
Включить IP маскировку для исходящего трафика (роутер/NAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#iptables#linux#network
Сохранить правила между перезагрузками
iptables-save > /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4
#iptables#linux#network
Удалить правило номер 3 из цепочки INPUT
iptables -D INPUT 3
#iptables#linux#network
Разрешить не более 3 новых SSH соединений в минуту
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 5 -j ACCEPT
#iptables#linux#network#security
Показать полную конфигурацию nftables
nft list ruleset
#iptables#linux#network#security
Принять входящий TCP трафик на порту 8080 в nftables
nft add rule inet filter input tcp dport 8080 accept
#iptables#linux#network#security
Удалить все правила nftables (осторожно: сбрасывает весь firewall)
nft flush ruleset
#iptables#linux#network#security
Все файлы (сокеты, обычные, пайпы) открытые процессом nginx
lsof -p $(pgrep nginx) | head -30
#lsof#linux#debug
Найти процесс слушающий порт 8080
lsof -i :8080
#lsof#linux#network#debug
Все открытые сетевые соединения без DNS разрешения
lsof -i -n -P
#lsof#linux#network
Все процессы с открытыми файлами в /var/log
lsof +D /var/log
#lsof#linux#debug
Файлы удалённые но ещё занятые процессами (утечка диска)
lsof | grep '(deleted)'
#lsof#linux#debug
TCP порты в режиме прослушивания с именами процессов
ss -tlnp
#lsof#linux#network
Фильтр установленных TCP соединений с информацией о процессах
ss -tanp | grep ESTAB
#lsof#linux#network
UDP порты в режиме прослушивания с именами процессов
ss -ulnp
#lsof#linux#network
Сводка использования сокетов по состоянию
ss -s
#lsof#linux#network#monitoring
Показать соединения к порту 443
ss -tnp dst :443
#lsof#linux#network
Сборка, деплой и слежение за изменениями; авто-пересборка при сохранении
skaffold dev --port-forward
#skaffold#ci#kubectl
Собрать образы, запушить в registry и задеплоить в кластер
skaffold run --tail
#skaffold#ci#kubectl
Собрать образы и экспортировать метаданные артефактов в файл
skaffold build --file-output=artifacts.json
#skaffold#ci
Деплой с использованием заранее собранных image digest из CI
skaffold deploy --build-artifacts=artifacts.json
#skaffold#ci#kubectl
Сгенерировать итоговый Kubernetes YAML без применения
skaffold render --output=manifests.yaml
#skaffold#ci#kubectl
Активировать именованный профиль из skaffold.yaml
skaffold dev -p staging
#skaffold#ci
Проверить skaffold.yaml и вывести разрешённую конфигурацию
skaffold diagnose
#skaffold#debug
Удалить все Kubernetes ресурсы созданные командой skaffold run
skaffold delete
#skaffold#kubectl
Проверить SSH соединение со всеми хостами в инвентаре
ansible all -i inventory.ini -m ping
#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#debug
Выполнить только задачи с тегами 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'
#ansible
Inline шифрование одной строки для использования в vars
ansible-vault encrypt_string 'mysecretpassword' --name 'db_password'
#ansible#security
Запустить плейбук только на web01 и web02
ansible-playbook deploy.yml -i inventory.ini --limit 'web01,web02'
#ansible
Подтверждать каждую задачу перед выполнением (режим отладки)
ansible-playbook site.yml -i inventory.ini --step
#ansible#debug
Подключить KV v2 secrets engine на пути 'secret/'
vault secrets enable -path=secret kv-v2
#vault#security
Сохранить несколько пар ключ-значение по пути
vault kv put secret/myapp/config db_password=s3cr3t api_key=abc123
#vault#security
Прочитать KV v2 секрет и извлечь данные
vault kv get -format=json secret/myapp/config | jq '.data.data'
#vault#security
Список всех ключей под префиксом KV v2
vault kv list secret/myapp/
#vault#security
Выпустить обновляемый токен с TTL 24ч для CI
vault token create -policy=read-only -period=24h -display-name=ci-pipeline
#vault#security#ci
Разрешить подам аутентифицироваться в Vault через ServiceAccount JWT
vault auth enable kubernetes && vault write auth/kubernetes/config kubernetes_host=https://kubernetes.default.svc
#vault#security#kubectl
Получить краткосрочные Postgres credentials через database secrets engine
vault read database/creds/readonly-role
#vault#security#postgres
Вручную запечатать или распечатать Vault ключом
vault operator seal vault operator unseal $UNSEAL_KEY
#vault#security
Показать что изменится в кластере (требует плагин helm-diff)
helm diff upgrade myrelease ./chart -f values.yaml
#helm#debug
Вывести пользовательские values задеплоенного релиза
helm get values myrelease -n mynamespace
#helm#debug
Все values включая defaults чарта
helm get values myrelease -a -n mynamespace
#helm#debug
Откатить релиз к ревизии номер 2
helm rollback myrelease 2 -n mynamespace
#helm
Список всех ревизий Helm релиза со статусом
helm history myrelease -n mynamespace
#helm#debug
Создать версионный .tgz пакет из директории чарта
helm package ./mychart --version 1.2.3 --app-version 1.2.3
#helm#ci
Опубликовать чарт в OCI-совместимый registry (Helm 3.8+)
helm push mychart-1.2.3.tgz oci://registry.example.com/charts
#helm#ci
Валидировать структуру чарта и обнаружить ошибки шаблонов
helm lint ./mychart -f values.yaml --strict
#helm#debug#ci
Базовое сканирование портов одного хоста
nmap 192.168.1.1
#nmap#network#scan
Скрытое SYN-сканирование (требует root)
nmap -sS 192.168.1.1
#nmap#network#syn
Сканировать все 65535 портов
nmap -p- 192.168.1.1
#nmap#network#ports
Определить сервисы и их версии на открытых портах
nmap -sV 192.168.1.1
#nmap#network#version
Определить операционную систему (требует root)
nmap -O 192.168.1.1
#nmap#network#os
Включает определение ОС, версий, скрипты и traceroute
nmap -A 192.168.1.1
#nmap#network#aggressive
Сканировать все хосты в /24 подсети
nmap 192.168.1.0/24
#nmap#network#subnet
Обнаружить живые хосты без сканирования портов
nmap -sn 192.168.1.0/24
#nmap#network#ping
Сканировать только указанные порты
nmap -p 22,80,443,8080 192.168.1.1
#nmap#network#ports
Сканировать порты в заданном диапазоне
nmap -p 1-1024 192.168.1.1
#nmap#network#ports
Сканировать UDP-порты (медленнее, требует root)
nmap -sU 192.168.1.1
#nmap#network#udp
Запустить дефолтные NSE-скрипты против цели
nmap -sC 192.168.1.1
#nmap#network#scripts#nse
Запустить именованный скрипт Nmap Scripting Engine
nmap --script http-title 192.168.1.1
#nmap#network#scripts#nse
Сохранить результаты сканирования в XML
nmap -oX scan.xml 192.168.1.1
#nmap#network#output
Сканировать только 100 наиболее распространённых портов
nmap -F 192.168.1.1
#nmap#network#fast
Запустить netcat-листенер на порту 4444
nc -lvp 4444
#netcat#nc#network#listen
Открыть TCP-соединение с хостом на порту 80
nc 192.168.1.1 80
#netcat#nc#network#connect
Сканировать порты 20-80 на хосте (режим zero I/O)
nc -zv 192.168.1.1 20-80
#netcat#nc#network#scan
Отправить файл удалённому листенеру
nc -lvp 4444 < file.tar.gz
#netcat#nc#transfer#file
Принять файл от netcat-отправителя
nc 192.168.1.1 4444 > file.tar.gz
#netcat#nc#transfer#file
Подключиться по UDP вместо TCP
nc -u 192.168.1.1 5005
#netcat#nc#network#udp
Отправить сырой HTTP GET-запрос через netcat
echo -e "GET / HTTP/1.0 " | nc example.com 80
#netcat#nc#http#debug
Ожидать входящее обратное shell-соединение
nc -lvp 4444
#netcat#nc#shell#debug
Подключиться к порту и прочитать баннер сервиса
nc -v 192.168.1.1 22
#netcat#nc#network#banner
Установить таймаут подключения 3 секунды
nc -w 3 192.168.1.1 80
#netcat#nc#network#timeout
Записать данные о производительности с графом вызовов
perf record -g ./my_app
#perf#profiling#cpu#linux
Интерактивный просмотр записанных данных perf
perf report
#perf#profiling#report
Показать все поддерживаемые события perf на системе
perf list
#perf#profiling#events
Показать аппаратные счётчики для команды
perf stat ls -la
#perf#profiling#stat
Записывать только события cache-miss
perf record -e cache-misses ./my_app
#perf#profiling#cache
Показать использование CPU по функциям в реальном времени
perf top
#perf#profiling#top#live
Показать аннотированный ассемблер для самых горячих функций
perf annotate
#perf#profiling#annotate
Собрать данные для генерации flamegraph
perf record -F 99 -ag -- sleep 30 && perf script > out.perf
#perf#profiling#flamegraph
Подсчитать конкретные системные вызовы
perf stat -e syscalls:sys_enter_read ./my_app
#perf#profiling#syscalls
Профилировать уже запущенный процесс 5 секунд
perf record -p 1234 sleep 5
#perf#profiling#attach#pid
Запустить сервис Grafana через systemd
systemctl start grafana-server
#grafana#monitoring#service
Проверить, запущен ли сервис Grafana
systemctl status grafana-server
#grafana#monitoring#status
Сбросить пароль администратора через Grafana CLI
grafana-cli admin reset-admin-password newpassword
#grafana#admin#cli
Показать все доступные плагины из маркетплейса Grafana
grafana-cli plugins list-remote
#grafana#plugins#cli
Установить плагин Grafana по имени
grafana-cli plugins install grafana-piechart-panel
#grafana#plugins#install
Экспортировать JSON дашборда через HTTP API Grafana
curl -s http://admin:admin@localhost:3000/api/dashboards/uid/MY_UID | jq .dashboard
#grafana#api#dashboard#export
Импортировать JSON дашборда через HTTP API Grafana
curl -X POST -H "Content-Type: application/json" -d @dashboard.json http://admin:admin@localhost:3000/api/dashboards/import
#grafana#api#dashboard#import
Показать все настроенные источники данных
curl -s http://admin:admin@localhost:3000/api/datasources | jq .[].name
#grafana#api#datasource
Добавить новый источник данных через API Grafana
curl -X POST -H "Content-Type: application/json" -d @ds.json http://admin:admin@localhost:3000/api/datasources
#grafana#api#datasource#create
Grafana автоматически загружает дашборды из директории провизионирования при запуске
# Place YAML in /etc/grafana/provisioning/dashboards/
#grafana#provisioning#dashboards
Установить Istio с демо-профилем конфигурации
istioctl install --set profile=demo -y
#istio#service-mesh#install
Включить автоматический инжект сайдкара Envoy для неймспейса
kubectl label namespace default istio-injection=enabled
#istio#service-mesh#sidecar
Получить статус синхронизации всех Envoy-прокси в меше
istioctl proxy-status
#istio#service-mesh#proxy
Анализировать конфигурацию Istio на потенциальные проблемы
istioctl analyze
#istio#service-mesh#analyze#debug
Показать полную конфигурацию Envoy-прокси для деплоя
istioctl proxy-config all deploy/myapp
#istio#service-mesh#envoy#debug
Применить VirtualService для определения правил маршрутизации
kubectl apply -f virtualservice.yaml
#istio#service-mesh#virtualservice#routing
Применить DestinationRule для балансировки нагрузки и circuit breaker
kubectl apply -f destinationrule.yaml
#istio#service-mesh#destinationrule
Включить строгий 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#service-mesh#mtls#security
Вручную инжектировать сайдкар Istio в манифест деплоя
istioctl kube-inject -f deployment.yaml | kubectl apply -f -
#istio#service-mesh#sidecar#inject
Открыть дашборд Kiali для сервисного меша в браузере
istioctl dashboard kiali
#istio#service-mesh#kiali#dashboard
Открыть дашборд Jaeger для распределённой трассировки
istioctl dashboard jaeger
#istio#service-mesh#jaeger#tracing
Просмотреть логи доступа Envoy из контейнера сайдкара
kubectl logs -l app=myapp -c istio-proxy | head -50
#istio#service-mesh#logs#envoy
Добавить искусственную задержку для тестирования отказоустойчивости
# In VirtualService spec.http[].fault.delay
#istio#service-mesh#fault-injection#testing
Зеркалировать трафик на теневой сервис для тестирования
# In VirtualService spec.http[].mirror
#istio#service-mesh#mirroring#canary
Полностью удалить Istio из кластера
istioctl uninstall --purge -y
#istio#service-mesh#uninstall
Установить cert-manager с CRD в отдельном неймспейсе
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
#cert-manager#tls#k8s#helm
Убедиться, что все компоненты cert-manager запущены
kubectl get pods -n cert-manager
#cert-manager#tls#k8s#debug
Показать все ресурсы Certificate во всех неймспейсах
kubectl get certificates -A
#cert-manager#tls#k8s
Показать статус и события ресурса Certificate
kubectl describe certificate my-cert -n default
#cert-manager#tls#k8s#debug
Показать все объекты CertificateRequest
kubectl get certificaterequests -A
#cert-manager#tls#k8s
Применить манифест ClusterIssuer для Let's Encrypt ACME
kubectl apply -f clusterissuer-letsencrypt.yaml
#cert-manager#tls#letsencrypt#acme
Показать все ClusterIssuer и их статус готовности
kubectl get clusterissuers
#cert-manager#tls#issuer
Принудительно обновить сертификат через cert-manager
kubectl annotate certificate my-cert cert-manager.io/issueTime="$(date -u +%Y-%m-%dT%H:%M:%SZ)" --overwrite
#cert-manager#tls#renew
Стримить логи основного контроллера cert-manager
kubectl logs -n cert-manager deploy/cert-manager -f
#cert-manager#tls#logs#debug
Проверить готовность API cert-manager через cmctl
cmctl check api
#cert-manager#tls#cmctl#cli
Установить Crossplane в отдельном неймспейсе
helm install crossplane crossplane-stable/crossplane --namespace crossplane-system --create-namespace
#crossplane#k8s#helm#infrastructure
Показать все установленные провайдеры Crossplane
kubectl get providers
#crossplane#k8s#providers
Применить манифест Provider Crossplane для AWS
kubectl apply -f provider-aws.yaml
#crossplane#k8s#aws#providers
Показать все управляемые ресурсы Crossplane всех типов
kubectl get managed
#crossplane#k8s#managed
Показать все экземпляры составных ресурсов Crossplane
kubectl get composite
#crossplane#k8s#composite#xr
Показать статус и условия управляемого ресурса
kubectl describe rdsinstance my-db
#crossplane#k8s#managed#debug
Список XRD crossplane
Показать все CompositeResourceDefinitions (XRD)
kubectl get compositeresourcedefinitions
#crossplane#k8s#xrd
Показать все Crossplane Compositions
kubectl get compositions
#crossplane#k8s#composition
Показать готовность провайдера и установленные пакеты
kubectl describe provider provider-aws
#crossplane#k8s#providers#debug
Трассировать составной ресурс и все его дочерние ресурсы
crossplane beta trace xr my-xr
#crossplane#k8s#trace#debug
Скачать и установить Linkerd CLI
curl --proto =https --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
#linkerd#service-mesh#install
Проверить, что кластер соответствует требованиям перед установкой Linkerd
linkerd check --pre
#linkerd#service-mesh#check
Установить CRD Linkerd в кластер
linkerd install --crds | kubectl apply -f -
#linkerd#service-mesh#crds#install
Установить компоненты control plane Linkerd
linkerd install | kubectl apply -f -
#linkerd#service-mesh#install
Проверить, что установка Linkerd работает корректно
linkerd check
#linkerd#service-mesh#check
Инжектировать прокси-сайдкар Linkerd в существующий деплой
kubectl get deploy my-app -o yaml | linkerd inject - | kubectl apply -f -
#linkerd#service-mesh#inject#sidecar
Показать метрики golden-сигналов для всех деплоев в реальном времени
linkerd viz stat deploy
#linkerd#service-mesh#stats#monitoring
Показать top-подобный вид живых запросов к деплою
linkerd viz top deploy/my-app
#linkerd#service-mesh#top#requests
Открыть веб-дашборд Linkerd в браузере
linkerd viz dashboard
#linkerd#service-mesh#dashboard
Смотреть живой поток HTTP запросов/ответов для деплоя
linkerd viz tap deploy/my-app
#linkerd#service-mesh#tap#debug
Включить Hubble observability с веб-интерфейсом
cilium hubble enable --ui
#cilium#cni#hubble#ui
Стримить живые сетевые потоки через Hubble
hubble observe --follow
#cilium#cni#hubble#flows
Запустить полный набор тестов связности в кластере
cilium connectivity test
#cilium#cni#connectivity#test
Показать все Cilium endpoint-ы и их статус
cilium endpoint list
#cilium#cni#endpoints
Показывать сброшенные пакеты в реальном времени
cilium monitor --type drop
#cilium#cni#monitor#drop
Показать BGP-пиры, управляемые Cilium BGP control plane
cilium bgp peers
#cilium#cni#bgp#networking
Сканировать текущую директорию на уязвимости
trivy fs .
#trivy#security#scan#filesystem
Сканировать весь кластер Kubernetes на уязвимости и мисконфигурации
trivy k8s --report summary cluster
#trivy#security#k8s#scan
Вывести результаты сканирования в SARIF для CI/IDE
trivy image --format sarif --output results.sarif myimage:tag
#trivy#security#sarif#ci
Сканировать IaC-конфиги на мисконфигурации
trivy config .
#trivy#security#iac#config
Показывать только HIGH и CRITICAL уязвимости
trivy image --severity HIGH,CRITICAL myimage:tag
#trivy#security#severity#filter
Пропустить уязвимости, для которых нет исправления
trivy image --ignore-unfixed myimage:tag
#trivy#security#ignore#filter
Сканировать файл Software Bill of Materials на уязвимости
trivy sbom ./sbom.json
#trivy#security#sbom#scan
Фильтровать деплои по label selector в k9s
: deploy / app=myapp
#k9s#k8s#filter#labels
Нажать l на поде для стриминга логов
l (on selected pod)
#k9s#k8s#logs#pods
Нажать s на поде чтобы открыть shell-сессию
s (on selected pod)
#k9s#k8s#exec#pods
Удалить выбранный ресурс Kubernetes
ctrl-d (on selected resource)
#k9s#k8s#delete
Показать полный вывод kubectl describe для выбранного ресурса
d (on selected resource)
#k9s#k8s#describe
Открыть YAML ресурса для редактирования в k9s
e (on selected resource)
#k9s#k8s#edit#yaml
Запустить k9s с конкретным контекстом kubeconfig
k9s --context my-cluster
#k9s#k8s#context#kubeconfig
Собрать kustomize overlay и применить к кластеру
kubectl apply -k ./overlays/prod
#kustomize#k8s#deploy
Отрендерить вывод kustomize без применения
kubectl kustomize ./overlays/prod | head -100
#kustomize#k8s#preview
Обновить тег образа в kustomization.yaml
kustomize edit set image myapp=myapp:v1.2.3
#kustomize#k8s#image#deploy
Добавить генератор ConfigMap в kustomization.yaml
kustomize edit add configmap my-config --from-literal=key=value
#kustomize#k8s#configmap
Быстро показать все виды ресурсов в kustomize-сборке
kustomize build ./overlays/prod | grep "^kind:"
#kustomize#k8s#resources
Использовать patchesStrategicMerge для частичного переопределения базовых ресурсов
# Add patchesStrategicMerge in kustomization.yaml
#kustomize#k8s#patch#strategic-merge
Проверить, что поды APISIX запущены в Kubernetes
kubectl get pods -n ingress-apisix
#apisix#api-gateway#k8s
Показать все настроенные маршруты APISIX
curl http://apisix-admin:9180/apisix/admin/routes -H "X-API-KEY: $ADMIN_KEY"
#apisix#api-gateway#admin#api
Создать простой маршрут с 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#api-gateway#route#create
Добавить плагин ограничения скорости на существующий маршрут
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"}}}'
#apisix#api-gateway#plugin#rate-limit
Показать все настроенные upstream-ы APISIX
curl http://apisix-admin:9180/apisix/admin/upstreams -H "X-API-KEY: $ADMIN_KEY"
#apisix#api-gateway#upstream
Создать 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"}}}'
#apisix#api-gateway#consumer#auth
Включить JWT-аутентификацию на маршруте через конфигурацию плагина
# Add jwt-auth to plugins in route or consumer config
#apisix#api-gateway#jwt#auth
Показать все доступные плагины APISIX
curl http://apisix-admin:9180/apisix/admin/plugins/list -H "X-API-KEY: $ADMIN_KEY"
#apisix#api-gateway#plugins
Горячая перезагрузка конфигурации APISIX без даунтайма
apisix reload
#apisix#api-gateway#reload#config
Показать использование inode на файловых системах (важно при многих мелких файлах)
df -i
#linux#filesystem#inode#df
Найти файлы больше 100МБ на всей файловой системе
find / -type f -size +100M 2>/dev/null | sort
#linux#filesystem#find#disk
Подсчитать открытые файловые дескрипторы для запущенного процесса
cat /proc/$(pgrep myapp)/fd | wc -l
#linux#process#fd#proc
Показать текущий режим SELinux
getenforce
#linux#security#selinux
Показать все расположения системных и пользовательских cron-задач
ls /etc/cron.* /var/spool/cron/crontabs/
#linux#cron#scheduling
Показать все переменные окружения в алфавитном порядке
printenv | sort
#linux#env#shell
Показывать расширённую статистику дискового I/O каждую секунду
iostat -xz 1
#linux#disk#io#iostat
Показать иерархию процессов с PID
pstree -p
#linux#process#pstree
Увеличить максимальный backlog для сокетов
sysctl -w net.core.somaxconn=65535
#linux#network#sysctl#tcp#tuning
Показать архитектуру CPU и количество ядер
lscpu
#linux#cpu#hardware#lscpu
Интерактивно изменить порядок, squash или отредактировать последние 5 коммитов
git rebase -i HEAD~5
#git#rebase#history
Применить конкретный коммит из другой ветки
git cherry-pick abc1234
#git#cherry-pick#commits
Сохранить рабочие изменения с описательным сообщением stash
git stash push -m "WIP: feature X"
#git#stash#workflow
Показать все сохранённые наборы изменений
git stash list
#git#stash#list
Применить конкретный stash без его удаления
git stash apply stash@{2}
#git#stash#apply
Начать бинарный поиск коммита, введшего баг
git bisect start && git bisect bad && git bisect good v1.0
#git#bisect#debug#history
Показать полную историю изменений файла включая переименования
git log --follow -p -- path/to/file.py
#git#log#history#diff
Откатить HEAD на один коммит, сохранив стейдженные изменения
git reset --soft HEAD~1
#git#reset#undo
Удалить неотслеживаемые файлы и директории из рабочего дерева
git clean -fd
#git#clean#working-tree
Показать локальные ветки, уже смёрженные в main
git branch --merged main
#git#branch#merged#cleanup
Перейти к типу ресурса: нажать ':' и ввести имя ресурса
:pod # or :svc :deployment :helmreleases :kustomizations
#k9s
Фильтровать ресурсы по паттерну имени (нажать '/')
/pattern # Press '/' then type filter string, Esc to clear
#k9s
Описать выбранный ресурс (аналог kubectl describe)
d # Press 'd' on selected resource to view describe output
#k9s
Просмотр логов пода (нажать 'l' на поде, '0' — все контейнеры)
l # Press 'l' on a pod; '0' for all containers, 'w' to wrap
#k9s
Открыть шелл в контейнере пода (нажать 's' на поде)
s # Press 's' on a pod to open a shell (uses first container)
#k9s
Удалить выбранный ресурс (Ctrl+D, подтвердить Enter)
ctrl-d # Press Ctrl+D on selected resource, confirm with Enter
#k9s
Создать конфиг провижининга дашбордов Grafana (перезапустить после)
cat > /etc/grafana/provisioning/dashboards/default.yaml <<EOF apiVersion: 1 providers: - name: default type: file folder: '' options: path: /var/lib/grafana/dashboards EOF
#grafana#provisioning#dashboards
Роутинг 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
#istio#service-mesh#virtualservice#routing
Определить сабсеты и 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#service-mesh#destinationrule
Добавить задержку 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#service-mesh#fault-injection#testing
Зеркалировать 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
#istio#service-mesh#mirroring#canary
Создать 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
#cert-manager#tls#letsencrypt#acme
Установить 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
#crossplane#k8s#aws#providers
Создать 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
#kustomize#k8s#patch#strategic-merge
Добавить плагин 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"}}}'
#apisix#api-gateway#jwt#auth
Только err/crit/alert/emerg за текущую загрузку; -p принимает и диапазон (например -p warning..err)
journalctl -p err -b --no-pager
#journalctl#debug#troubleshooting
Доверенная выборка по индексированному полю, в отличие от -u, который подмешивает coredump и шум PAM
journalctl _SYSTEMD_UNIT=sshd.service --since today
#journalctl#systemd#troubleshooting
Одиночный + это логическое OR между группами условий; совпадения одного поля внутри группы тоже по OR
journalctl _PID=1 + _COMM=sshd -o short-iso
#journalctl#debug#troubleshooting
PCRE2-поиск по MESSAGE; сузьте шум через -p err. note: это скан, не по индексу
journalctl --grep='oom|out of memory' --case-sensitive=false -b
#journalctl#debug#troubleshooting
Показывает все поля журнала включая курсор записи; -o json-pretty для машинного разбора
journalctl -u <name> -o verbose -n 1
#journalctl#debug#observability
Индекс прошлых загрузок, затем -b -1 читает предыдущую. note: нужно постоянное хранилище
journalctl --list-boots && journalctl -b -1 -p warning
#journalctl#kernel#troubleshooting
Как dmesg, но с реальным временем и фильтром по загрузке; -k это _TRANSPORT=kernel
journalctl -k -b -o short-precise --grep='segfault|I/O error'
#journalctl#kernel#disk
Показать занятый объём, затем урезать до 500M и удалить записи старше 2 дней
journalctl --disk-usage; journalctl --vacuum-size=500M --vacuum-time=2d
#journalctl#disk#performance
Слежение по SYSLOG_IDENTIFIER (не по юниту); -t повторяется, --no-hostname убирает лишнее
journalctl -t kernel -t sudo -f --no-hostname
#journalctl#monitoring#observability
Урезать JSON до нужных полей и вывести табуляцией; __REALTIME_TIMESTAMP в микросекундах
journalctl -u <name> --output=json --output-fields=__REALTIME_TIMESTAMP,MESSAGE,_PID | jq -r '[.__REALTIME_TIMESTAMP,._PID,.MESSAGE]|@tsv'
#journalctl#observability#debug
Чтение журналов из другого корня (rescue/форензика) без копирования файлов
journalctl -D /mnt/crashed/var/log/journal -b -1 -p err
#journalctl#troubleshooting#disk
Если /var/log/journal нет, логи в памяти и теряются при перезагрузке. fix: mkdir + systemd-tmpfiles
journalctl --header | grep -iE 'file|state'; ls -d /var/log/journal 2>/dev/null || echo volatile
#journalctl#disk#troubleshooting
Показывает последовательную цепочку зависимостей, реально задерживающую загрузку; честнее, чем blame
systemd-analyze critical-chain <unit>
#systemd#performance#troubleshooting
Генерирует полную параллельную диаграмму загрузки в SVG, чтобы визуально найти последовательные задержки
systemd-analyze plot > boot.svg
#systemd#performance#observability
Правка юнита через drop-in без изменения файла поставщика; --full форкает весь юнит целиком
systemctl edit <unit> # writes /etc/systemd/system/<unit>.d/override.conf
#systemd#gitops#troubleshooting
Перечитывает файлы юнитов после правки; учтите: обязателен после ручных изменений, иначе systemctl предупредит об устаревшем конфиге
systemctl daemon-reload
#systemd#troubleshooting
mask связывает юнит с /dev/null, чтобы он не запускался даже как зависимость; жёстче, чем disable
systemctl mask <unit> && systemctl unmask <unit>
#systemd#security#troubleshooting
Обход полного дерева Wants/Requires для отладки тянущихся зависимостей; --reverse покажет, кому нужен юнит
systemctl list-dependencies <unit> --all
#systemd#debug#troubleshooting
Читает живые метрики cgroup прямо из systemd без ps; MemoryCurrent — учтённый RSS процесса
systemctl show -p MainPID,MemoryCurrent,TasksCurrent <unit>
#systemd#monitoring#performance
Сбрасывает счётчики сбоев, чтобы юниты перезапустились после StartLimitBurst, затем показывает оставшиеся failed
systemctl reset-failed && systemctl list-units --state=failed
#systemd#troubleshooting#debug
Создаёт одноразовую пару таймер+сервис без написания файлов юнитов; удобно для разовых задач по расписанию
systemd-run --on-calendar='*-*-* 03:00:00' --unit=backup /usr/local/bin/backup.sh
#systemd#ci#troubleshooting
Применяет лимиты cgroup на лету без перезапуска; --runtime делает их временными (исчезают после перезагрузки)
systemctl set-property --runtime <unit> MemoryMax=512M CPUQuota=50%
#systemd#performance#troubleshooting
Показывает выполняющиеся задачи start/stop для диагностики зависшей загрузки или застрявшего юнита
systemctl list-jobs
#systemd#debug#troubleshooting
Текущее потребление памяти против жёсткого лимита сервиса; current около max — скорый OOM
cat /sys/fs/cgroup/system.slice/<name>.service/memory.current /sys/fs/cgroup/system.slice/<name>.service/memory.max
#cgroups#memory#performance#troubleshooting
PSI: время простоя задач из-за реклейма памяти; рост avg10 — троттлинг до OOM
cat /sys/fs/cgroup/system.slice/<name>.service/memory.pressure
#cgroups#memory#performance#observability
Сколько раз и на сколько мкс cgroup троттлился по квоте cpu.max
grep -E 'nr_throttled|throttled_usec' /sys/fs/cgroup/system.slice/<name>.service/cpu.stat
#cgroups#cpu#performance#troubleshooting
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
#cgroups#cpu#performance
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
#cgroups#disk#performance#observability
Все PID в слайсе сервиса; сверка с деревом из systemctl status
cat /sys/fs/cgroup/system.slice/<name>.service/cgroup.procs; systemctl status <name>.service | grep CGroup
#cgroups#systemd#troubleshooting#debug
cgls --all показывает и пустые cgroup; cgtop ранжирует слайсы по CPU/памяти/io
systemd-cgls --all --no-pager; systemd-cgtop -d 2 --depth=3
#cgroups#systemd#monitoring#performance
Разовый лимит через 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>
#cgroups#memory#systemd
Все пространства имён PID; сравнение inode-ссылок ns доказывает общий namespace
lsns -p <pid>; readlink /proc/<pid>/ns/net /proc/1/ns/net # equal inode = same netns
#namespaces#debug#troubleshooting#network
Снифаем трафик контейнера хостовым tcpdump через его netns; в образе ничего не нужно
PID=$(docker inspect -f '{{.State.Pid}}' <name>); nsenter -t $PID -n tcpdump -ni any -c 50
#namespaces#network#debug#troubleshooting
Входим в net+mount+pid ns свежего процесса и смотрим его реальные слушающие сокеты
nsenter -t $(pgrep -n <proc>) -n -m -p ss -tlnp
#namespaces#network#debug#troubleshooting
Запуск 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
#namespaces#network#security#kernel
Назначить вторичный IP с префиксом на лету; примечание: не сохраняется после перезагрузки
ip addr add 10.0.0.5/24 dev <name> && ip addr show dev <name>
#iproute2#network#troubleshooting
Установить jumbo MTU и поднять линк; примечание: MTU должен совпадать на всём пути
ip link set dev <name> mtu 9000 && ip link set dev <name> up
#iproute2#network#performance
Машиночитаемый дамп интерфейсов; вывести поднятые линки и их локальные IP
ip -j a | jq -r '.[] | select(.operstate=="UP") | .ifname + " " + (.addr_info[]?.local // "-")'
#iproute2#observability#network
Показать точный маршрут, src-адрес и интерфейс, выбранные ядром для назначения
ip route get <ip>
#iproute2#network#troubleshooting#debug
Маршрутизация по адресу источника через отдельную таблицу; проверка ip rule show
ip rule add from <ip> table 100 && ip route add default via 192.168.1.1 dev <name> table 100
#iproute2#network#security#troubleshooting
Создать изолированный сетевой namespace и выполнить команды внутри него
ip netns add test && ip netns exec test ip -br a
#iproute2#network#k8s#debug
Эмулировать WAN-задержку и потери пакетов для тестов; снять через tc qdisc del
tc qdisc add dev <name> root netem delay 100ms loss 1% && tc -s qdisc show dev <name>
#iproute2#network#performance#troubleshooting
Удалить корневой qdisc, чтобы вернуть обычный трафик после тестов netem
tc qdisc del dev <name> root
#iproute2#network#performance
Поток изменений маршрутов/линков/адресов/соседей в реальном времени; для отладки флаппинга
ip monitor all
#iproute2#monitoring#network#debug
Просмотр L2-таблицы пересылки (MAC->порт) и состояний портов моста
bridge fdb show br <name>; bridge link show
#iproute2#network#troubleshooting#k8s
Показать rtt/cwnd/retrans по сокету на 443; найти медленных/лоссовых пиров
ss -tip state established '( dport = :443 )'
#iproute2#ss#performance#network#debug
Принудительно закрыть подходящие сокеты (ядро>=4.9); нужен CONFIG_INET_DIAG_DESTROY
ss -K dst <ip> dport = :8080
#iproute2#ss#network#troubleshooting#security
Базовая цепочка с запретом по умолчанию; важно: сначала добавьте accept-правила, иначе заблокируете себя
nft add chain inet filter input '{ type filter hook input priority 0 ; policy drop ; }'
#nftables#security#network#firewall
Переиспользуемый именованный 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 }'
#nftables#security#network#firewall
vmap сопоставляет ключи с вердиктами за O(1); заменяет длинную цепочку правил dport ==
nft add rule inet filter input tcp dport vmap '{ 22 : accept, 80 : accept, 443 : accept, 3306 : drop }'
#nftables#network#performance#firewall
-a выводит '# handle N' для каждого правила; хендл нужен для удаления одного правила
nft -a list ruleset
#nftables#troubleshooting#network
Точечное удаление без сброса всей цепочки; хендл берётся из nft -a list ruleset
nft delete rule inet filter input handle 7
#nftables#network#troubleshooting
Встроенный counter считает пакеты и байты; сброс через nft reset counters inet filter
nft add rule inet filter input tcp dport 22 counter accept comment \"ssh\"
#nftables#monitoring#observability#network
Source-NAT исходящего трафика на IP интерфейса; требует существующей postrouting-цепочки типа nat
nft add rule ip nat postrouting oifname \"eth0\" masquerade
#nftables#network#cloud#firewall
Destination-NAT входящего трафика на бэкенд; дополните accept-правилом в forward-цепочке
nft add rule ip nat prerouting iif \"eth0\" tcp dport 443 dnat to 10.0.0.5:8443
#nftables#network#cloud#firewall
Подавляет брутфорс SSH; пакеты сверх лимита проваливаются к политике цепочки
nft add rule inet filter input tcp dport 22 ct state new limit rate 10/minute accept
#nftables#security#performance#network
Транслирует события add/delete по мере появления; удобно для отладки динамических правил
nft monitor ruleset
#nftables#debug#monitoring#troubleshooting
nft -f применяет весь файл атомарно; при ошибке откат целиком, без частичного состояния
nft list ruleset > /etc/nftables.conf && nft -f /etc/nftables.conf
#nftables#gitops#network#firewall
Переносит установленные потоки на быстрый путь; '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
#nftables#performance#network#kernel
Ловит только инициирующие SYN (без SYN-ACK) — для поиска сканов или переполнения backlog
tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
#tcpdump#network#security#troubleshooting
Показывает только пакеты открытия/закрытия соединений — для отслеживания короткоживущих сессий
tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
#tcpdump#network#debug#troubleshooting
Смотрит трафик к/от хоста, отбрасывая шум вашей собственной SSH-сессии
tcpdump -nn -i any host <ip> and not port 22
#tcpdump#network#debug
Просмотр тела пакетов в hex и ascii; -s 0 отключает обрезку по snaplen
tcpdump -nn -s 0 -X -i any port <port>
#tcpdump#debug#network#troubleshooting
Ротация по 5 файлам по 100МБ — долгий захват не переполнит диск
tcpdump -nn -i any -s 0 -C 100 -W 5 -w /tmp/cap.pcap
#tcpdump#disk#monitoring#network
Новый pcap каждый час с именем по времени — для захвата без присмотра
tcpdump -nn -i any -G 3600 -w '/tmp/cap-%Y%m%d-%H%M%S.pcap'
#tcpdump#monitoring#network#observability
Повторная фильтрация сохранённого захвата без перезапуска; BPF работает при чтении
tcpdump -nn -r /tmp/cap.pcap 'port 443 and host <ip>'
#tcpdump#debug#tls#troubleshooting
Показывает DNS-запросы с MAC-адресами (-e) для привязки запросов к клиентам в LAN
tcpdump -nn -e -i any port 53
#tcpdump#dns#network#troubleshooting
Выводит выбранные поля таблицей с заголовком; удобно подавать в awk/csv-обработку
tshark -r cap.pcap -Y http.request -T fields -e ip.src -e http.host -e http.request.uri -E header=y
#tshark#observability#debug#network
Собирает поток с индексом 0 в читаемый ascii; на серверах удобнее tshark, чем wireshark
tshark -r cap.pcap -q -z follow,tcp,ascii,0
#tshark#debug#network#troubleshooting
Ранжирует TCP-разговоры по байтам/пакетам — для поиска самых активных узлов в захвате
tshark -r cap.pcap -q -z conv,tcp
#tshark#performance#observability#network
Число ретрансмиссий в секунду — для связи потерь пакетов со всплесками задержек приложения
tshark -i any -q -z io,stat,1,'COUNT(tcp.analysis.retransmission)tcp.analysis.retransmission'
#tshark#performance#monitoring#troubleshooting
Живой top горячих функций с цепочками вызовов; dwarf разворачивает стек без frame pointer
perf top -g --call-graph dwarf
#perf#performance#debug#troubleshooting
Семплирует всю машину на 99Гц 30с, затем печатает отчёт; 99Гц уходит от синхронного алиасинга
perf record -F 99 -a -g -- sleep 30 && perf report --stdio
#perf#performance#monitoring#troubleshooting
Превращает perf.data в интерактивный flame graph SVG (инструменты FlameGraph от Brendan Gregg)
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
#perf#performance#observability#troubleshooting
Три -d дают детали L1/LLC/TLB и простоев; показывает упор в память против упора в CPU
perf stat -d -d -d -- ./app
#perf#performance#monitoring#troubleshooting
Записывает переключения контекста и показывает задержку пробуждения по задачам; ловит голодание в runqueue
perf sched record -- sleep 10 && perf sched latency --sort max
#perf#performance#kernel#troubleshooting
strace-подобная трассировка syscall со сводкой -s; меньше накладных, без остановки через ptrace
perf trace -s -p <pid>
#perf#debug#performance#troubleshooting
Добавляет kprobe с аргументом и записывает его; смотрит внутренности ядра без пересборки
perf probe --add 'tcp_sendmsg size' && perf record -e probe:tcp_sendmsg -a -- sleep 5
#perf#kernel#debug#observability
Сводит число и время syscall по форкам, сортируя по времени; находит дорогой вызов
strace -c -f -S time -p <pid>
#strace#performance#debug#troubleshooting
Показывает пути/сокеты за fd плюс длительность и метки времени для файловых операций
strace -yy -T -tt -e trace=%file -p <pid>
#strace#debug#disk#troubleshooting
Печатает стек на каждый openat, чтобы найти кто открывает файл; нужны debug-символы
strace -k -e trace=openat -f -p <pid>
#strace#debug#troubleshooting#disk
Заставляет 3-й openat падать с ENOENT для проверки обработки ошибок; chaos-тест без кода
strace -f -e inject=openat:error=ENOENT:when=3 -p <pid>
#strace#debug#troubleshooting#ci
Показывает только сигналы (SIGTERM/SIGCHLD), пропуская syscall; отлаживает загадочные kill. прим.: ltrace для вызовов библиотек
strace -f -e signal=all -e trace=none -p <pid>
#strace#debug#troubleshooting#kernel
Показывает, какой процесс занимает порт; -nP отключает резолв DNS и имён сервисов для скорости
lsof -nP -i :<port>
#lsof#network#troubleshooting#debug
Список всех TCP-листенеров с PID, без резолва имён; modern: ss -ltnp
lsof -nP -iTCP -sTCP:LISTEN
#lsof#network#monitoring#troubleshooting
Находит удалённые, но ещё открытые файлы, занимающие диск; df полон, а du нет
lsof +L1
#lsof#disk#troubleshooting#debug
Показывает процессы, мешающие umount c 'device busy'; передайте путь точки монтирования
lsof /mnt/<name>
#lsof#disk#troubleshooting#debug
Убивает процесс на порту; -t выводит чистые PID, -r не запускает kill на пустом вводе
lsof -t -i:<port> | xargs -r kill
#lsof#network#troubleshooting#debug
Показывает сокеты, которые приложение забыло закрыть; рост CLOSE_WAIT = утечка fd/соединений
lsof -nP -i -sTCP:CLOSE_WAIT
#lsof#network#performance#troubleshooting
Показывает только сокеты, общающиеся с конкретным хостом/портом, по обоим концам
lsof -nP -i @<host>:<port>
#lsof#network#monitoring#debug
Показывает только исполняемый код и библиотеки; -a объединяет фильтры по И, удобно после деплоя
lsof -p <pid> -a -d txt,mem
#lsof#debug#troubleshooting#performance
Быстрый подсчёт fd для поиска утечек против ulimit -n; быстрее: ls /proc/<pid>/fd | wc -l
lsof -nP -p <pid> | wc -l
#lsof#performance#troubleshooting#debug
Убирает заголовки и статистику; показывает только секцию ответа для скриптов и сравнений
dig +noall +answer example.com
#dig#dns#troubleshooting
Опрашивает каждый авторитативный NS напрямую; выявляет рассинхрон серийников SOA между ними
dig +nssearch example.com
#dig#dns#troubleshooting
Выгружает всю зону, если AXFR открыт; note: успех на публичном NS — это ошибка конфигурации
dig axfr @ns1.example.com example.com
#dig#dns#security
Показывает записи RRSIG; флаг AD в строке flags означает валидированный ответ
dig +dnssec +multi example.com @1.1.1.1
#dig#dns#dnssec#security
Идёт по делегированию от корня до авторитативного, скрывая мусор RRSIG/DS
dig +trace +nodnssec example.com
#dig#dns#troubleshooting
Выявляет split-horizon или различия из-за устаревшего кэша между резолверами
diff <(dig +short @1.1.1.1 example.com) <(dig +short @8.8.8.8 example.com)
#dig#dns#troubleshooting#debug
PTR для IPv6-адреса; -x сам раскрывает обратный формат по полубайтам
dig -x 2606:4700:4700::1111 +short
#dig#dns#network
Вытягивает TXT-записи SPF, DMARC и DKIM одним циклом для аудита почты
for r in example.com _dmarc.example.com sel._domainkey.example.com; do dig +short TXT $r; done
#dig#dns#security
Показывает, какие CA вправе выпускать сертификаты; без CAA выпустить может любой CA
dig +short CAA example.com
#dig#dns#tls#security
Возвращает priority/weight/port/target сервиса; используется AD, SIP, XMPP
dig +short SRV _sip._tcp.example.com
#dig#dns#network
Проверяет доступность TCP/53; +ttlunits печатает TTL как 1h/30m, а не в секундах
dig +tcp +ttlunits +noall +answer example.com @8.8.8.8
#dig#dns#network#troubleshooting
Ловит синтаксические ошибки и пропущенные записи; запускайте перед rndc reload, чтобы избежать SERVFAIL
named-checkzone example.com /etc/bind/db.example.com
#bind#dns#troubleshooting
Чистит кэш, перечитывает конфиг без рестарта, проверяет; note: reload также перечитывает зоны
rndc flush && rndc reconfig && rndc status
#bind#dns#troubleshooting
Проверяет синтаксис конфига, затем выводит текущие аренды (срок, MAC, IP, имя хоста)
dnsmasq --test && cat /var/lib/misc/dnsmasq.leases
#dnsmasq#dns#network#troubleshooting
Вывести все поля сертификата: subject, issuer, срок, расширения, SAN, key usage
openssl x509 -in cert.pem -noout -text
#openssl#tls#security#debug
Код 0, если сертификат жив дольше 24ч; удобно для мониторинга и алертов в CI
openssl x509 -in cert.pem -noout -checkend 86400 && echo OK || echo EXPIRING
#openssl#monitoring#tls#ci
Получить всю цепочку с SNI; -servername обязателен для vhost/SNI-бэкендов
openssl s_client -connect <host>:443 -servername <host> -showcerts </dev/null 2>/dev/null
#openssl#tls#network#debug
Показать только записи SAN; современные браузеры игнорируют CN, важен SAN
openssl x509 -in cert.pem -noout -ext subjectAltName
#openssl#tls#dns#security
Проверить цепочку доверия; note: в -CAfile нужны промежуточные и корневой по порядку
openssl verify -CAfile ca-chain.pem cert.pem
#openssl#tls#security#troubleshooting
Совпадение хэшей modulus доказывает соответствие ключа сертификату; пустой diff = совпало
diff <(openssl x509 -in cert.pem -noout -modulus | md5sum) <(openssl rsa -in key.pem -noout -modulus | md5sum)
#openssl#tls#security#troubleshooting
Сгенерировать ключ и 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>"
#openssl#tls#security
Самоподписанный сертификат на год одной строкой; без SAN TLS-клиенты его отвергнут
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=<host>" -addext "subjectAltName=DNS:<host>"
#openssl#tls#security
Упаковать сертификат, ключ и цепочку в .p12 для Java-keystore и импорта в Windows
openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ca-chain.pem -out bundle.p12 -name <name>
#openssl#tls#security
Проверить TLS на сервисах со STARTTLS; postgres меняйте на smtp/imap/mysql/ldap
openssl s_client -connect <host>:5432 -starttls postgres -showcerts </dev/null 2>/dev/null
#openssl#tls#network#debug
Modern: ключи Ed25519 компактны и быстры в отличие от RSA; для подписи и mTLS
openssl genpkey -algorithm ed25519 -out ed25519.pem
#openssl#security#tls
Принудить версию для проверки поддержки; -tls1_3 / -no_tls1_2 для проверки политики
openssl s_client -connect <host>:443 -tls1_2 </dev/null 2>&1 | grep -E 'Protocol|Cipher'
#openssl#tls#security#troubleshooting
Прерывать при ошибках, неопределённых переменных и сбоях в пайпах; разбивать только по переводу строки и табу
set -euo pipefail; IFS=$'\n\t'
#bash#troubleshooting#ci
Автоудаление каталога mktemp при выходе или сигнале; важно: заключайте $tmp в кавычки от пробелов
tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT INT TERM
#bash#security#troubleshooting
Подстановка процессов сравнивает два потока без временных файлов
diff <(kubectl get cm a -o yaml) <(kubectl get cm b -o yaml)
#bash#debug#k8s
mapfile -t убирает переводы строк и сохраняет пробелы в отличие от разбиения в for-цикле
mapfile -t lines < file.txt; printf '%s\n' "${lines[@]}"
#bash#troubleshooting
basename, удаление расширения и глобальная замена без вызова sed или basename
f=/var/log/app.log.gz; echo "${f##*/}" "${f%.*}" "${f//log/LOG}"
#bash#performance
Встроенное сопоставление по регексу извлекает группы; важно: не заключайте регекс справа в кавычки
[[ $s =~ ^([0-9]+)\.([0-9]+) ]] && echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
#bash#debug
Запуск N параллельных задач с NUL-разделителями, безопасно для имён с пробелами
find . -name '*.log' -print0 | xargs -0 -P"$(nproc)" -n1 gzip
#bash#performance
Проверка кода возврата каждого этапа пайпа; $? отдаёт только последнюю команду
curl -s "$url" | jq .data; echo "${PIPESTATUS[@]}"
#bash#debug#troubleshooting
POSIX-разбор опций с аргументами; -n принимает значение, -v является флагом
while getopts "n:v" o; do case $o in n) ns=$OPTARG;; v) verbose=1;; esac; done
#bash#ci
SIGTERM на 30с, затем SIGKILL через 5с; код 124 означает принудительное завершение
timeout -k 5s 30s ./long_task.sh || echo "timed out: $?"
#bash#troubleshooting
Открыть дескриптор 3 в файл, писать независимо от stdout и закрыть его
exec 3>>audit.log; echo "$(date -Is) start" >&3; exec 3>&-
#bash#observability
zsh: рекурсивный список только обычных файлов и безопасное массовое переименование через zmv
setopt extendedglob; print -l **/*(.); autoload zmv; zmv '(*).txt' '$1.bak'
#zsh#troubleshooting
Сохраняет жёсткие ссылки, ACL, xattr и сырые uid/gid при миграции; учтите: завершающий слэш важен
rsync -aHAXv --numeric-ids /src/ user@<host>:/dst/
#rsync#network#security#troubleshooting
Показывает все изменения кодами (>f, cd, *deleting) до фактического копирования файлов
rsync -ai --dry-run --delete /src/ /dst/
#rsync#debug#troubleshooting
Ограничивает полосу до 10 МБ/с, чтобы не забить канал; progress2 даёт общий прогресс и ETA
rsync -a --bwlimit=10M --info=progress2 /src/ user@<host>:/dst/
#rsync#network#performance
Бэкап в стиле Time Machine: неизменные файлы — хардлинки на prev, место занимают только дельты
rsync -a --delete --link-dest=../prev /src/ ./$(date +%F)/
#rsync#disk#performance
Возобновляет прерванную передачу и проверяет дописанную часть по контрольной сумме; безопасно лишь при неизменном источнике
rsync -a --partial --append-verify --info=progress2 big.img user@<host>:/dst/
#rsync#network#troubleshooting
Идёт через нестандартный порт SSH и пропускает пути из excludes.txt (.git, node_modules, *.tmp)
rsync -a -e "ssh -p 2222" --exclude-from=excludes.txt /src/ user@<host>:/dst/
#rsync#network#ci
Сравнивает по контрольной сумме, а не mtime+размер; delete-after удаляет лишь после успешной передачи
rsync -ac --delete-after /src/ /dst/
#rsync#troubleshooting#disk
Инкрементный бэкап по уровням: snapshot.snar хранит состояние, в архив идут только изменённые файлы
tar -czg snapshot.snar -f backup-$(date +%F).tgz /data
#tar#disk#performance
Копирует дерево без промежуточного файла, сохраняя права; для медленного канала добавьте zstd в конвейер
tar c -C /src . | ssh user@<host> 'tar x -C /dst'
#tar#network#troubleshooting
Показывает байты и ETA через pv при потоке в zstd; du -sb даёт общий размер для шкалы
tar cf - /data | pv -s $(du -sb /data | awk '{print $1}') | zstd -T0 > data.tar.zst
#tar#monitoring#performance
Уровень 19 с окном 128 МБ и всеми ядрами; отличное сжатие для логов и бэкапов
zstd -19 --long=27 -T0 huge.bin -o huge.bin.zst
#zstd#performance#disk
Обучает словарь на похожих мелких файлах, затем сжимает с ним каждый — заметный прирост сжатия
zstd --train samples/*.json -o dict.zstd && zstd -D dict.zstd file.json
#zstd#performance#disk
Просмотр заданий служебной учётки из-под root; note: -u требует root или sudo
crontab -l -u <name> 2>/dev/null || echo 'no crontab'
#cron#troubleshooting#security
Идемпотентно добавляет задание @reboot; note: при загрузке сеть не гарантирована, для зависимостей берите systemd
( crontab -l 2>/dev/null; echo '@reboot /usr/local/bin/warmup.sh' ) | crontab -
#cron#gitops
Перенаправляет stdout+stderr в journald/syslog с тегом вместо письма root
*/5 * * * * /opt/job.sh 2>&1 | /usr/bin/logger -t job
#cron#observability#monitoring
PATH в cron минимален; задайте PATH/MAILTO сверху, иначе задания тихо падают
crontab - <<'EOF' MAILTO=ops@example.com PATH=/usr/local/bin:/usr/bin:/bin 0 3 * * * backup.sh EOF
#cron#troubleshooting#secrets
Показывает, какие скрипты выполнятся, ничего не запуская; отладка cron.daily
run-parts --test /etc/cron.daily
#cron#debug#troubleshooting
modern: временный таймер OnCalendar с логами и повторами; замена строки crontab
systemd-run --on-calendar='*-*-* 03:00:00' --unit=backup /opt/backup.sh
#cron#gitops#observability
Планирует один отложенный запуск; очередь смотрят atq, отмена atrm
at now + 1 hour <<< 'systemctl restart nginx'
#cron#troubleshooting
Запускает, когда load average опустится ниже 1.5; note: нужен запущенный atd
batch <<< '/opt/heavy-reindex.sh'
#cron#performance
Создаёт фоновую сессию и подаёт команду; переживает разрыв SSH
tmux new-session -d -s work && tmux send-keys -t work 'tail -f /var/log/app.log' Enter
#tmux#troubleshooting#monitoring
Сохраняет последние 3000 строк панели в файл для разбора без подключения
tmux capture-pane -p -S -3000 -t work > /tmp/pane.log
#tmux#debug#observability
Запуск отсоединённой именованной сессии с логом; вернуться через screen -r deploy
screen -L -Logfile /tmp/job.log -dmS deploy bash -c './deploy.sh'
#screen#troubleshooting#observability
Тест 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
#fio#disk#performance#troubleshooting
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
#fio#disk#performance#troubleshooting
Пропускная способность последовательной записи (МБ/с) крупными блоками 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
#fio#disk#performance
Чистая задержка на операцию при 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
#fio#disk#performance#troubleshooting
Реалистичная смешанная нагрузка 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
#fio#disk#performance
Запуск короткого SMART-самотеста и чтение его лога; неразрушающий фоновый тест
smartctl -t short /dev/sda && sleep 120 && smartctl -l selftest /dev/sda
#smartctl#disk#monitoring#troubleshooting
Сводит сырые значения атрибутов SMART; следите за Reallocated_Sector_Ct и Pending
smartctl -A /dev/sda | awk '$1~/^[0-9]+$/{printf "%-3s %-24s raw=%s\n",$1,$2,$10}'
#smartctl#disk#monitoring#troubleshooting
Полный дамп -x: здоровье, атрибуты, лог ошибок, история температур; -d auto определяет RAID/USB
smartctl -x -d auto /dev/sda | less
#smartctl#disk#troubleshooting#monitoring
Ключевые поля износа/здоровья NVMe; percentage_used>100 означает превышение ресурса по спецификации
nvme smart-log /dev/nvme0 | grep -E 'percentage_used|media_errors|critical_warning|temperature'
#nvme#disk#monitoring#troubleshooting
Выявляет ненулевые ошибки контроллера NVMe; дополняется id-ctrl для модели/прошивки
nvme error-log /dev/nvme0 | grep -A1 'error_count' | grep -v 'error_count.*: 0'
#nvme#disk#troubleshooting#debug
Скорость надёжной записи в худшем случае (без кэша, sync на каждый блок); примечание: это не тест IOPS
dd if=/dev/zero of=/data/ddtest bs=1M count=1024 oflag=direct,dsync status=progress; rm /data/ddtest
#dd#disk#performance#troubleshooting
Поблочное клонирование диска; conv=noerror,sync продолжает копирование через сбойные сектора нулями
dd if=/dev/sda of=/dev/sdb bs=64M conv=noerror,sync status=progress
#dd#disk#troubleshooting#performance
Получить сырые метрики Prometheus с apiserver без стека мониторинга
kubectl get --raw /metrics | grep apiserver_request_total
#kubectl#metrics#observability#performance
Проверить доступность etcd через эндпоинт здоровья apiserver
kubectl get --raw '/healthz/etcd?verbose'
#kubectl#etcd#troubleshooting#k8s
Сырое потребление нод из metrics API в обход форматирования kubectl top
kubectl get --raw '/apis/metrics.k8s.io/v1beta1/nodes' | jq '.items[] | {name:.metadata.name, cpu:.usage.cpu, mem:.usage.memory}'
#kubectl#metrics#monitoring#performance
Клонировать под с отладочным контейнером в общем PID-namespace; оригинал не трогается
kubectl debug <pod> -n <ns> --copy-to=<pod>-dbg --share-processes --image=nicolaka/netshoot -- sleep infinity
#kubectl#debug#troubleshooting#k8s
Вывести полное дерево вложенных полей спецификации ресурса; удобно искать допустимые поля
kubectl explain deploy.spec --recursive | less
#kubectl#k8s#troubleshooting
Накопить несколько правок без отдельных раскаток, затем применить всё разом
kubectl rollout pause deploy/<name> -n <ns>; kubectl rollout resume deploy/<name> -n <ns>
#kubectl#gitops#k8s
Показать аннотацию last-applied-configuration; сравнить намерение с реальным состоянием
kubectl apply view-last-applied deploy/<name> -n <ns> -o yaml
#kubectl#gitops#troubleshooting
Предупреждения по всему кластеру, новые в конце; быстрая сортировка проблемных нагрузок
kubectl get events -A --field-selector type=Warning --sort-by=.lastTimestamp
#kubectl#troubleshooting#monitoring#debug
Список подов в фазе Failed по всем неймспейсам для очистки или разбора
kubectl get pods -A --field-selector status.phase=Failed
#kubectl#troubleshooting#debug#k8s
Блокировать CI до появления внешнего IP у Service; работает по любому полю jsonpath
kubectl wait --for=jsonpath='{.status.loadBalancer.ingress[0].ip}' svc/<name> -n <ns> --timeout=120s
#kubectl#ci#gitops#k8s
Проверить RBAC от чужого имени без его kubeconfig; нужен verb impersonate
kubectl auth can-i list secrets -n <ns> --as=<name> --as-group=system:serviceaccounts
#kubectl#security#troubleshooting#k8s
Вывести наиболее перезапускаемые поды, чтобы быстро поймать 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
#kubectl#troubleshooting#debug#monitoring
Показать зарезервированный оверхед по нодам; разница = резервы 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}'
#kubectl#performance#monitoring#k8s
Собрать 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>"}}}]'
#kubectl#secrets#gitops#k8s
Рендерит только один манифест для проверки вывода; примечание: путь указывается от корня чарта
helm template <name> ./chart --show-only templates/deployment.yaml
#helm#debug#k8s#troubleshooting
Рендер с фиксированными версиями kube/API для офлайн-проверки возможностей CRD; включает CRD
helm template <name> ./chart --kube-version 1.29 --api-versions policy/v1 --include-crds
#helm#k8s#ci#troubleshooting
примечание: --reuse-values тихо сохраняет устаревшие переопределения; --reset-values форсирует чистый мердж
helm upgrade --install <name> ./chart --reset-values -f values.yaml
#helm#troubleshooting#gitops#k8s
Выгружает отрендеренные pre/post-хуки для отладки порядка падающих job-ов
helm get hooks <rel> -n <ns>
#helm#debug#k8s#troubleshooting
Предпросмотр целевой ревизии отката перед фактическим применением
helm history <rel> -n <ns> && helm rollback <rel> <rev> --dry-run -n <ns>
#helm#troubleshooting#k8s#gitops
update обновляет Chart.lock из репозиториев; build тянет сабчарты по существующему lock
helm dependency update ./chart && helm dependency build ./chart
#helm#ci#k8s
Блокирует до готовности подов И завершения hook-Job-ов; исключает гонку с миграциями
helm upgrade --install <name> ./chart --wait --wait-for-jobs --timeout 10m -n <ns>
#helm#ci#k8s#gitops
Извлекает машиночитаемое состояние деплоя для скриптов и gate-проверок
helm status <rel> -n <ns> -o json | jq '.info.status, .info.last_deployed'
#helm#observability#ci#k8s
Патчит отрендеренные манифесты через kustomize без форка upstream-чарта
helm upgrade --install <name> ./chart --post-renderer ./kustomize-hook.sh -n <ns>
#helm#gitops#k8s
Сохраняет OCI-чарт локально для инспекции или установки в air-gapped среде
helm pull oci://<host>/charts/<name> --version 1.2.3 --untar --untardir ./charts
#helm#security#ci#k8s
apply сначала делает diff и синхронизирует только изменённые релизы; идемпотентный gitops-цикл
helmfile -e prod diff && helmfile -e prod apply
#helmfile#gitops#k8s#ci
Синхронизирует один помеченный релиз из большого helmfile; modern: -l app=web,tier=fe
helmfile -e prod -l name=<name> apply
#helmfile#gitops#k8s#ci
Рендерит блок helmCharts: в манифесты; примечание: helm должен быть в PATH
kustomize build --enable-helm ./overlay
#kustomize#gitops#k8s
Подмешивает переиспользуемые патчи/ресурсы через components: (Kustomize v4+)
cat <<'EOF' >> kustomization.yaml components: - ../../components/monitoring EOF
#kustomize#gitops#k8s
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#gitops#k8s
Патч JSON6902 применяется ко всем подходящим целям без отдельного файла
cat <<'EOF' >> kustomization.yaml patches: - target: {kind: Deployment, labelSelector: app=api} patch: |- - op: replace path: /spec/replicas value: 3 EOF
#kustomize#gitops#k8s
Фиксация по неизменяемому digest; newName+digest также задаётся в блоке images:
kustomize edit set image app=registry.example.com/app@sha256:<id>
#kustomize#gitops#security#k8s
примечание: disableNameSuffixHash даёт стабильное имя, но ломает рестарт при смене
cat <<'EOF' >> kustomization.yaml secretGenerator: - name: db-creds literals: [PASSWORD=s3cr3t] generatorOptions: disableNameSuffixHash: true EOF
#kustomize#secrets#gitops#k8s
Терминация 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
#gateway-api#tls#security#network
Учит kustomize семантике слияния CRD, чтобы патчи объединялись корректно
cat <<'EOF' >> kustomization.yaml openapi: path: crd-schema.json EOF
#kustomize#gitops#k8s
Смотрит статус Accepted/ResolvedRefs для отладки неприкреплённого маршрута
kubectl describe httproute <name> -n <ns> | grep -A8 Conditions
#gateway-api#troubleshooting#debug#network
Единый обзор классов, шлюзов и маршрутов во всех неймспейсах
kubectl get gatewayclass,gateway,httproute -A
#gateway-api#network#k8s
Делит трафик 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
#gateway-api#network#ci#k8s
Разрешает 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
#gateway-api#network#security#k8s
Полное состояние endpoint: identity, применение политик, BPF-карты; запускать в pod cilium
cilium-dbg endpoint get <id> -o json | jq '.status.policy'
#cilium#debug#k8s#network
Сопоставления VIP-сервиса и бэкендов в BPF; проверка LB без kube-proxy
cilium-dbg bpf lb list
#cilium#network#k8s#troubleshooting
Записи отслеживания соединений в BPF; поиск зависших/утекающих потоков на узле
cilium-dbg bpf ct list global | head
#cilium#debug#network#troubleshooting
Объясняет вердикт allow/deny между двумя identity; разбор drop-ов NetworkPolicy
cilium-dbg policy trace --src-identity <id> --dst-identity <id> --dport <port>
#cilium#security#debug#k8s
Полное состояние узла: режим datapath, IPAM, BPF-карты, контроллеры; первый шаг при сбоях
cilium status --verbose
#cilium#monitoring#troubleshooting#k8s
Живые потоки L3/L7 от pod к DNS-имени; проверка egress-политики по FQDN
hubble observe --protocol tcp --from-pod <ns>/<pod> --to-fqdn '*.example.com'
#cilium#observability#dns#network
Проверка межкластерной связности и синхронизации удалённых endpoint/identity
cilium clustermesh status --wait
#cilium#network#troubleshooting#k8s
Записи masquerade/NAT в BPF; разбор исчерпания SNAT-портов или source IP egress
cilium-dbg bpf nat list | head
#cilium#network#debug#troubleshooting
Состояния BGP-сессий и IP пиров на узле; Established означает обмен маршрутами
calicoctl node status
#calico#network#troubleshooting#monitoring
Пулы с CIDR, режимом IPIP/VXLAN, NAT-outgoing; проверка настроек инкапсуляции
calicoctl get ippool -o wide
#calico#network#k8s#troubleshooting
Живая конфигурация dataplane Felix: режим BPF, уровень логов, MTU, бэкенд iptables
calicoctl get felixconfiguration default -o yaml
#calico#k8s#troubleshooting#performance
Утилизация IP по блокам; выявление исчерпания pod-IP до сбоев планирования
calicoctl ipam show --show-blocks
#calico#network#troubleshooting#k8s
Показывает полный действующий nginx.conf со всеми server-блоками, которые реально сгенерировал контроллер
kubectl exec deploy/ingress-nginx-controller -n ingress-nginx -- nginx -T | less
#ingress-nginx#debug#troubleshooting#k8s
Текущие активные соединения и счётчики reading/writing/waiting с эндпоинта stub_status
kubectl exec deploy/ingress-nginx-controller -n ingress-nginx -- curl -s localhost:10254/nginx_status
#ingress-nginx#monitoring#performance#observability
Ищет таймауты бэкенда и оборванные клиентом запросы; note: 499 — клиент закрыл соединение до ответа upstream
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller --tail=2000 | grep -iE 'upstream timed out|504|499'
#ingress-nginx#troubleshooting#network#debug
Направляет 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#ci#gitops#network
Ограничивает 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"
#ingress-nginx#security#performance#network
Срезает префикс пути через regex-захват; путь должен содержать (/|$)(.*), чтобы $2 раскрылся
kubectl annotate ingress <name> -n <ns> nginx.ingress.kubernetes.io/rewrite-target='/$2' nginx.ingress.kubernetes.io/use-regex='true'
#ingress-nginx#network#troubleshooting
Показывает контроллеры и какой IngressClass является дефолтным; помечен должен быть только один
kubectl get ingressclass -o custom-columns='NAME:.metadata.name,DEFAULT:.metadata.annotations.ingressclass\.kubernetes\.io/is-default-class'
#ingress-nginx#k8s#troubleshooting
Запускает немедленный перевыпуск, не дожидаясь окна обновления; появится новый CertificateRequest
cmctl renew <name> -n <ns>
#cert-manager#tls#secrets#k8s
Сквозной обзор: Certificate, Request, Order, Challenge и точная причина сбоя ACME
cmctl status certificate <name> -n <ns>
#cert-manager#tls#troubleshooting#debug
Декодирует tls.crt и показывает издателя, SAN и срок действия без ручного openssl x509
cmctl inspect secret <name> -n <ns>
#cert-manager#tls#secrets#security
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
#cert-manager#tls#dns#cloud
Показывает ожидающие проверки и ошибку propagation/self-check, блокирующую выпуск
kubectl get challenges -A -o wide && kubectl describe challenge -n <ns> <name>
#cert-manager#tls#dns#troubleshooting
Показывает, какие DNS-записи external-dns добавляет или удаляет; note: для удаления нужен --policy=sync
kubectl logs deploy/external-dns -n external-dns -f | grep -iE 'CREATE|UPDATE|DELETE|record'
#external-dns#dns#gitops#troubleshooting
Проверяет здоровье агрегированного API; при FailedDiscovery добавьте --kubelet-insecure-tls для самоподписанных kubelet
kubectl get apiservice v1beta1.metrics.k8s.io -o jsonpath='{.status.conditions[?(@.type=="Available")].message}{"\n"}'
#metrics-server#monitoring#troubleshooting#k8s
Поднять HA-кластер за VIP балансировщика; --upload-certs раздаёт CA остальным мастерам
kubeadm init --control-plane-endpoint "<host>:6443" --upload-certs --pod-network-cidr=10.244.0.0/16
#kubeadm#k8s#security
Сгенерировать новый токен и готовую строку join для воркера; токены живут 24ч по умолчанию
kubeadm token create --print-join-command
#kubeadm#k8s#secrets
Показать сроки истечения всех сертификатов и kubeconfig; ловит тихий отказ apiserver заранее
kubeadm certs check-expiration
#kubeadm#tls#troubleshooting
Обновить все сертификаты control-plane; note: перезапусти static pods (mv манифестов) для перечтения
kubeadm certs renew all && systemctl restart kubelet
#kubeadm#tls#troubleshooting
Показать доступные версии, затем апгрейд control-plane; kubelet/kubectl обновляй отдельно после
kubeadm upgrade plan && kubeadm upgrade apply v1.30.2
#kubeadm#k8s#troubleshooting
Однонодовый k3s без встроенных Traefik/LB; подключай свой ingress и MetalLB вместо них
curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable servicelb
#k3s#k8s#network
Первый сервер со встроенным etcd HA; остальные через --server https://<ip>:6443 и тот же токен
curl -sfL https://get.k3s.io | sh -s - server --cluster-init --token <id>
#k3s#etcd#k8s
Добавить воркер; 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 -
#k3s#k8s#secrets
Встроенные crictl/ctr для отладки подов/образов когда kubectl недоступен; работают с containerd напрямую
k3s crictl ps -a && k3s ctr images ls -q
#k3s#debug#troubleshooting
Декларативный конфиг сервера и запуск unit; добавь tls-san чтобы хост LB попал в сертификат API
printf 'token: <id>\ntls-san:\n - <host>\n' > /etc/rancher/rke2/config.yaml && systemctl enable --now rke2-server
#rke2#k8s#tls
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
#rke2#debug#k8s
Показать лидера, размер БД и 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#k8s#observability
Сделать бэкап etcd и вернуть место; defrag снимает алярм NOSPACE после compaction; делай в простой
ETCDCTL_API=3 etcdctl snapshot save /backup/snap.db && etcdctl defrag --cluster && etcdctl alarm disarm
#etcd#disk#troubleshooting
Проверить здоровье apiserver и какая нода держит лиз лидера scheduler/CM
curl -sk https://localhost:6443/healthz && kubectl -n kube-system get lease kube-scheduler kube-controller-manager
#etcd#k8s#observability
Ранжирует поды во всём кластере по числу рестартов, чтобы быстро находить crash-loop
kubectl get po -A --sort-by='.status.containerStatuses[0].restartCount' | tail -20
#k8s-debug#troubleshooting#k8s#observability
Выводит поды, у которых последний выход контейнера был OOMKilled, по всем namespace
kubectl get po -A -o jsonpath='{range .items[*]}{.metadata.namespace}{" "}{.metadata.name}{" "}{.status.containerStatuses[*].lastState.terminated.reason}{"\n"}{end}' | grep OOMKilled
#k8s-debug#troubleshooting#performance#k8s
Извлекает причины FailedScheduling для каждого Pending-пода (taints, ресурсы, affinity)
kubectl get po -A --field-selector=status.phase=Pending -o name | xargs -I{} kubectl describe {} -n <ns> | grep -A3 FailedScheduling
#k8s-debug#troubleshooting#k8s#performance
Смотрит Conditions узла, затем хвост журнала kubelet, чтобы понять причину NotReady
kubectl describe node <node> | grep -A12 Conditions; ssh <node> 'journalctl -u kubelet -n 100 --no-pager'
#k8s-debug#troubleshooting#k8s#kernel
Показывает ошибки pull из registry: неверный тег, отсутствие imagePullSecret или rate limit
kubectl get events -n <ns> --field-selector reason=Failed -o wide | grep -i 'pull\|manifest\|unauthorized'
#k8s-debug#troubleshooting#k8s#security
Массово удаляет все Evicted-поды, оставшиеся после вытеснения по нехватке ресурсов узла
kubectl get po -A | grep Evicted | awk '{print $2" -n "$1}' | xargs -L1 kubectl delete po
#k8s-debug#troubleshooting#k8s#disk
Сбрасывает 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
#k8s-debug#troubleshooting#k8s
Берёт актуальную память по подам из Summary API kubelet в обход metrics-server
kubectl get --raw /api/v1/nodes/<node>/proxy/stats/summary | jq '.pods[] | {name:.podRef.name, mem:.memory.workingSetBytes}'
#k8s-debug#monitoring#performance#k8s
Проверяет conntrack drop/insert_failed по CPU; переполнение таблицы nf_conntrack теряет пакеты
kubectl debug node/<node> -it --image=nicolaka/netshoot -- conntrack -S
#k8s-debug#network#troubleshooting#kernel
Резолвит FQDN сервиса из временного пода, чтобы отделить проблемы CoreDNS от DNS приложения
kubectl run dnstest --rm -it --image=nicolaka/netshoot --restart=Never -- dig +short <name>.<ns>.svc.cluster.local
#k8s-debug#dns#network#troubleshooting
Показывает только Warning-события одного пода в хронологии; modern: заменяет фильтр get events
kubectl events --for pod/<pod> -n <ns> --types=Warning
#k8s-debug#troubleshooting#observability#k8s
Берёт логи предыдущего экземпляра упавшего контейнера, чтобы поймать трейс перед рестартом
kubectl logs <pod> -n <ns> -c <name> --previous --timestamps --tail=200
#k8s-debug#troubleshooting#debug#k8s
Отслеживает OCI-артефакт по диапазону semver вместо git; modern: GitOps прямо из реестра
flux create source oci <name> --url=oci://reg/repo --tag-semver='>=1.0.0' --interval=5m
#flux#gitops#k8s#cloud
Упаковывает манифесты в 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)
#flux#gitops#ci#cloud
Серверный dry-run, показывающий, что именно Flux изменит до применения
flux diff kustomization <name> --path ./overlays/prod
#flux#gitops#debug#k8s
Выводит все объекты, которыми владеет кастомизация, включая вложенные кастомизации
flux tree kustomization <name>
#flux#gitops#k8s#troubleshooting
Рендерит итоговые манифесты офлайн с подстановками Flux, затем валидирует на сервере
flux build kustomization <name> --path ./ | kubectl apply --dry-run=server -f -
#flux#gitops#ci#debug
Показывает все ImageRepository, политики и автоматизации обновления по всем namespace
flux get images all -A
#flux#gitops#monitoring#k8s
Показывает выбранный политикой тег и результаты последнего сканирования по каждому репозиторию
flux get image policy -A && flux get image repository -A
#flux#gitops#monitoring#troubleshooting
Направляет события согласования в 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
#flux#notifications#observability#gitops
Создаёт webhook-URL, чтобы push в git мгновенно запускал согласование вместо опроса
flux create receiver github --type github --event github:push --secret-ref webhook-token --resource GitRepository/<name>
#flux#notifications#ci#gitops
Немедленно подтягивает последний коммит, не трогая зависимые кастомизации
flux reconcile source git <name>
#flux#gitops#troubleshooting#k8s
Выводит историю событий согласования объекта для диагностики дрейфа или сбоев
flux events --for Kustomization/<name>
#flux#observability#debug#troubleshooting
Откладывает согласование app, пока не готова кастомизация infra; примечание: задаёт порядок применения
flux create kustomization app --source=GitRepository/<name> --path=./app --depends-on=infra --prune=true --interval=10m
#flux#gitops#k8s#troubleshooting
Переопределяет Helm-значения на лету без правки Git; note: вызывает дрейф от источника до коммита
argocd app set <name> --helm-set image.tag=v2 --helm-set replicaCount=3
#argocd#gitops#k8s#troubleshooting
Задаёт переопределения параметров Kustomize/Helm через -p; modern: для аудита лучше overlay в Git
argocd app set <name> -p key=val -p env=prod
#argocd#gitops#k8s
Сравнивает отрендеренные Argo манифесты с текущим состоянием кластера до синхронизации
argocd app manifests <name> | kubectl diff -f -
#argocd#gitops#troubleshooting#debug
Выводит ApplicationSet и сгенерированные дочерние приложения и генераторы
argocd appset list && argocd appset get <name> -o yaml
#argocd#gitops#k8s
Регистрирует HTTPS-репозиторий с учёткой; modern: --ssh-private-key-path для доступа по SSH
argocd repo add https://git.example.com/repo.git --username <id> --password $TOKEN
#argocd#gitops#secrets#security
Merge-патч спецификации без правки CR; удобно для быстрой смены targetRevision
argocd app patch <name> --patch '{"spec":{"source":{"targetRevision":"v2.1"}}}' --type merge
#argocd#gitops#k8s#troubleshooting
Отменяет идущую синхронизацию, зависшую на хуке или ожидающем ресурсе
argocd app terminate-op <name>
#argocd#troubleshooting#debug#k8s
Запускает rollout restart Deployment через resource-действия Argo
argocd app actions run <name> restart --kind Deployment --resource-name <id>
#argocd#k8s#troubleshooting
Создаёт deny-окно синхронизации для заморозки деплоев в нерабочее время; расписание по cron
argocd proj windows add <name> --kind deny --schedule '0 0 * * *' --duration 8h --applications '*'
#argocd#gitops#ci#security
Задаёт опции синхронизации для prune и SSA; note: SSA решает конфликты apply больших CRD
argocd app set <name> --sync-option Prune=true --sync-option ServerSideApply=true
#argocd#gitops#k8s
Экспорт/импорт всех приложений, проектов и настроек для DR; учитывает секреты кластеров
argocd admin export -n argocd > argo-backup.yaml # restore: argocd admin import -n argocd - < argo-backup.yaml
#argocd#gitops#secrets#k8s
Синхронизирует только один ресурс по group:kind:name; изолирует правку без полной синхронизации
argocd app sync <name> --resource apps:Deployment:<id>
#argocd#gitops#troubleshooting#k8s
Сборка и push нескольких целей из одного HCL-файла; параллельно, без дублирования групп
docker buildx bake -f docker-bake.hcl --push
#docker#buildkit#ci#performance
Показывает платформы в списке манифестов без скачивания слоёв; проверка arm64+amd64
docker buildx imagetools inspect <reg>/<name>:tag --format '{{json .Manifest}}'
#docker#buildkit#troubleshooting#cloud
Хранит полный кэш слоёв в реестре для 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#ci#performance#cloud
Создаёт сборщик BuildKit с поддержкой мультиарх и экспорта кэша; драйвер по умолчанию не умеет
docker buildx create --name multi --use --driver docker-container --driver-opt network=host
#docker#buildkit#ci
Переиспользует кэш пакетов между сборками, не раздувая слои; сохраняется между запусками
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
#buildkit#performance#ci
Использует файл секрета в одном RUN, не записывая его в слой; вместе с --secret
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci
#buildkit#secrets#security
Пробрасывает SSH-агент хоста в сборку для клона приватного git; ключ не попадает в образ
docker buildx build --ssh default -t <name> . # Dockerfile: RUN --mount=type=ssh git clone git@host:repo
#buildkit#secrets#security#network
Передаёт секрет в BuildKit; виден только в RUN --mount=type=secret,id=token, не в history
docker buildx build --secret id=token,src=token.txt -t <name> .
#docker#buildkit#secrets#security
Запуск docker на удалённом демоне по SSH; не нужен открытый TCP-сокет
docker context create remote --docker host=ssh://<host> && docker context use remote
#docker#network#security
Неизменяемый rootfs, запись только в /tmp, запрет эскалации привилегий; усиление контейнера
docker run --read-only --tmpfs /tmp --security-opt no-new-privileges --cap-drop ALL <name>
#docker#security#kernel
Поток событий OOM в реальном времени для отлова контейнеров, убитых по лимиту памяти
docker events --filter event=oom --filter type=container
#docker#monitoring#troubleshooting#performance
Анализ эффективности слоёв с падением сборки при избытке потраченного места
CI=true dive --lowestEfficiency 0.95 --highestWastedBytes 20MB <reg>/<name>:tag
#dive#ci#performance#observability
Создаёт переносимый .service, заново создающий контейнер при старте; note: современный путь — Quadlet
podman generate systemd --new --files --name <name>
#podman#systemd#gitops
Превращает запущенный под в манифест K8s для переноса в кластер
podman generate kube <pod> > pod.yaml
#podman#k8s#gitops
Поднимает поды/сервисы из манифеста K8s без кластера; --replace применяет заново начисто
podman play kube pod.yaml --replace
#podman#k8s#troubleshooting
Показывает диапазон uid юзер-namespace для rootless; правьте права через chown внутри unshare
podman unshare cat /proc/self/uid_map; cat /etc/subuid
#podman#security#rootless#troubleshooting
Тянет новые образы и перезапускает помеченные контейнеры; нужна метка io.containers.autoupdate=registry
podman auto-update --dry-run && systemctl --user start podman-auto-update
#podman#ci#gitops#security
Обновляет OCI-runtime и конфиг юзер-namespace после апгрейда podman/ядра; чинит зависшие контейнеры
podman system migrate
#podman#troubleshooting#kernel
Выводит runtime-инфо, путь cgroup, mounts и pid CRI-контейнера, которого не видит kubectl
crictl inspect <id> | jq '.info'
#crictl#k8s#debug#troubleshooting
Чистит осиротевшие sandbox-поды в NotReady, которые kubelet не собрал; восстановление на уровне ноды
crictl rmp -f $(crictl pods -q --state NotReady)
#crictl#k8s#troubleshooting#debug
Освобождает диск, удаляя образы без ссылок от контейнеров; безопасно при disk-pressure на ноде
crictl rmi --prune
#crictl#k8s#disk#troubleshooting
containerd держит образы k8s в namespace k8s.io; в namespace по умолчанию пусто
ctr -n k8s.io images ls
#containerd#k8s#troubleshooting
Показывает задачи containerd с pid/статусом, когда kubelet или CRI не отвечает
ctr -n k8s.io task ls
#containerd#k8s#debug#troubleshooting
Запускает docker-compose.yml прямо на containerd без демона Docker; удобно для паритета с нодой k8s
nerdctl --namespace k8s.io compose up -d
#nerdctl#containerd#k8s
Перенос реестр-в-реестр без демона и без локального pull; сохраняет дайджесты
skopeo copy --src-creds u:p --dest-creds u:p docker://<host>/<name> docker://<host>/<name>
#skopeo#security#ci#cloud
Дёшево читает метки, архитектуру и слои удалённого образа; modern: --raw для manifest list
skopeo inspect docker://<host>/<name> | jq '.Labels, .Architecture, .Created'
#skopeo#ci#security#observability
p95 задержки по job; note: всегда агрегируйте _bucket по le перед histogram_quantile
histogram_quantile(0.95, sum by(le,job)(rate(http_request_duration_seconds_bucket[5m])))
#prometheus#performance#observability#monitoring
алерт, когда линейный тренд за 6ч прогнозирует заполнение диска в ближайшие 4ч
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 4*3600) < 0
#prometheus#disk#monitoring#troubleshooting
срабатывает, когда нет ни одной серии; ловит job, полностью исчезнувший из discovery
absent(up{job="node"} == 1)
#prometheus#monitoring#troubleshooting#observability
извлечь/создать новую метку через regex-группу; полезно для join и аккуратных дашбордов
label_replace(node_uname_info, "host", "$1", "nodename", "(.+)")
#prometheus#observability#monitoring
подзапрос: пиковый 5m rate с шагом 1 минута за последний час; выявляет всплески
max_over_time(rate(node_network_receive_bytes_total[5m])[1h:1m])
#prometheus#performance#network#observability
without() сохраняет все метки кроме instance; чище, чем перечислять много меток в by()
sum without(instance) (rate(http_requests_total{code=~"5.."}[5m]))
#prometheus#observability#monitoring
предвычисляет коэффициент ошибок 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]))
#prometheus#gitops#observability#performance
проверка перед reload; запускайте в CI, чтобы поймать битые expr/yaml до деплоя
promtool check rules rules.yml && promtool check config prometheus.yml
#prometheus#ci#gitops#troubleshooting
выполнить PromQL без браузера; удобно для скриптовых top-N расследований
promtool query instant http://localhost:9090 'topk(5, sum by(pod)(rate(container_cpu_usage_seconds_total[5m])))'
#prometheus#debug#troubleshooting#performance
показывает метрики и пары меток с высокой кардинальностью; первый шаг при росте памяти
promtool tsdb analyze /prometheus --limit 20
#prometheus#performance#troubleshooting#observability
ограниченное по времени заглушение по matcher; снять раньше: amtool silence expire <id>
amtool silence add alertname=HighLatency cluster=prod --duration 2h --comment 'deploy in progress'
#alertmanager#monitoring#troubleshooting#observability
показывает, в какой receiver попадёт набор меток; проверяйте маршруты до выката конфига
amtool config routes test --config.file=alertmanager.yml severity=critical team=db
#alertmanager#ci#gitops#troubleshooting
топ метрик по числу серий в VictoriaMetrics; быстро находит взрыв меток
curl -s 'http://vm:8428/api/v1/status/tsdb?topN=10' | jq '.data.seriesCountByMetricName'
#victoriametrics#performance#troubleshooting#observability
снапшот, затем vmbackup в S3 для согласованной копии; восстановление — vmrestore
curl -s http://vm:8428/snapshot/create | jq -r .snapshot | xargs -I{} vmbackup -storageDataPath=/vmdata -snapshotName={} -dst=s3://bucket/vm
#victoriametrics#disk#cloud#observability
Фильтр по подстроке, парсинг JSON и вывод только нужных полей. note: | json до line_format.
{app="api"} |= "error" | json | line_format "{{.level}} {{.msg}}"
#loki#logql#observability#debug
Логов в секунду по уровням за окно 5 минут. modern: парсер logfmt для строк key=value.
sum by (level) (rate({app="api"} | logfmt [5m]))
#loki#logql#rate#observability
p99 задержки из числового поля лога по маршрутам. note: unwrap требует числовое поле/метку.
quantile_over_time(0.99, {app="api"} | json | unwrap latency_ms [5m]) by (route)
#loki#logql#performance#observability
Подсчёт строк по regex-совпадению ошибок в минуту по неймспейсу. |~ — это regex-match.
sum(count_over_time({namespace="prod"} |~ "timeout|deadline exceeded" [1m]))
#loki#logql#regex#troubleshooting
CLI-запрос за последний час с лимитом строк и выводом JSONL. сначала задайте LOKI_ADDR.
logcli query '{job="app/api"} |= "panic"' --since=1h --limit=200 --output=jsonl
#loki#logcli#debug#observability
Метрический 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'
#loki#api#monitoring#observability
Ручная отправка записи лога для проверки приёма. 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"]]}]}'
#loki#api#troubleshooting#observability
Поиск span с ошибкой у сервиса медленнее 2с. сочетает атрибут, статус и длительность.
{ .service.name = "api" && status = error && duration > 2s }
#tempo#traceql#performance#troubleshooting
Поиск трейсов по TraceQL через HTTP и вывод их ID. limit ограничивает число результатов.
curl -sG "$TEMPO_ADDR/api/search" --data-urlencode 'q={ .http.status_code >= 500 }' --data-urlencode 'limit=20' | jq '.traces[].traceID'
#tempo#traceql#api#observability
Получить трейс по ID и посчитать длительность каждого span. note: время в unix-наносекундах.
curl -s "$TEMPO_ADDR/api/traces/<id>" | jq '.batches[].scopeSpans[].spans[] | {name, durationNs: (.endTimeUnixNano|tonumber)-(.startTimeUnixNano|tonumber)}'
#tempo#api#debug#observability
Статическая проверка пайплайна коллектора до перезапуска. ловит ошибки receivers/processors/exporters.
otelcol validate --config=/etc/otelcol/config.yaml
#opentelemetry#otel#ci#troubleshooting
Эндпоинт автоинструментирования и атрибуты ресурса без правок кода. 4317=gRPC, 4318=HTTP.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 OTEL_RESOURCE_ATTRIBUTES=service.name=api,deployment.environment=prod
#opentelemetry#otel#observability#cloud
Проверка 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}'
#opentelemetry#otel#api#debug
Просмотр живых событий на выходе трансформа для отладки VRL. modern: vector top для метрик потока.
vector tap --outputs-of parse_logs
#vector#debug#observability#troubleshooting
Запускает workflow_dispatch с передачей входных параметров; примечание: нужен триггер workflow_dispatch
gh workflow run deploy.yml -f env=prod -f version=1.4.2 --ref main
#github-actions#ci#gitops
Транслирует прогресс свежего запуска в реальном времени и завершается с его кодом возврата
gh run watch $(gh run list -w deploy.yml -L1 --json databaseId -q '.[0].databaseId')
#github-actions#ci#monitoring
Выводит логи только упавших шагов, отсекая шум от успешных задач
gh run view <id> --log-failed | less -R
#github-actions#debug#troubleshooting
Запускает job Actions в Docker локально до пуша; примечание: укажите реальный образ раннера
act -j build --secret-file .secrets -P ubuntu-latest=catthehacker/ubuntu:act-22.04
#github-actions#ci#debug
Повторяет только упавшие job запуска, переиспользуя ранее успешные результаты
gh run rerun <id> --failed
#github-actions#ci#troubleshooting
Находит самые крупные кэши Actions и удаляет устаревшие для освобождения квоты
gh cache list --sort size_in_bytes --order desc; gh cache delete <id>
#github-actions#performance#disk
Права уровня job, дающие OIDC-токен для роли в облаке без статических ключей
permissions: id-token: write contents: read
#github-actions#security#cloud
Регистрирует раннер новым токеном авторизации; примечание: старый registration-token устарел
gitlab-runner register --non-interactive --url https://<host> --token glrt-<id> --executor docker --docker-image alpine:latest
#gitlab-ci#ci#cloud
Проверяет настроенные раннеры и снимает с регистрации те, что GitLab больше не знает
gitlab-runner verify --delete
#gitlab-ci#troubleshooting#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
#gitlab-ci#ci#gitops
Прогоняет job из .gitlab-ci.yml локально в Docker; примечание: замена удалённому gitlab-runner exec
gitlab-ci-local --job build
#gitlab-ci#ci#debug
Запускает job и ждёт завершения, транслируя вывод консоли (-f -v)
java -jar jenkins-cli.jar -s https://<host> -auth user:token build <name> -f -v
#jenkins#ci#monitoring
Проверяет Jenkinsfile на стороне сервера до коммита, ловя синтаксические ошибки заранее
curl -X POST -F "jenkinsfile=<Jenkinsfile" https://<host>/pipeline-model-converter/validate
#jenkins#ci#troubleshooting
Транслирует логи самого свежего PipelineRun по всем его TaskRun
tkn pipelinerun logs -f --last -n <ns>
#tekton#k8s#debug
Проверить активный аккаунт, ARN и роль перед выполнением опасных команд
aws sts get-caller-identity --query '{acct:Account,arn:Arn}' --output table
#aws#security#troubleshooting
Принять 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 /')
#aws#security#secrets
Список запущенных 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
#aws#network#troubleshooting
Зеркалирование в бакет; --delete чистит лишние ключи. note: --size-only игнорирует mtime
aws s3 sync ./ s3://<name>/ --delete --exclude '*.tmp' --exclude '.git/*' --size-only
#aws#disk#cloud
Сгенерировать временную ссылку на скачивание без публикации объекта
aws s3 presign s3://<name>/path/file.tgz --expires-in 3600
#aws#security#cloud
Добавить/обновить контекст EKS с коротким алиасом вместо длинного ARN
aws eks update-kubeconfig --name <cluster> --region <id> --alias <cluster> --kubeconfig ~/.kube/config
#aws#k8s#gitops
Авторизовать Docker в ECR через stdin, чтобы токен не попал в историю
aws ecr get-login-password --region <id> | docker login --username AWS --password-stdin <id>.dkr.ecr.<id>.amazonaws.com
#aws#security#ci
Интерактивная сессия на инстансе без открытого 22 порта и бастиона
aws ssm start-session --target i-<id> --region <id>
#aws#security#network
Стриминг лог-группы как tail -f. modern: заменяет неудобный filter-log-events
aws logs tail /aws/lambda/<name> --follow --since 10m --format short
#aws#observability#debug
Проверить, разрешено ли действие принципалу, до выдачи прав; 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
#aws#security#troubleshooting
Получить JSON-секрет и достать одно поле. note: значение видно в аргументах
aws secretsmanager get-secret-value --secret-id <name> --query SecretString --output text | jq -r '.password'
#aws#secrets#security
Отсортировать 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
#aws#performance#cloud
Идемпотентный деплой; 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
#aws#gitops#ci
Подсчитать неприсоединённые EBS-тома через length(); --profile/--region задают область
aws ec2 describe-volumes --filters Name=status,Values=available --query 'length(Volumes[])' --output text --profile staging --region <id>
#aws#disk#cloud
Аутентификация под сервисным аккаунтом в CI; примечание: workload identity предпочтительнее долгоживущих ключей
gcloud auth activate-service-account --key-file=key.json && gcloud config set project <id>
#gcloud#ci#secrets#cloud
Получить kubeconfig для GKE; modern: с k8s 1.26 нужен gke-gcloud-auth-plugin в PATH
gcloud container clusters get-credentials <cluster> --region <id> --project <id>
#gcloud#k8s#cloud
Своя таблица работающих ВМ и публичных IP через проекции --format/--filter
gcloud compute instances list --format="table(name,status,EXTERNAL_IP)" --filter="status=RUNNING"
#gcloud#network#cloud
Аудит ролей по участникам; --flatten раскрывает вложенные bindings в строки
gcloud projects get-iam-policy <id> --flatten="bindings[].members" --format="table(bindings.role,bindings.members)"
#gcloud#security#cloud
Выбрать ошибки за последний час по проекту; --freshness избегает полного сканирования
gcloud logging read 'severity>=ERROR' --limit 20 --freshness=1h --format='value(timestamp,resource.type,textPayload)'
#gcloud#observability#troubleshooting#cloud
Доступ к ВМ без публичного IP через Identity-Aware Proxy; bastion не нужен
gcloud compute ssh <name> --zone <id> --tunnel-through-iap
#gcloud#network#security#cloud
Вывести последнюю версию секрета из Secret Manager; в CI фиксируйте версию для воспроизводимости
gcloud secrets versions access latest --secret=<name> --project <id>
#gcloud#secrets#ci#cloud
Зеркалирование каталога в GCS; -d удаляет лишнее, современная замена gsutil rsync
gcloud storage rsync -r -d ./build gs://<name>/site
#gcloud#disk#cloud
Неинтерактивная аутентификация для CI; modern: --federated-token для OIDC без секрета
az login --service-principal -u <id> -p "$AZ_SECRET" --tenant <id>
#az#ci#secrets#cloud
Добавить контекст AKS в kubeconfig; --admin обходит Azure AD RBAC если включён
az aks get-credentials -g <name> -n <cluster> --overwrite-existing
#az#k8s#cloud
Получить чистое значение секрета без кавычек через --query/-o tsv; удобно для env
az keyvault secret show --vault-name <name> --name <name> --query value -o tsv
#az#secrets#cloud
-d добавляет рантайм IP и состояние питания; обычный list этих полей не содержит
az vm list -d -o table --query "[].{name:name,ip:publicIps,state:powerState}"
#az#network#monitoring#cloud
Выборочный сброс по файлам; примечание: 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"]}'
#cloudflare#performance#network#cloud
Добавить 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}'
#cloudflare#dns#network#cloud
Задать folder-id по умолчанию для активного профиля; проверить через config list
yc config set folder-id <id> && yc config list
#yc#cloud#iam
Изолировать креды по средам; использовать yc --profile prod или YC_PROFILE в CI
yc config profile create prod && yc config profile activate prod
#yc#cloud#ci
IAM-токен (TTL ~12 ч) из OAuth; передать в API/Terraform через переменную YC_TOKEN
export YC_TOKEN=$(yc iam create-token)
#yc#iam#security#secrets
Создать сервисный аккаунт для пайплайнов; роли выдавать отдельно по минимуму прав
yc iam service-account create --name sa-ci --description 'CI deployer'
#yc#iam#ci#security
JSON-ключ для неинтерактивной аутентификации; note: ротировать и хранить в vault
yc iam key create --service-account-name sa-ci --output key.json
#yc#iam#secrets#ci
Привязать роль на уровне каталога; лучше узкие роли вместо editor
yc resource-manager folder add-access-binding <id> --role editor --service-account-name sa-ci
#yc#iam#security
Добавить внешний endpoint в kubeconfig; без --external — внутренний адрес VPC
yc managed-kubernetes cluster get-credentials <name> --external --force
#yc#k8s#network
Свести имя/статус/id кластеров в таблицу для скриптов и аудита
yc managed-kubernetes cluster list --format json | jq -r '.[]|[.name,.status,.id]|@tsv'
#yc#k8s#monitoring
Группа узлов с автоскейлером и границами 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
#yc#k8s#performance#cloud
Зональная подсеть в сети; CIDR не должен пересекаться с соседними
yc vpc subnet create --name sub-a --network-name net-1 --range 10.0.0.0/24 --zone ru-central1-a
#yc#network#vpc#cloud
Добавить 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]'
#yc#network#security#vpc
Вывести слушатели и target-группы NLB для отладки маршрутизации
yc load-balancer network-load-balancer get <name> --format json | jq '.listeners,.attached_target_groups'
#yc#network#troubleshooting#cloud
Перечислить ALB и их статус в каталоге
yc application-load-balancer load-balancer list --format json | jq -r '.[]|[.name,.status]|@tsv'
#yc#network#monitoring#cloud
Публичная зона; обязателен завершающий . в FQDN, далее делегировать NS у регистратора
yc dns zone create --name myzone --zone example.com. --public-visibility
#yc#dns#network
Добавить apex A-запись с TTL 600 c; @ — корень зоны
yc dns zone add-records --name myzone --record '@ 600 A 1.2.3.4'
#yc#dns#network
Поднять ВМ с публичным 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
#yc#cloud#ci#network
Развернуть отказоустойчивый кластер 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
#yc#cloud#k8s
Показать FQDN хостов с ролью MASTER/REPLICA и состоянием для маршрутизации подключений
yc managed-postgresql cluster list-hosts --cluster-name <name> --format json | jq -r '.[] | "\(.name)\t\(.role)\t\(.health)"'
#yc#cloud#troubleshooting
Создать пользователя через 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>
#yc#cloud#secrets
Подключение через 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"
#yc#tls#security
Отфильтровать только нездоровые кластеры Redis для быстрого триажа парка
yc managed-redis cluster list --format json | jq -r '.[] | select(.health!="ALIVE") | "\(.name)\t\(.status)\t\(.health)"'
#yc#cloud#monitoring
Аудит версий и пресетов кластеров ClickHouse для поиска кандидатов на обновление
yc managed-clickhouse cluster list --format json | jq -r '.[] | "\(.name)\t\(.config.version)\t\(.resources.resourcePresetId)"'
#yc#cloud#observability
Выпустить 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#secrets#security
Синхронизировать в YC bucket через S3 API; modern: --delete зеркалит и удаляет устаревшие объекты
aws --endpoint-url=https://storage.yandexcloud.net s3 sync ./dist s3://<name>/<id>/ --delete --exclude '*.map'
#yc#cloud#disk
Вывести бакеты с лимитом размера в GiB и классом хранения за один проход
yc storage bucket list --format json | jq -r '.[] | "\(.name)\t\(.max_size/1073741824)GiB\t\(.default_storage_class)"'
#yc#cloud#disk
Автоудаление объектов с префиксом через 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}}]}'
#yc#cloud#disk
Создать CR и подключить хелпер учёток docker; modern: yc как credential helper, без docker login
yc container registry create --name <name> && yc container registry configure-docker
#yc#ci#security
Тег с подставленным 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>
#yc#ci#cloud
Перечислить все теги по всем репозиториям; полезно перед чисткой реестра (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
#yc#ci#troubleshooting
Выкатить новую ревизию из образа 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#ci
Читать 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)"'
#yc#observability#troubleshooting
Запросить 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)"'
#yc#tls#security
Показать активные запросы, работающие дольше 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;
#postgres#performance#troubleshooting#monitoring
Принудительно завершить процесс по pid; note: сначала пробуйте pg_cancel_backend, чтобы отменить только запрос
SELECT pg_terminate_backend(<pid>); -- graceful first: SELECT pg_cancel_backend(<pid>);
#postgres#troubleshooting#performance
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;
#postgres#performance#observability#troubleshooting
Выполнить запрос с реальными таймингами и попаданиями в буферы, чтобы увидеть дисковый I/O
EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT ... ; -- shared hit/read shows cache vs disk I/O
#postgres#performance#debug#disk
Показать процессы, ждущие блокировок, и какие 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#troubleshooting#performance#debug
Измерить лаг реплики в байтах и интервалы 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#monitoring#observability#troubleshooting
Размер каждой базы в человекочитаемом виде, начиная с самых больших
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database ORDER BY pg_database_size(datname) DESC;
#postgres#disk#monitoring
Топ таблиц по полному размеру с учётом индексов и 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#disk#performance#monitoring
Индексы, которые ни разу не сканировались (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#performance#disk#troubleshooting
Найти таблицы с мёртвыми кортежами и давно не запускавшимся автовакуумом
SELECT relname, n_dead_tup, last_autovacuum, last_autoanalyze FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 20;
#postgres#performance#monitoring#troubleshooting
Перестроить распухший индекс онлайн; note: нельзя выполнять внутри транзакции
REINDEX INDEX CONCURRENTLY <name>; -- note: cannot run inside a transaction block
#postgres#performance#disk
Создать индекс без блокировки записи; отслеживать через pg_stat_progress_create_index
CREATE INDEX CONCURRENTLY idx_<name> ON <table>(col); -- monitor: SELECT * FROM pg_stat_progress_create_index;
#postgres#performance#monitoring
Параллельный дамп/восстановление в custom-формате; note: -j требует custom или directory формат, а не обычный SQL
pg_dump -Fc -j 4 -d <name> -f db.dump && pg_restore -j 4 -d <name> db.dump
#postgres#performance#disk#troubleshooting
Запустить 60-секундный нагрузочный тест: 32 клиента, 8 потоков, отчёт каждые 5с
pgbench -c 32 -j 8 -T 60 -P 5 -d <name>; -- init once: pgbench -i -s 100 <name>
#postgres#performance#monitoring
Сэмплирует пространство ключей и находит крупнейшие ключи по типам; прим.: оценочно, использует SCAN, не блокирует
redis-cli --bigkeys
#redis#performance#troubleshooting#debug
Сэмплирует ключи с сортировкой по реальному потреблению памяти, а не по числу элементов; находит пожирателей RAM
redis-cli --memkeys
#redis#performance#monitoring#debug
Объём в байтах для одного ключа с накладными расходами; SAMPLES 0 — точно для коллекций
redis-cli MEMORY USAGE <name> SAMPLES 0
#redis#performance#debug#monitoring
Показывает 10 самых медленных команд с аргументами и временем, затем очищает журнал
redis-cli SLOWLOG GET 10; redis-cli SLOWLOG RESET
#redis#performance#troubleshooting#observability
Понятный анализ задержек с вероятными причинами; используйте вместе с LATENCY HISTORY <event>
redis-cli LATENCY DOCTOR
#redis#performance#troubleshooting#observability
Находит долгоживущие/простаивающие соединения, утекающие сокеты; сортировка по age и idle
redis-cli CLIENT LIST | tr ' ' '\n' | grep -E 'addr=|age=|idle=' | paste - - - | sort -t= -k3 -rn | head
#redis#network#troubleshooting#debug
Проверяет покрытие слотов, согласованность узлов и открытые слоты по всему кластеру
redis-cli --cluster check <host>:<port>
#redis#troubleshooting#network#monitoring
Состояние и время последней операции по каждому участнику; находит отстающие или нездоровые реплики
mongosh --eval 'rs.status().members.forEach(m=>print(m.name,m.stateStr,m.optimeDate))'
#mongodb#monitoring#troubleshooting#observability
Показывает запросы дольше 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#troubleshooting#performance#debug
Показывает просмотренные и возвращённые документы и использование индекса; COLLSCAN — индекса нет
mongosh --eval 'db.<name>.find({status:"active"}).explain("executionStats").executionStats'
#mongodb#performance#troubleshooting#debug
Число обращений к каждому индексу; ноль — кандидат на удаление ради экономии на записи
mongosh --eval 'db.<name>.aggregate([{$indexStats:{}}]).forEach(i=>print(i.name,i.accesses.ops))'
#mongodb#performance#disk#monitoring
Записывает операции медленнее 100мс, затем читает худшие из system.profile
mongosh --eval 'db.setProfilingLevel(1,{slowms:100}); db.system.profile.find().sort({millis:-1}).limit(5)'
#mongodb#performance#troubleshooting#observability
Топ медленных завершённых запросов за час с памятью; 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#performance#troubleshooting#observability
Находит зависшие мутации ALTER/DELETE с причиной сбоя; блокируют изменения схемы
clickhouse-client -q "SELECT database, table, mutation_id, latest_fail_reason FROM system.mutations WHERE is_done=0"
#clickhouse#troubleshooting#debug#monitoring
Офлайн-проверка синтаксиса правил перед применением; note: ненулевой код выхода при ошибке, удобно для CI-гейта
falco -r /etc/falco/falco_rules.yaml --validate
#falco#security#ci#k8s
Выбирает из JSON-вывода только события Falco уровня Critical; требует json_output: true в falco.yaml
kubectl logs -l app.kubernetes.io/name=falco -n falco | jq 'select(.priority=="Critical")'
#falco#security#observability#k8s
Загрузка и управление версионированными правилами/плагинами через OCI; modern: заменяет ручное копирование файлов правил
falcoctl artifact install falco-rules:latest && falcoctl artifact list
#falco#security#gitops#k8s
Запускает Falco на 60 секунд и завершается; удобно для разовой диагностики подозрительного узла
falco -M 60 -o json_output=true 2>/dev/null | jq -c '{rule,output_fields}'
#falco#security#troubleshooting#debug
Показывает доступные поля фильтрации для написания условий и вывода в своих правилах
falco --list | grep -E 'k8s\.|container\.|proc\.' | sort
#falco#security#debug
Минимальное своё правило с 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
#falco#security#k8s
Показывает все политики Kyverno с режимом enforce/audit и готовностью одним взглядом
kubectl get cpol,pol -A -o custom-columns='NAME:.metadata.name,ACTION:.spec.validationFailureAction,READY:.status.ready'
#kyverno#security#gitops#k8s
Прогон политики по манифесту без кластера; формирует PolicyReport для гейта в CI
kyverno apply policy.yaml --resource resource.yaml --policy-report
#kyverno#ci#security#gitops
Выполняет наборы kyverno-test.yaml с проверкой pass/fail/skip ресурсов; -d даёт подробный diff
kyverno test ./tests --remove-color -d
#kyverno#ci#troubleshooting
Сводит проваленные результаты PolicyReport по всему кластеру с подсчётом по частоте
kubectl get polr,cpolr -A -o json | jq -r '.items[].results[] | select(.result=="fail") | "\(.policy)/\(.rule)"' | sort | uniq -c
#kyverno#observability#security#troubleshooting
Авто-добавление меток при 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
#kyverno#security#k8s#gitops
Перечисляет ConstraintTemplates и все созданные виды constraint по всем неймспейсам
kubectl get constrainttemplates && kubectl get constraints -A
#opa-gatekeeper#security#k8s#gitops
Читает нарушающие ресурсы из status аудита ограничения без повторного сканирования
kubectl get k8srequiredlabels <name> -o jsonpath='{.status.totalViolations} {range .status.violations[*]}{"\n"}{.kind}/{.name}: {.message}{end}'
#opa-gatekeeper#security#observability#troubleshooting
Проверка шаблонов и ограничений на фикстурах без кластера; modern: сдвиг проверки влево в CI
gator test -f policy/ && gator verify ./suite
#opa-gatekeeper#ci#security#troubleshooting
Подписывайте по неизменяемому дайджесту, не по тегу; примечание: подпись по тегу небезопасна
cosign sign --key cosign.key <host>/<name>@sha256:<id>
#cosign#security#ci#k8s
Беcключевая подпись через Fulcio/Rekor по OIDC-личности; modern: по умолчанию в cosign v2
COSIGN_EXPERIMENTAL=1 cosign sign <host>/<name>@sha256:<id>
#cosign#security#ci#observability
Проверка беcключевой подписи с привязкой к личности и OIDC-издателю; примечание: задавайте оба
cosign verify --certificate-identity=<id> --certificate-oidc-issuer=<host> <host>/<name> | jq .
#cosign#security#troubleshooting#ci
Прикрепляет подписанную аттестацию SBOM CycloneDX к дайджесту образа
cosign attest --key cosign.key --predicate sbom.json --type cyclonedx <host>/<name>@sha256:<id>
#cosign#security#ci#observability
Проверяет аттестацию и декодирует in-toto payload для разбора предиката
cosign verify-attestation --key cosign.pub --type cyclonedx <host>/<name> | jq -r '.payload' | base64 -d | jq .
#cosign#security#troubleshooting#observability
Шифрует только значения на месте; примечание: ключи остаются читаемыми, diff обозрим
SOPS_AGE_RECIPIENTS=age1<id> sops -e -i secrets.yaml
#sops#secrets#security#gitops
Меняет data key на получателей из .sops.yaml без ручного перешифрования открытого текста
sops updatekeys secrets.yaml
#sops#secrets#security#gitops
Подставляет расшифрованные секреты в env для одной команды; примечание: ничего не пишется на диск
sops exec-env secrets.enc.yaml 'terraform apply'
#sops#secrets#ci#security
Меняет одно вложенное значение без редактора; удобно для скриптовой ротации
sops --set '["db"]["password"] "s3cr3t"' secrets.enc.yaml
#sops#secrets#ci#troubleshooting
Переиспользует существующий SSH-ключ как получателя/identity age; новых ключей не нужно
age -R ~/.ssh/id_ed25519.pub -o out.age file && age -d -i ~/.ssh/id_ed25519 out.age
#age#secrets#security#tls
Обновляет одно поле, не переписывая весь секрет; примечание: kv patch требует KV-v2
vault kv patch -mount=secret app api_key=<id>
#vault#secrets#troubleshooting
Передаёт секрет одноразовым wrapping-токеном; примечание: повторное чтение — сигнал компрометации
T=$(vault kv get -wrap-ttl=60s -field=wrapping_token -mount=secret app); vault unwrap $T
#vault#secrets#security#troubleshooting
Показывает действующие ACL-права текущего токена на пути; быстрый дебаг политик
vault token capabilities database/creds/readonly
#vault#security#troubleshooting#observability
Отзывает все lease под префиксом, мгновенно убивая утёкшие динамические креды БД
vault lease revoke -prefix database/creds/readonly
#vault#security#troubleshooting#secrets
Переименование/рефакторинг адреса без уничтожения; в новых версиях лучше блок moved{}
terraform state mv 'aws_instance.web' 'aws_instance.app'
#terraform#gitops#troubleshooting
Забыть ресурс из state без удаления реальной инфраструктуры; note: объект остаётся живым
terraform state rm 'aws_s3_bucket.legacy'
#terraform#troubleshooting#cloud
Вывести все атрибуты одного адреса для разбора дрейфа и отладки
terraform state show 'module.vpc.aws_subnet.private[0]'
#terraform#debug#troubleshooting
Отфильтровать управляемые адреса перед операциями со state
terraform state list | grep -i 'aws_iam'
#terraform#troubleshooting#security
Декларативный импорт; -generate-config-out генерирует HCL для импортируемого объекта
cat > import.tf <<'EOF' import { to = aws_instance.web id = "<id>" } EOF terraform plan -generate-config-out=generated.tf
#terraform#gitops#cloud
Переименование адресов в коде без destroy/recreate; фиксируется в системе контроля версий
cat >> moved.tf <<'EOF' moved { from = aws_instance.web to = aws_instance.app } EOF
#terraform#gitops#troubleshooting
Принудительный destroy+recreate одного ресурса; заменяет устаревший terraform taint
terraform apply -replace='aws_instance.web'
#terraform#troubleshooting#cloud
Ограничить план одним адресом; note: -target — аварийный приём, может скрывать дрейф
terraform plan -target='module.db.aws_db_instance.main'
#terraform#troubleshooting#debug
Синхронизировать state с реальной инфраструктурой без изменений; показывает внешний дрейф
terraform plan -refresh-only
#terraform#monitoring#troubleshooting
Перенести state в новый backend; -reconfigure пропускает миграцию и сбрасывает настройки
terraform init -migrate-state -backend-config=backend.hcl
#terraform#gitops#troubleshooting
Передать машиночитаемые outputs в jq для скриптов и связывания систем
terraform output -json | jq -r '.endpoints.value[]'
#terraform#ci#observability
Записать отладку провайдера/API в файл; TRACE даёт максимально подробный уровень
TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform plan
#terraform#debug#troubleshooting
Перешифровать vault новым паролем без раскрытия открытого текста; безопасная ротация секретов
ansible-vault rekey vault.yml --new-vault-password-file new_pass.txt
#ansible#vault#secrets#security
Совмещение vault-ID: файл для dev, интерактивный запрос для prod; секреты разделены по окружениям
ansible-playbook site.yml --vault-id dev@dev_pass.txt --vault-id prod@prompt
#ansible#vault#secrets#security
Расшифровать, отредактировать в $EDITOR, зашифровать атомарно — открытый текст не пишется на диск
EDITOR=vim ansible-vault edit group_vars/prod/secrets.yml --vault-password-file ~/.vault_pass
#ansible#vault#secrets#security
Дерево динамического облачного инвентаря с переменными хостов; проверка группировки плагина перед запуском
ansible-inventory -i aws_ec2.yml --graph --vars
#ansible#cloud#troubleshooting#network
Преобразовать динамический инвентарь в статический YAML для diff или офлайн-отладки
ansible-inventory -i aws_ec2.yml --list --yaml > resolved_inventory.yml
#ansible#cloud#troubleshooting
Автогруппировка хостов по фактам/тегам через плагин constructed; напр. role_web, region_eu
plugin: constructed keyed_groups: - key: tags.Role prefix: role - key: placement.region prefix: region
#ansible#cloud#gitops
Создать роль со сценарием Molecule; MOLECULE_DISTRO задаёт тестовый образ
molecule init role my_role --driver-name docker && cd my_role && MOLECULE_DISTRO=ubuntu2204 molecule create
#ansible#ci#troubleshooting
Применить роль к тестовому инстансу, затем выполнить проверки (testinfra/ansible)
molecule converge && molecule verify
#ansible#ci#monitoring
Повторный прогон роли с падением при changed — ловит неидемпотентные задачи
molecule idempotence
#ansible#ci#troubleshooting
Зайти по SSH в тестовый контейнер Molecule для разбора состояния до destroy
molecule login --host instance
#ansible#ci#debug#troubleshooting
Пропустить всё до названной задачи; продолжить упавший плейбук без повтора подготовки
ansible-playbook site.yml --start-at-task "Deploy app config"
#ansible#debug#troubleshooting
Показать план: все задачи и итоговые целевые хосты без подключения
ansible-playbook site.yml --list-tasks --list-hosts -i prod
#ansible#debug#troubleshooting
Ранжировать задачи по времени выполнения для поиска медленных; profile_roles — вариант по ролям
ANSIBLE_CALLBACKS_ENABLED=profile_tasks ansible-playbook site.yml
#ansible#performance#observability
Сохранить отправленные скрипты модулей в ~/.ansible/tmp для ручной отладки падающего модуля
ANSIBLE_KEEP_REMOTE_FILES=1 ansible-playbook site.yml -vvvv --limit <host>
#ansible#debug#troubleshooting
Загрузка CPU по потокам — находим горячий TID внутри процесса для jstack/perf
pidstat -t -p <pid> 1
#troubleshooting#performance#cpu#debug
Потоки процесса в реальном времени; горячий TID в hex (printf %x) сопоставляем с nid в jstack
top -H -p <pid>
#troubleshooting#performance#cpu#debug
По ядрам %usr/%sys/%iowait — ловим одно перегруженное ядро против равномерной нагрузки
mpstat -P ALL 1
#troubleshooting#performance#cpu#monitoring
Колонка r в vmstat (готовые к запуску) выше nproc = насыщение CPU, а не просто высокий load
vmstat 1 5 | awk 'NR>2{print "runq="$1" blocked="$2}'; nproc
#troubleshooting#performance#cpu#debug
Число потоков на процесс и в системе; утечка потоков исчерпывает kernel.pid_max
ps -o nlwp= -p <pid>; ps -eLf | wc -l
#troubleshooting#performance#debug#kernel
Снимаем RSS каждые 5с — подтверждаем реальную утечку (монотонный рост), а не обычную работу
while sleep 5; do ps -o rss= -p <pid> | awk '{print strftime("%T"),$1/1024"MB"}'; done
#troubleshooting#memory#debug#monitoring
Итог Rss/Pss/Swap одной командой без разбора всего smaps; дёшево при больших картах памяти
cat /proc/<pid>/smaps_rollup
#troubleshooting#memory#debug#performance
Топ отображений по RSS; находим утечку в куче, mmap или раздувшуюся библиотеку
pmap -x <pid> | sort -k3 -rn | head
#troubleshooting#memory#debug
Slab-кэши по размеру; раздутые dentry/inode объясняют давление на память ядра
slabtop -o -s c | head -20
#troubleshooting#memory#kernel#performance
Разделяем slab на освобождаемую и нет; большой SUnreclaim = реальная утечка в ядре
grep -E 'Slab|SReclaimable|SUnreclaim' /proc/meminfo
#troubleshooting#memory#kernel#debug
OOM killer в dmesg troubleshooting
Жертвы OOM с читаемым временем; -T убирает нечитаемые тики ядра
dmesg -T | grep -iE 'killed process|out of memory' | tail
#troubleshooting#memory#oom#kernel
Выше oom_score = вероятнее жертва; oom_score_adj -1000 защищает процесс от OOM
cat /proc/<pid>/oom_score /proc/<pid>/oom_score_adj
#troubleshooting#memory#oom#kernel
Счётчики oom_kill/max по cgroup; под упирается в memory.max до OOM на уровне ноды
cat /sys/fs/cgroup/<name>/memory.events | grep -E 'oom|max'
#troubleshooting#memory#oom#k8s
df полон, а du чист? Удалённые файлы держит открытый процесс; рестарт освобождает место
lsof +L1 | sort -k7 -rn | head
#troubleshooting#disk#debug#performance
%util около 100 и растущий await = устройство перегружено; связать с шумным процессом
iostat -x 1 | awk '$1!~/^$/{print $1, "util="$NF, "await="$(NF-2)}'
#troubleshooting#disk#performance#monitoring
biotop из bcc: какой процесс грузит блочный I/O по байтам/задержке; modern: однострочники bpftrace
biotop-bpfcc -C 5 1
#troubleshooting#disk#performance#observability
Считает отслеживаемые соединения; -S показывает insert_failed/drop при переполнении таблицы
conntrack -L 2>/dev/null | wc -l; conntrack -S
#troubleshooting#network#kernel#performance
Поток событий NEW/DESTROY вживую для отлова потерь NAT/таймаутов по порту
conntrack -E -p tcp --dport 443 -o timestamp
#troubleshooting#network#debug#kernel
Считает сокеты TIME-WAIT против диапазона портов; note: включай tw_reuse, не tw_recycle
ss -tan state time-wait | wc -l; sysctl net.ipv4.ip_local_port_range
#troubleshooting#network#performance#kernel
Сводка сокетов по состояниям; рост SYN-SENT указывает на потерю SYN или фаервол
ss -s; ss -tan state syn-sent | wc -l
#troubleshooting#network#performance#debug
Ищет узел падения PMTU; ping -M do запрещает фрагментацию для поиска blackhole MTU
tracepath -n <host>; ping -M do -s 1472 -c2 <host>
#troubleshooting#network#dns#debug
Показывает реальный src/интерфейс к адресу; записи FAILED означают проблему L2/ARP
ip route get <ip>; ip neigh show | grep -E 'FAILED|INCOMPLETE'
#troubleshooting#network#debug
TCP-SYN traceroute проходит фильтрацию ICMP; nc -zv подтверждает открытый порт
traceroute -T -p 443 <host>; nc -zv <host> 443
#troubleshooting#network#security#debug
Привязывает хост к конкретному IP для теста бэкенда с сохранением SNI и Host
curl -sv --resolve <host>:443:<ip> https://<host>/healthz
#troubleshooting#network#dns#debug
Одноразовый под для резолва имён в кластере; проверяет CoreDNS и сервис kube-dns
kubectl run dnsutils --image=tutum/dnsutils -it --rm --restart=Never -- nslookup kubernetes.default
#troubleshooting#k8s#dns#debug
Бьёт прямо в clusterIP CoreDNS; note: ndots:5 порождает лишние запросы для коротких имён
dig +short @$(kubectl -n kube-system get svc kube-dns -o jsonpath='{.spec.clusterIP}') <name>.<ns>.svc.cluster.local
#troubleshooting#k8s#dns#debug
Смотрит Corefile (forward/cache) и логи на предмет SERVFAIL и ошибок upstream
kubectl -n kube-system get cm coredns -o yaml; kubectl -n kube-system logs deploy/coredns --tail=50
#troubleshooting#k8s#dns#observability
Оценивает поддерживаемые версии TLS и шифры; отмечает слабые и устаревшие наборы
nmap --script ssl-enum-ciphers -p 443 <host>
#troubleshooting#tls#security#network
Показывает полную цепочку с верным SNI; строка Verify ловит отсутствие промежуточных
openssl s_client -connect <host>:443 -servername <host> -showcerts 2>/dev/null | grep -E 'Verify|s:|i:'
#troubleshooting#tls#security#debug
Перебирает много хостов и печатает 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
#troubleshooting#tls#security#monitoring
Декодирует payload для проверки exp/iss/aud; note: чинит base64url, подпись не проверяет
cut -d. -f2 <<<"$JWT" | tr '_-' '/+' | base64 -d 2>/dev/null | jq .
#troubleshooting#security#secrets#api
Перечисляет сервисы и методы через рефлексию; -plaintext отключает TLS для отладки
grpcurl -plaintext <host>:<port> list; grpcurl -plaintext <host>:<port> describe <svc>
#troubleshooting#network#api#debug