MiddleDevOps Engineer > Контейнеры и доставка > Мониторинг, логирование и observability
Короткий ответ Кроме повышения порога, против flapping помогают: увеличение for (устойчивость условия), использование гистерезиса (разные пороги для срабатывания и для сброса), агрегация метрики по более широкому окну или по группе инстансов вместо одного, а также группировка/подавление повторных уведомлений в Alertmanager через group_interval и repeat_interval. Как это работает подробнее flapping обычно возникает, когда метрика колеблется около одного и того же порога — алерт то срабатывает, то гаснет при каждом пересечении. Гистерезис решает это через два разных условия: например, алерт срабатывает при превышении 90%, но гаснет только при падении ниже 70%, что создаёт "мёртвую зону" и не даёт метрике многократно пересекать одну и ту же границу. Пример кода Что использовать на практике Практика. если метрика по природе шумная (например, latency отдельного инстанса под низкой нагрузкой), часто эффективнее агрегировать её по большему числу источников (avg by (service) вместо by (instance)) или удлинить окно аг
alert-flappingalerting
SeniorPython Developer > Основы Python > CI/CD и безопасность поставки
Короткий ответ Безопасный пайплайн строится на принципе наименьших привилегий для секретов, контроле зависимостей (lock-файлы, сканирование CVE, закрепление сторонних Action по хешу коммита, а не по тегу) и верификации артефактов (подписание образов, проверка подписи перед деплоем); глубина защиты зависит от критичности системы и требований компании. Как это работает подробнее секреты в CI хранятся в зашифрованном виде и инжектируются в job как переменные окружения только при выполнении — риск в том, что любой код в job, включая сторонние Actions, имеет к ним доступ; supply-chain атака возможна через скомпрометированный пакет, сторонний Action, закреплённый по мутируемому тегу, или PR из форка. Пример кода Что использовать на практике Рекомендация. закрепляют сторонние Actions по полному commit SHA; ограничивают доступ к продовым секретам только для workflow из защищённой ветки; сканируют зависимости (pip-audit, Dependabot) на известные CVE; для более высокого уровня зрелости подписывают образы (cosign) и про
artifact-signingautomation
SeniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Единого правильного решения нет: типичный подход — слой-ориентированная система экспериментов (overlapping layers / orthogonal experiments), где пользователь независимо рандомизируется в разных 'слоях' (например, UI-слой, алгоритмический слой, монетизационный слой) с централизованным логированием exposure и системой проверки конфликтов перед запуском. Как это работает подробнее Как это работает: каждый слой использует независимый хэш-сид для рандомизации, так что принадлежность к варианту в одном слое статистически не коррелирует с принадлежностью в другом; это позволяет множеству тестов идти параллельно на одной и той же аудитории без явного пересечения трафика 1:1. Пример структуры логирования exposure (ClickHouse): Проверка на старте нового теста: SQL-запрос, пересекающий список активных experiment_id в каждом слое с матрицей известных конфликтов, должен возвращать пусто перед запуском. Пример кода Что использовать на практике На практике: критически важны: единый exposure log (кто, когда, в
ab-testingexperiment-design
JuniorData Analyst > SQL и данные > Python для анализа данных
Короткий ответ Сводку строят через (df.isna().mean() * 100).sort_values(ascending=False), что сразу даёт процент пропусков по каждому столбцу, упорядоченный от самого проблемного к наименее проблемному. Как это работает подробнее isna() даёт булев DataFrame, mean() по столбцам (axis=0 по умолчанию) считает долю True, так как True интерпретируется как 1, а False как 0; умножение на 100 переводит долю в проценты, а sort_values упорядочивает результат. Пример кода Что использовать на практике На практике: такую сводку обычно делают первым шагом при знакомстве с новой таблицей, чтобы сразу расставить приоритеты очистки данных; полезно также вывести её как DataFrame с двумя столбцами (имя столбца и процент), а не как Series, если планируется дальше использовать в отчёте. Проверка: для столбца 'a' ожидается 50.0, для 'b' — 25.0, для 'c' — 0.0, и порядок вывода должен быть именно a, b, c по убыванию доли пропусков. Подводные камни Частые ошибки: считают долю пропусков от неправильного знаменателя, например, от числа
data-qualitymissing-data
MiddlePerformance Marketer > Google Ads > Сквозная аналитика и отчётность
Короткий ответ Скрипт по расписанию обращается к API каждой платформы, получает данные за нужный период, приводит их к единому формату и записывает в промежуточное хранилище, откуда строится отчёт или дашборд. Как это работает подробнее Для каждой платформы используется её API с OAuth-авторизацией; скрипт запрашивает нужные метрики и измерения, обрабатывает ответ (обычно JSON) и записывает строки в унифицированную таблицу с одинаковыми названиями полей. Кроме расписания запуска важно учитывать лимиты API каждой платформы (количество запросов в сутки), чтобы при добавлении новых отчётов скрипт не начал упираться в эти ограничения. Пример кода Что использовать на практике Практика. На практике важно предусмотреть обработку ошибок и повторные попытки при сбоях API, логирование и алерт при неудачном запуске, а также отслеживать токены доступа, которые могут истекать. Для надёжности рекомендуется хранить не только агрегированные, но и «сырые» ответы API за последние несколько дней, чтобы можно было пересчитать отч
apiautomation
JuniorDevOps Engineer > Контейнеры и доставка > Мониторинг, логирование и observability
Короткий ответ Prometheus состоит из scrape-компонента (сборщик, который опрашивает цели), локальной time series database (TSDB) для хранения собранных рядов и движка PromQL для запросов; отдельно работает Alertmanager, который получает сработавшие правила алертов и занимается их маршрутизацией. Как это работает подробнее каждый scrape создаёт новую точку для каждого временного ряда (комбинация имени метрики и набора labels) и дописывает её в TSDB — специализированное хранилище, оптимизированное под append-only запись и сжатие похожих последовательных значений. Запросы PromQL читают данные напрямую из TSDB на том же сервере. Пример кода Что использовать на практике Практика. один инстанс Prometheus 2.x хранит данные локально на диске (по умолчанию до 15 дней retention) и не реплицируется "из коробки" — для долгосрочного хранения и высокой доступности используют remote_write в системы типа Thanos, Mimir или VictoriaMetrics. Начинающему важно понимать, что Prometheus сам по себе — это один процесс с локальным д
monitoringobservability
JuniorPerformance Marketer > Google Ads > Рекламные платформы и форматы
Короткий ответ Ad Rank определяет допуск и позицию объявления в поисковом аукционе Google. На него влияют ставка, качество объявления и страницы, пороги рейтинга, конкуренция и контекст поиска; произведение ставки на Quality Score — лишь упрощённая аналогия. Как это работает подробнее Более высокий рейтинг может дать лучшую позицию и иногда снизить фактическую цену клика относительно максимальной ставки. Однако высокая ставка или качество по отдельности не гарантируют победу. Ставка. Задаёт предел или параметры участия в аукционе. Качество и контекст. Влияют на полезность объявления в конкретном поиске. Что использовать на практике Сопоставляй долю показов и верхних позиций с качеством объявления и конкуренцией; сначала исправляй релевантность. Подводные камни Не представляй Ad Rank как точную формулу «ставка × Quality Score»: это не полное описание текущего аукциона.
ad-rankauction
JuniorSMM Manager > Общее > Контент и форматы
Короткий ответ CTA должен прямо называть конкретное действие и место, где его совершить (например, «пишите в direct», «ссылка в шапке профиля»), а не быть расплывчатым; формулировка зависит от того, где физически находится кнопка/ссылка на конкретной площадке. Как это работает подробнее призыв к действию закрывает пост, переводя внимание читателя от интереса к конкретному следующему шагу; без него человек может заинтересоваться, но не понять, что делать дальше. Что использовать на практике Рекомендация. CTA должен соответствовать реальному пути пользователя на площадке — если ссылка кликабельна только в шапке профиля, а не в тексте посте, CTA должен это учитывать и направлять именно туда. Подводные камни Риск. писать общий CTA «узнать больше» без указания, где и как; указывать в тексте ссылку, которая на самом деле не кликабельна на этой площадке; забывать CTA вообще, оставляя пост без явного следующего шага.
audience-segmentationcall-to-action
MiddleData Analyst > SQL и данные > SQL
Короткий ответ Нужно использовать UNNEST(tags) в FROM/CROSS JOIN, что превращает каждый элемент массива в отдельную строку, после чего можно обычным GROUP BY посчитать частоту каждого тега. Как это работает подробнее UNNEST в BigQuery — табличная функция, которая принимает массив (ARRAY) и возвращает по одной строке на каждый его элемент; при использовании как CROSS JOIN UNNEST(tags) AS tag каждая исходная строка заказа «размножается» на число тегов в её массиве, сохраняя остальные поля заказа неизменными в каждой копии. Пример кода Что использовать на практике Практика. это стандартный паттерн для анализа данных, хранящихся в полуструктурированном/вложенном виде (массивы, структуры) — частый случай в BigQuery для событийных и JSON-подобных данных. Аналогичная операция в PostgreSQL называется unnest(), а в ClickHouse — arrayJoin(), с похожей, но не идентичной семантикой. Проверка. Проверка: сумма orders_with_tag по всем тегам должна быть не меньше количества заказов хотя бы с одним тегом (может быть больше, т
arraysbigquery
JuniorPython Developer > Основы Python > Управление памятью
Короткий ответ Основной механизм в CPython — подсчёт ссылок: объект удаляется сразу, когда счётчик ссылок падает до нуля; дополнительный циклический сборщик мусора периодически удаляет группы объектов, ссылающихся друг на друга циклически, которые иначе никогда не достигнут нулевого refcount. Как это работает подробнее Каждый объект хранит счётчик ссылок; создание новой ссылки увеличивает его, удаление переменной — уменьшает. При достижении нуля объект освобождается немедленно. Для циклических ссылок (A ссылается на B, B — на A) счётчик никогда не упадёт до нуля сам по себе — этим занимается модуль gc. Пример кода Что использовать на практике Практика. Для большинства кода управление памятью прозрачно; явный gc.collect() иногда вызывают в тестах или после операций, создающих много временных циклических структур, чтобы детерминированно освободить память перед замером. Подводные камни Риски. Считают, что del obj всегда немедленно освобождает память, забывая про циклы; либо расставляют gc.collect() повсеместно «
garbage-collectionmemory-management