DevOps для ДевоПсов
Открыть в Telegram
Самые актуальные материалы по DevOps на русском и английском языке Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Больше3 182
Подписчики
Нет данных24 часа
-57 дней
-1830 дней
Загружаем данные
Похожие каналы
Облако тегов
Входящие и исходящие упоминания
---
---
---
---
---
---
Привлечение подписчиков
ноябрь '26нояб. '26
ноябрь '26
+2
в 0 каналах
октябрь '26
+20
в 0 каналах
Get PRO
сентябрь '26
+18
в 1 каналах
Get PRO
август '26
+13
в 0 каналах
Get PRO
июль '26
+9
в 0 каналах
Get PRO
июнь '26
+13
в 0 каналах
Get PRO
май '26
+32
в 0 каналах
Get PRO
апрель '26
+38
в 4 каналах
Get PRO
март '26
+34
в 3 каналах
Get PRO
февраль '26
+6
в 0 каналах
Get PRO
январь '26
+16
в 0 каналах
Get PRO
декабрь '25
+18
в 0 каналах
Get PRO
ноябрь '25
+32
в 0 каналах
Get PRO
октябрь '25
+17
в 0 каналах
Get PRO
сентябрь '25
+17
в 1 каналах
Get PRO
август '25
+14
в 0 каналах
Get PRO
июль '25
+8
в 0 каналах
Get PRO
июнь '25
+12
в 0 каналах
Get PRO
май '25
+24
в 0 каналах
Get PRO
апрель '25
+33
в 1 каналах
Get PRO
март '25
+35
в 2 каналах
Get PRO
февраль '25
+37
в 1 каналах
Get PRO
январь '25
+15
в 0 каналах
Get PRO
декабрь '24
+11
в 0 каналах
Get PRO
ноябрь '24
+24
в 0 каналах
Get PRO
октябрь '24
+24
в 0 каналах
Get PRO
сентябрь '24
+27
в 0 каналах
Get PRO
август '24
+30
в 0 каналах
Get PRO
июль '24
+39
в 1 каналах
Get PRO
июнь '24
+25
в 1 каналах
Get PRO
май '24
+32
в 0 каналах
Get PRO
апрель '24
+22
в 0 каналах
Get PRO
март '24
+44
в 0 каналах
Get PRO
февраль '24
+18
в 0 каналах
Get PRO
январь '24
+25
в 0 каналах
Get PRO
декабрь '23
+22
в 0 каналах
Get PRO
ноябрь '23
+25
в 0 каналах
Get PRO
октябрь '23
+23
в 0 каналах
Get PRO
сентябрь '23
+16
в 0 каналах
Get PRO
август '23
+39
в 0 каналах
Get PRO
июль '23
+40
в 0 каналах
Get PRO
июнь '23
+34
в 0 каналах
Get PRO
май '23
+40
в 0 каналах
Get PRO
апрель '23
+77
в 0 каналах
Get PRO
март '23
+48
в 0 каналах
Get PRO
февраль '23
+38
в 0 каналах
Get PRO
январь '23
+62
в 0 каналах
Get PRO
декабрь '22
+93
в 0 каналах
Get PRO
ноябрь '22
+96
в 0 каналах
Get PRO
октябрь '22
+101
в 0 каналах
Get PRO
сентябрь '22
+256
в 0 каналах
Get PRO
август '22
+658
в 0 каналах
Get PRO
июль '22
+554
в 0 каналах
Get PRO
июнь '22
+1 059
в 0 каналах
Get PRO
май '22
+118
в 0 каналах
Get PRO
апрель '22
+130
в 0 каналах
Get PRO
март '22
+94
в 0 каналах
Get PRO
февраль '22
+1 952
в 0 каналах
| Дата | Привлечение подписчиков | Упоминания | Каналы | |
| 15 ноября | 0 | |||
| 14 ноября | +1 | |||
| 13 ноября | 0 | |||
| 12 ноября | 0 | |||
| 11 ноября | 0 | |||
| 10 ноября | 0 | |||
| 09 ноября | 0 | |||
| 08 ноября | 0 | |||
| 07 ноября | +1 | |||
| 06 ноября | 0 | |||
| 05 ноября | 0 | |||
| 04 ноября | 0 | |||
| 03 ноября | 0 | |||
| 02 ноября | 0 | |||
| 01 ноября | 0 |
Посты канала
Успешная сборка PR не делает артефакт доверенным
Сборка PR из fork прошла, а следующий workflow скачивает её артефакт с правами записи. Если он запускает полученный бинарник, автор PR получает выполнение кода уже в привилегированном контексте.
В примере GitHub Security Lab сборка идёт через непривилегированный pull_request. Workflow, запущенный по workflow_run, получает только actions:read и pull-requests:write. Он читает номер PR как данные и оставляет заданный комментарий.
Проверьте permissions, контекст события и каждый шаг потребителя. В примере артефакт берут из конкретного workflow_run.id, распаковывают в runner.temp/pr, вне workspace, а номер PR проверяют: он должен быть целым числом. Изоляция каталога сама по себе не делает содержимое безопасным для исполнения.
Успешный run не меняет происхождение файла. Не запускайте код из такого артефакта в привилегированном workflow. Даже после проверки на целое число номер по-прежнему задаёт автор PR, поэтому его используют только для ограниченного действия.
| 2 | Сброс TCP при переполнении не добавляет мощности
Во время всплеска соединений listener не успевает принимать их, а клиенты получают сбросы. Проверьте tcp_abort_on_overflow: эта настройка Linux включает сброс соединений, когда слушающий сервис не справляется с их приёмом.
По умолчанию она выключена. После краткого всплеска с переполнением соединение может восстановиться. Включение сбросов меняет исход для клиента, но не заставляет демон быстрее вызывать accept и не увеличивает ёмкость сервиса.
Сначала сопоставьте активное значение настройки, состояние очереди listener и ошибки клиентов под контролируемой нагрузкой. Проверьте, что тормозит приём в приложении. Очередь соединений, ожидающих accept, не следует путать с SYN backlog или таблицей conntrack.
В tcp(7), Linux man-pages 6.19 прямо предупреждают о вреде для клиентов. Опция описана с Linux 2.4. Сначала стоит исчерпать возможности ускорить приём в самом демоне. | 179 |
| 3 | Условная job исчезла — pipeline не создаётся
Job исключили через rules, а другая job всё ещё ссылается на неё в needs. По умолчанию такая зависимость обязательна, и GitLab проверяет её ещё до старта pipeline.
optional со значением true разрешает отсутствие нужной job. Если она есть, зависимая job ждёт её завершения. Если её нет, остаются остальные needs. Когда все зависимости необязательны и все отсутствуют, job стартует сразу, без ожидания своей стадии.
Проверьте оба варианта условий в CI Lint и тестовых pipeline. Сопоставьте состав jobs, порядок запуска и получение нужных артефактов. Иначе необязательная связь может незаметно убрать барьер перед деплоем.
optional не создаёт недостающие артефакты и не разрешает игнорировать сбой присутствующей job. С needs:parallel:matrix его не совмещают. Семантика — в справочнике GitLab, с учётом версии вашей установки. | 217 |
| 4 | TCP_USER_TIMEOUT не ускоряет повторы пакетов
Данные отправлены, подтверждения не приходят, а приложение продолжает ждать. В Linux с 2.6.37 TCP_USER_TIMEOUT задаёт предел такого ожидания в миллисекундах. Он охватывает и данные в буфере, которые нельзя отправить из-за нулевого окна получателя.
При превышении положительного значения TCP закрывает соединение с ETIMEDOUT. Ноль оставляет системное значение. Опция действует только в синхронизированных состояниях TCP. Интервалы повторной передачи и отправки keepalive-проб она не меняет.
Проверьте, выставляет ли приложение опцию на нужном сокете и какой слой первым завершает ожидание. Ошибка запроса сама по себе не доказывает срабатывание TCP_USER_TIMEOUT. Слишком малый предел может оборвать соединение при временной сетевой задержке.
Это не общий таймер простоя. С SO_KEEPALIVE опция определяет срок закрытия при отказе keepalive. Границы описаны в tcp(7), Linux man-pages 6.19. | 231 |
| 5 | Нулевой lag MySQL может скрывать обрыв связи
Реплика показывает Seconds_Behind_Source со значением 0, хотя новые данные не приходят. В MySQL 8.0 это возможно после обрыва сети, пока receiver ещё не обнаружил потерю соединения. На обнаружение влияет replica_net_timeout.
Receiver получает события, applier применяет их из relay log. Если applier догнал уже полученное, ноль не доказывает, что реплика получила всё с source. Это ограничение описано в руководстве MySQL 8.0.
Проверьте отдельно Replica_IO_Running и Replica_SQL_Running, затем Last_IO_Error и Last_SQL_Error. Сравните несколько снимков состояния и продвижение позиций получения и применения с source. Одного значения lag для вывода о свежести данных недостаточно.
События со старыми timestamps могут давать скачки между нулём и большим lag. Уменьшение сетевого таймаута меняет обнаружение обрыва, но не восстанавливает поток событий. | 257 |
| 6 | Контейнеры готовы, а Pod — ещё нет
Контейнеры прошли проверку готовности, но Pod остаётся неготовым. Проверьте readinessGates: Kubernetes требует, чтобы все перечисленные там условия тоже были True. Отсутствующее условие считается False.
В этом случае kubelet выставляет Ready=False с причиной ReadinessGatesNotReady. Внешний контроллер должен записывать своё условие через status API. Имя gate в спецификации само по себе готовность не подтверждает.
Сопоставьте список gates с условиями Pod, затем проверьте состояние ready в EndpointSlice. У контроллера должны быть права обновлять статус и логика обработки новых Pod. Иначе rollout может застрять.
Readiness gate участвует в обычной маршрутизации Service по готовности. Это не гарантия отсутствия трафика от любых потребителей endpoints или при специальных настройках Service. | 276 |
| 7 | Пропавшая серия Prometheus — это не ноль
Серия исчезла из мгновенного запроса, а график рисует ноль. Сначала проверьте сам результат запроса. После отметки stale селектор не возвращает значение этой серии. Явный sample со значением 0 возвращается как число. Подстановка нуля скрывает эту разницу.
Сравните табличный результат в несколько моментов времени, состояние target и up. По одному лишь отсутствию серии нельзя отличить пропуск метрики экспортёром от удаления target или проблемы сбора. up помогает проверить сбор, но не объясняет каждый пропуск.
Lookback по умолчанию равен пяти минутам. Это не универсальная задержка исчезновения серии. У экспортёров с собственными timestamps последнее значение может сохраняться в этом окне. На поведение влияет track_timestamps_staleness. Детали — в разделе Staleness. | 277 |
| 8 | Тысяча найденных уязвимостей — это отчёт для аудита или реальная защита? И нужен ли вообще AppSec, если код всё чаще пишет ИИ?
Эти и другие вопросы честно и по делу обсудим 18 ноября на Positive AppSec Conf — первой конференции Positive Technologies по безопасной разработке. Площадка — Кибердом в Москве, для удалённых участников будет онлайн-трансляция.
О чём говорим:
🤖 ИИ-генерация кода: где заканчивается ускорение разработки и начинаются уязвимости в проде
🔍 SAST/DAST/IaC-сканеры: что реально снижает риски, а что осталось формальностью для аудита
⛓️ атаки через цепочку поставок и open-source-библиотеки
😎 переход от подсчёта находок к оценке эксплуатируемости и бизнес-риска
💸 обоснование бюджета на AppSec через риски и окупаемость
📖Positive Education представит программы по безопасной разработке, в том числе спринт «Безопасная разработка с ИИ-агентами» — о проверке кода и защите агентных приложений
Для кого: AppSec- и DevSecOps-специалисты, архитекторы ИБ, CISO и технические директора — для каждой роли в программе есть свои темы.
Формат: офлайн + онлайн, участие бесплатное, регистрация проходит через подтверждение.
Зарегистрироваться | 273 |
| 9 | Ротация build secret не сбрасывает кеш Docker
Секрет сборки обновили, а шаг с загрузкой артефакта взят из кеша. Это допустимо: содержимое build secret не входит в контрольную сумму кеша. При неизменных остальных входах прежний результат RUN может использоваться снова. ID секрета и путь монтирования в расчёте участвуют.
В примере Docker для принудительного пересчёта объявлен несекретный ARG CACHEBUST в нужной стадии. Меняйте его значение для зависимого RUN. Передать произвольный необъявленный аргумент сборки недостаточно. Сам секрет в build args не переносите.
В тестовой сборке проверьте, что нужный шаг выполнился заново, затем проверьте полученный артефакт и доступ к источнику. Промах кеша подтверждает пересчёт, но не успешную аутентификацию. Ротация учётных данных сама по себе не означает, что содержимое артефакта должно измениться. | 280 |
| 10 | inotify потерял события: пора сверять состояние
После потока изменений файлов кеш наблюдателя расходится с диском. У inotify ограничена очередь. Лишние события теряются, а IN_Q_OVERFLOW с wd=-1 сообщает о переполнении. Достроить пропущенную историю по оставшимся событиям нельзя.
Обработчик должен сверить состояние с файловой системой и пересобрать нужную часть кеша или весь кеш. Наблюдения восстанавливают по необходимости. Закрыть и заново создать экземпляр — один из вариантов, а не обязательный шаг после каждого overflow.
На стенде вызовите переполнение и сравните восстановленный кеш с обходом дерева. Один обход при продолжающихся изменениях не гарантирует согласованности. inotify не рекурсивен и не позволяет надёжно считать события.
Удалённые изменения сетевой ФС и записи через mmap имеют отдельные ограничения. Они разобраны в inotify(7), Linux man-pages 6.19. | 293 |
| 11 | Реплика отвечает. Можно верить результату?
Доступность узла не гарантирует актуальность данных. А наличие резервной копии не определяет время восстановления. На конференции HighLoad++ 2026 выбрали три разбора для тех, кто эксплуатирует распределенные системы.
Андрей Комягин, STM Labs, разберет резервное копирование MongoDB и Cassandra объемом 100+ ТБ: влияние на дисковую нагрузку и риски несогласованности данных при восстановлении.
Денис Бережной, Сбер, разберет диагностику узких мест под нагрузкой: в каком порядке смотреть метрики приложений, баз и брокеров и когда переходить к профилированию.
Андрей Бородин разберет чтение с реплик PostgreSQL: аномалии изоляции и поиск актуального мастера.
Подборка для эксплуатации БД: резервное копирование, диагностика производительности и границы чтения с реплик.
30 ноября и 1 декабря 2026, кампус СКОЛКОВО, Москва. Очно и онлайн.
Посмотреть программу
#реклама
О рекламодателе | 282 |
| 12 | Маленькой таблице тоже может понадобиться freezing
Таблица почти не меняется, а PostgreSQL запускает для неё autovacuum против XID wraparound. Возраст XID считается в транзакциях, а не в днях или байтах. Даже небольшой таблице нужно замораживание старых версий строк, чтобы они оставались видимыми после оборота счётчика.
В PostgreSQL 18 такая защита срабатывает и при отключённом обычном autovacuum. Для оценки возраста различайте уровни: age(datfrozenxid) относится к базе, age(relfrozenxid) — к отношению внутри проверяемой базы. У таблицы учитывайте и её TOAST.
Проверьте, что может мешать заморозке. После обслуживания смотрите, как изменился возраст, и читайте vacuum-логи. Наличие worker само по себе не доказывает, что граница заморозки продвинулась.
Размер влияет на стоимость обслуживания. Критерии freezing и сведения о продвижении relfrozenxid разобраны в документации PostgreSQL 18. Во время vacuum следите за I/O и нагрузкой. | 308 |
| 13 | Persistent догоняет пропуски одним запуском
Пока сервер был выключен, календарная задача могла пропустить несколько запусков. Для таймера с OnCalendar параметр Persistent=true сохраняет на диске время последнего срабатывания. При активации таймера systemd проверяет, должен ли был запускаться сервис, пока таймер был неактивен.
Если да, следует одна догоняющая активация. Три пропущенных интервала не превращаются в три задания. RandomizedDelaySec продолжает действовать, поэтому запуск может произойти с задержкой. Уже активный сервис таймер не перезапускает.
На тестовом unit проверьте фактические настройки, остановите таймер на время календарного события и включите снова. Сопоставьте журнал таймера и сервиса с результатом самой задачи.
Persistent действует только с OnCalendar и по умолчанию выключен. Сон и гибернация имеют отдельные правила догоняющего запуска. Они описаны вместе с Persistent в руководстве systemd.timer. | 313 |
| 14 | ImagePullBackOff: до пяти минут между попытками
Контейнер остаётся в Waiting с причиной ImagePullBackOff, когда Kubernetes не может скачать образ. Среди возможных причин — неверное имя образа или отсутствие imagePullSecret для приватного registry. По одному статусу нельзя определить причину сбоя.
Kubelet продолжает попытки, увеличивая паузу между ними. В документации Kubernetes указан предел задержки 300 секунд. Это предел паузы, а не срок восстановления или общий таймаут загрузки.
Начните с причины ожидания и событий Pod. Сверьте ссылку на образ и учётные данные. Секреты из imagePullSecrets должны находиться в том же namespace, что и Pod.
После исправления проверьте, что образ действительно скачан и контейнер запустился. Ожидание следующей попытки ошибку в имени или доступе не устраняет. | 361 |
| 15 | Для проверки подписи образа задайте ожидаемого подписанта
При identity-based проверке Cosign нужны ожидаемая certificate identity и OIDC issuer. Криптографически корректная подпись от произвольного участника ещё не подтверждает, что образ выпустил нужный вам автор.
В стандартном payload подписи образа есть digest. По умолчанию Cosign сверяет его с проверяемым образом. Опция --check-claims=false отключает проверку claims, сохраняя проверку подписи и payload относительно ключа. Документация допускает её для других форматов payload. Отключая claims ради «починить verify», вы убираете часть проверки связи подписи с артефактом.
Ограничьте identity и issuer ожидаемыми значениями, проверяйте точный digest. Для provenance или SBOM нужна отдельная политика проверки attestations. Успешная проверка подписи сама по себе не устанавливает безопасность кода внутри образа. Какие данные проверяет Cosign. | 375 |
| 16 | Открытый файл живёт после удаления имени
Лог удалили, а процесс продолжает в него писать. В POSIX-семантике unlink убирает имя из файловой системы. Если это была последняя жёсткая ссылка, но файл ещё открыт, он сохраняется до закрытия последнего дескриптора.
Уже открытый fd продолжает давать доступ к содержимому. Поэтому удаление имени не отзывает такой доступ и не гарантирует немедленного возврата занятого места файловой системе.
При расхождении занятого места и суммы видимых файлов проверьте открытые удалённые файлы у процессов. У df и du бывают и другие причины расхождений. Для логов выбирайте штатную ротацию с переоткрытием файла и проверяйте, что процесс действительно закрыл старый fd. Слепой truncate через /proc может повредить данные. Что удаляет unlink и когда завершается жизнь файла. | 362 |
| 17 | Refresh-only принимает drift в state
Если ресурс изменили вне Terraform, например во время инцидента, нужно обновить и записи Terraform. Режим refresh-only позволяет подготовить обновление state и outputs корневого модуля по фактическому состоянию remote objects. После применения такого плана state и outputs отражают эти внешние изменения.
Этот режим не возвращает инфраструктуру к HCL. Если конфигурацию оставить прежней, следующий обычный plan снова может предложить изменения, чтобы привести ресурс к описанному состоянию. Поэтому сначала определите желаемое состояние ресурса.
Refresh-only доступен с Terraform 0.15.4. Он несовместим с -refresh=false: эта опция отключает чтение внешних изменений, на котором режим и построен.
Сравните внешнее изменение, предложенное обновление state и следующий обычный plan. Сохранённый plan-файл храните как потенциально секретный артефакт: чувствительные данные могут попасть туда открытым текстом, даже если терминал их скрыл. Режимы планирования Terraform и границы refresh-only. | 360 |
| 18 | S3 отвечает 409 и 412 по разным причинам
Условная запись с If-None-Match: * проходит, если текущего объекта с таким ключом нет. Если объект уже существует, Amazon S3 возвращает 412 Precondition Failed. В versioned bucket запись также пройдёт, если текущая версия — delete marker.
При конкурентном удалении возможен 409 Conflict. Способ повтора зависит от API: PutObject можно повторить, а после 409 на CompleteMultipartUpload нужно начать multipart upload заново через CreateMultipartUpload. Повтор одного только завершающего запроса не заменяет этот шаг.
Перед повторной загрузкой проверьте условие, API и состояние ключа. Для If-Match S3 сравнивает ETag. Это отдельное условие, а сам ETag нельзя считать универсальной checksum.
На тестовом ключе проверьте итоговый объект и его версию. В случае 412 убедитесь, что прежнее содержимое сохранилось. Учитывайте IAM-права. Для условных записей запрос нужно подписать SigV4. Это поведение AWS S3, его нельзя автоматически переносить на все S3-compatible хранилища. Условные записи и конфликты в S3. | 363 |
| 19 | Для tail sampling все spans trace должны попасть в один Collector
Распределять batches по очереди между Collector недостаточно. Все spans одного trace должны попасть в один экземпляр с tail sampling, иначе решение принимается по неполным данным.
В документации OpenTelemetry предложены два слоя: сначала Collectors с load balancing exporter, затем экземпляры с tail sampling. Маршрутизация должна сохранять привязку по trace_id. Сам processor хранит spans в памяти, пока ждёт решения, поэтому рост входящего потока требует проверки памяти и ранних потерь.
В pipeline tail sampling пересобирает batches и теряет исходный context. Процессоры, которым он нужен, например k8sattributes, должны отработать раньше. На тестовом trace проверьте путь spans из разных batches к одному sampling instance, в том числе после изменения топологии или перезапуска. Масштабирование и ограничения tail sampling. | 345 |
| 20 | Сервис с PrivateTmp видит другой /tmp
Файл есть в /tmp хоста, а сервис его не находит. В unit systemd проверьте PrivateTmp: эта настройка создаёт пространство имён файловой системы с отдельными временными каталогами. После остановки сервиса созданные им временные файлы удаляются.
Режимы true и disconnected различаются. При true данные остаются на backing storage в /tmp и /var/tmp хоста. Через JoinsNamespaceOf несколько units могут использовать общее приватное пространство имён. Режим disconnected использует отдельный tmpfs и не объединяет его таким способом. При DefaultDependencies=no, без RequiresMountsFor=/WantsMountsFor= для /var/ и без RootDirectory=/RootImage= каталог /var/tmp остаётся хостовым.
PrivateTmp не является полным sandbox. Доступность зависит от namespaces и прав. В user units неявно включается PrivateUsers, нужна поддержка unprivileged user namespaces. Проверяйте видимость тестового файла из unit и снаружи на своём Linux-стенде. Режимы и ограничения PrivateTmp. | 323 |
