MiddlePerformance Marketer > Google Ads > Сквозная аналитика и отчётность
Короткий ответ Алерт стоит строить не на абсолютном пороге, а на относительном отклонении от скользящей базы (например, среднего за предыдущие N дней) с минимальным порогом по объёму, чтобы не реагировать на естественные колебания маленьких кампаний. Как это работает подробнее Например, алерт срабатывает, если расход за день превышает среднее за последние 7 дней более чем на X% и абсолютный расход выше минимального порога, что исключает шум на кампаниях с маленьким бюджетом, где колебания в процентах естественно велики. Стоит также предусмотреть отдельные пороги для разных по размеру кампаний или каналов, так как один и тот же процент отклонения может быть нормальным для крупного канала и критичным для совсем нового. Пример кода Что использовать на практике Практика. На практике важно протестировать пороги алерта на исторических данных перед включением в продуктив, чтобы оценить, сколько ложных срабатываний он бы дал за последние несколько месяцев, и скорректировать чувствительность. Полезно разделять алерты
alertinganomaly-detection
MiddleDevOps Engineer > Контейнеры и доставка > Мониторинг, логирование и observability
Короткий ответ Burn rate — это скорость расхода error budget относительно номинальной скорости, допустимой для выполнения SLO за период; используют два алерта с разными окнами и порогами — "fast burn" (короткое окно, высокий порог, для быстрой реакции на серьёзную деградацию) и "slow burn" (длинное окно, более низкий порог, для постепенных, но системных проблем), чтобы ловить оба типа деградации без избыточного шума. Как это работает подробнее если SLO — 99.9% за 30 дней, то "нормальная" скорость расхода budget — 0.1% ошибок равномерно растянутых на 30 дней. Burn rate 1x означает, что budget закончится ровно к концу периода при неизменной скорости; burn rate 10x означает, что budget истощится в 10 раз быстрее (то есть примерно за 3 дня), что требует немедленной реакции. Короткое окно (например, 5–10 минут) хорошо ловит резкие всплески, но может шумно реагировать на короткие флуктуации; длинное окно (1–6 часов) устойчиво к шуму, но реагирует медленнее. Пример кода Что использовать на практике Практика. стандар
alertingburn-rate
MiddleDevOps Engineer > Контейнеры и доставка > Реестры и распространение образов
Короткий ответ docker login REGISTRY сохраняет учётные данные (токен) в ~/.docker/config.json; для безопасного хранения вместо явного пароля в этом файле нужно использовать credential helper (например, docker-credential-pass/облачный helper), а в Kubernetes для pull образов используется отдельный объект imagePullSecrets. Как это работает подробнее после docker login Docker CLI либо сохраняет (обычно в закодированном, но не зашифрованном виде) токен авторизации прямо в config.json, либо, если настроен credential helper, делегирует хранение секрета специализированному хранилищу ОС (keychain, pass, облачный secret manager) и сохраняет в config.json только ссылку на него. При каждом docker pull/docker push клиент автоматически подставляет сохранённые данные для соответствующего хоста реестра. Пример кода Что использовать на практике Практика. в CI-пайплайнах учётные данные для реестра передают через секреты самой CI-системы (а не хранят в репозитории или прямо в Dockerfile), логинясь перед операциями push; в обла
container-imagescontainer-registry
MiddleDevOps Engineer > Контейнеры и доставка > Мониторинг, логирование и observability
Короткий ответ В конфигурации route задаются group_by (какие labels объединяют похожие алерты в одно уведомление), group_wait (сколько ждать перед первой отправкой группы, чтобы собрать связанные алерты), group_interval (пауза между обновлениями той же группы) и repeat_interval (как часто повторять уведомление, если проблема не решена); маршрутизация по receiver определяет, куда (Slack/PagerDuty/email) и для каких severity/team отправлять. Как это работает подробнее если одновременно срабатывает 20 алертов с одинаковым service и severity (например, все поды одного сервиса стали недоступны после сбоя узла), Alertmanager группирует их в одно уведомление согласно group_by: [service, alertname], а не отправляет 20 отдельных сообщений. group_wait даёт небольшую задержку (например, 30 секунд) перед первой отправкой, чтобы успеть собрать все связанные алерты, возникшие практически одновременно, в одну группу. Пример кода Что использовать на практике Практика. дерево route позволяет направлять критичные production-ал
alert-groupingalerting
MiddlePerformance Marketer > Google Ads > Серверный трекинг
Короткий ответ Дедупликация делается через общий уникальный идентификатор события (event_id/deduplication key), который генерируется один раз для конкретной покупки и передаётся в обоих событиях — и в пиксельном, и в серверном; площадка сопоставляет события с одинаковым ID и считает их одной конверсией. Как это работает подробнее При отправке события и с клиента (пиксель), и с сервера (CAPI) оба запроса должны содержать одинаковое значение поля дедупликации (например, event_id в Meta или transaction_id для GA4 Enhanced Ecommerce); система на стороне площадки/аналитики видит совпадающий идентификатор в двух источниках и объединяет их в одну запись, а не считает как два отдельных события. Пример кода Что использовать на практике Практика. На практике идентификатор обычно генерируется на сервере в момент создания заказа (например, ID транзакции в базе данных) и прокидывается как в код пикселя на странице «Спасибо», так и в серверный вызов API — важно, чтобы оба канала использовали именно это значение, а не собст
capiconversion-tracking
MiddlePython Developer > Основы Python > FastAPI и Pydantic
Короткий ответ Создаётся класс, наследующий BaseSettings, с полями-настройками и model_config = SettingsConfigDict(env_file='.env'); переменные окружения процесса по умолчанию имеют приоритет над значениями из .env-файла. Как это работает подробнее BaseSettings при инициализации читает значения в следующем порядке приоритета (для pydantic-settings v2): явно переданные аргументы, переменные окружения, значения из .env, значения по умолчанию в классе. Такой порядок позволяет держать .env для локальной разработки и переопределять конкретные значения через окружение в CI/production без изменения кода. Пример кода Что использовать на практике Практика. Настройки инстанцируют один раз (например, через @lru_cache на функции get_settings()) и внедряют в эндпоинты через Depends(get_settings), что упрощает подмену конфигурации в тестах через dependency_overrides. Подводные камни Риск. Коммитят .env с реальными секретами в репозиторий; создают Settings() прямо на уровне модуля при каждом импорте без кэширования, из-за ч
configurationenvironment-variables
MiddlePython Developer > Основы Python > Наблюдаемость и ресурсы
Короткий ответ Логируют структурированные события с явным списком полей, а не произвольные объекты целиком, применяют маскирование известных чувствительных полей (пароль, токен, номер карты) на уровне логирующего слоя, и исключают из логов сырые тела запросов с персональными данными или маскируют идентифицирующую часть. Как это работает подробнее В логирующий pipeline добавляют фильтр или процессор, который проходит по словарю логируемых полей и заменяет значения по списку ключей-паттернов (password, token, authorization, card_number) на маску вроде [REDACTED], прежде чем запись попадёт в обработчик вывода. Пример кода Что использовать на практике Практика. Удобно логировать структурированные события (structlog, python-json-logger) с заранее определённым набором полей вместо logger.info(str(request_object)), что снижает риск случайно залогировать весь объект запроса целиком вместе с заголовком Authorization; для персональных данных email/телефон можно частично маскировать. Подводные камни Риск. Логируют весь
loggingobservability
MiddleSMM Manager > Общее > Рекламные платформы и медиазакупка
Короткий ответ Минус-аудитории исключают из показа сегменты, которые точно не являются целью кампании (например, уже совершившие покупку, сотрудники компании, аудитория другой параллельной кампании); особенно важно это при ретаргетинге (исключить уже купивших) и при параллельных кампаниях на схожие сегменты (избежать каннибализации). Как это работает подробнее исключения задаются на уровне группы объявлений и работают аналогично таргетингу, но в обратную сторону — убирают заданный сегмент из потенциальной аудитории показа. Что использовать на практике Подход. исключения нужно пересматривать регулярно по мере появления новых сегментов (например, купивших в текущем месяце), а не настраивать один раз на старте и забывать. Пример. Кампания на привлечение новых подписчиков сервиса исключает аудиторию текущих пользователей (по списку email или пикселю оплативших). После настройки исключения доля «паразитного» расхода на уже существующих клиентов снижается, что видно по сокращению доли нецелевых конверсий в отчёте.
audience-targetingcampaign-optimization
MiddleSMM Manager > Общее > Репутация и кризис-коммуникации
Короткий ответ Нужно определить ключевые слова для отслеживания, выбрать инструменты мониторинга под бюджет и приоритетные площадки и настроить пороговые алерты с указанием, кто их получает — конкретный набор инструментов и порогов зависит от бюджета и масштаба бренда. Как это работает подробнее ручная проверка нескольких площадок несколько раз в день не масштабируется при росте числа каналов и объёма упоминаний, поэтому нужны автоматические инструменты с настроенными порогами уведомлений. Для бренда «КнижныйДвор» настроен алерт на рост упоминаний более чем в 3 раза относительно среднего за час, уведомление приходит дежурному менеджеру и его руководителю одновременно. Проверка: в учебном прогоне искусственного всплеска упоминаний алерт срабатывает и доходит до дежурного в течение нескольких минут. Что использовать на практике Практический подход. важно не просто подключить инструмент, а определить, какой всплеск считается нормальным шумом, а какой — сигналом для эскалации, и кто получает уведомление в нерабоч
alertingcommunity-management
MiddleSMM Manager > Общее > Публикация и кампании
Короткий ответ Нужно настроить автоматические уведомления сервиса автопостинга об ошибках публикации (в чат команды, а не только на почту, которую редко проверяют), а также регулярную ручную сверку «запланировано vs фактически опубликовано» хотя бы раз в день, не полагаясь только на отсутствие уведомлений как признак успеха. Как это работает подробнее большинство сервисов автопостинга поддерживают интеграции с мессенджерами или вебхуки для уведомлений об ошибках; дополнительно можно вести чек-лист или дашборд, где сверяется список запланированных постов с фактически опубликованными через API или ручную проверку. Что использовать на практике На практике. массовые сбои часто связаны с истечением токена доступа, изменением политики API площадки или временной блокировкой аккаунта за подозрительную активность — такие проблемы могут затронуть сразу несколько запланированных постов, поэтому важно иметь эскалацию на технического специалиста или поддержку сервиса, а не пытаться решить проблему только повторными попытк
autopostingcontent-scheduling