<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@happydevops</title><generator>teletype.in</generator><description><![CDATA[@happydevops]]></description><link>https://teletype.in/@happydevops?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/happydevops?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/happydevops?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 23 Jun 2026 09:23:34 GMT</pubDate><lastBuildDate>Tue, 23 Jun 2026 09:23:34 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@happydevops/release-checklist</guid><link>https://teletype.in/@happydevops/release-checklist?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops</link><comments>https://teletype.in/@happydevops/release-checklist?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops#comments</comments><dc:creator>happydevops</dc:creator><title>Чеклист релиза</title><pubDate>Thu, 25 Nov 2021 12:28:56 GMT</pubDate><description><![CDATA[1. Убедитесь, что составляющие релиза подготовлены: все задачи проверены и подготовлены к релизу, слиты в релизную ветку, все необходимые артефакты (архивы с кодом готовы к доставке, докер-образы собраны и залиты в registry, helm-чарты подготовлены и соответствуют действительности) проверены и готовы]]></description><content:encoded><![CDATA[
  <p id="Dr0d">1. Убедитесь, что составляющие релиза подготовлены: все задачи проверены и подготовлены к релизу, слиты в релизную ветку, все необходимые артефакты (архивы с кодом готовы к доставке, докер-образы собраны и залиты в registry, helm-чарты подготовлены и соответствуют действительности) проверены и готовы</p>
  <p id="S9eM">2. Убедитесь, что прописаны все <a href="https://www.agilealliance.org/glossary/definition-of-done/" target="_blank">Definitions of Done</a> (я, честно говоря, не фанат всей этой Agile-истерии, но некоторыми принципами оттуда с удовольствием пользуюсь)</p>
  <p id="fYzj">3. Тестирование<br /> - код покрыт юнит-тестами и они были запущены в процессе CI или вручную<br /> - выполнено регрессионное тестирование<br /> - выполнены smoke-тесты<br /> - выполнено нагрузочное  тестирование<br /> - очень важно: выполнено интеграционное тестирование, это отдельная большая тема для разговора<br /> - Выполнен статический анализ кода, код прошел линтеры и security-инструменты<br /> - Технический долг, выплаченный в рамках релиза, задокументирован<br />Все артефакты, полученные в ходе тестирования, помещены в хранилище, все отчеты по тестированию подготовлены и доступны</p>
  <p id="mkqd">4. Проверяем технические детали<br /> - Весь код размещен в системе контроля версий, все нужные теги установлены<br /> - Все необходимые изменения в конфигурации production-сервисов сделаны (или готовы к этому)<br /> - Все зависимости (базы данных, кеши, сторонние сервисы) задеплоены и готовы принимать трафик?<br /> - Доступны ли все сетевые и инфраструктурные сервисы? (DNS, LB, VPC и прочие)<br /> <br />5. &quot;Поведение&quot; нашего релиза под трафиком<br /> - Понимаем ли мы поведение системы под большим трафиком? Настроено и протестировано автомасштабирование?<br /> - Готовы ли мы к изменению (ухудшению) пользовательского опыта? Готовы ли наши инструменты для измерения этого? Понимаем ли мы метрики UX?<br /> - Если мы используем канареечный деплой, то наши метрики для принятия решения о распространении трафика протестированы и готовы?<br /> - Если мы используем A/B-тестирование, то все <a href="https://martinfowler.com/articles/feature-toggles.html" target="_blank">Feature Toggles</a> настроены и подготовлены?<br /> - Проверены ли все необходимые доступы на всех уровнях? От SRE-инженеров до менеджеров, работающих с самым высоким уровнем приложения<br /> - Готов ли наш мониторинг? Имеем ли мы всю необходимую информацию для observability? Понимаем ли мы собственные технические и продуктовые метрики, чтобы оценить поведение системы после релиза?<br /> - Готовы ли мы к быстрому откату, если что-то пойдет не так? Можем ли мы исправить ситуацию без отката в случае ошибок? (выключить feature toggle, выкатить быстрый патч)</p>
  <p id="qLeW">6. Люди, участвующие в релизе (важно уточнить, что пользователи, получающие новый UX, тоже так или иначе &quot;участвуют&quot; в релизе)<br /> - Есть ли у нас контакты всех необходимых людей, которые имеют компетенции для исправления ошибок в ходе релиза? Они на связи? Они готовы реагировать?<br /> - Понимаем ли мы как изменения повлияют на поведение пользователей? Протестировали ли мы это поведение перед релизом? (Ограниченная группа, A/B-тестирование на реальных пользователях)</p>
  <hr />
  <p id="qPh8">Приходите ко мне в телеграм-канал <a href="https://t.me/happy_devops" target="_blank">@happy_devops</a>, там еще много интересного :)</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@happydevops/metabase-debugging</guid><link>https://teletype.in/@happydevops/metabase-debugging?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops</link><comments>https://teletype.in/@happydevops/metabase-debugging?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops#comments</comments><dc:creator>happydevops</dc:creator><title>Как я отлаживал одну очень странную ситуацию</title><pubDate>Fri, 12 Nov 2021 21:46:59 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/1b/2f/1b2f94bb-6ede-4659-8b3b-206da27c86b8.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/6e/4a/6e4ad310-fa16-4169-8324-42c67bb51da7.png"></img>Действующие лица]]></description><content:encoded><![CDATA[
  <p id="7pYR">Действующие лица</p>
  <p id="bGII"><em>Я.Облако</em>: наш облачный провайдер, в котором и происходит все действие<br /><em>Metabase</em>: наш главный герой. Это такая BI-система, которая позволяет делать всякие красивые визуализации в реальном времени. Для получения этих самых данных она умеет подключаться к различным источникам<br /><em>PostgreSQL</em>: или просто PG. В представлении не нуждается. В нашей истории представлен как managed-сервис в виде облачного кластера<br /><em>Kubernetes</em>: он же k8s. Оркестратор, в котором крутится вышеозначенный метабейс</p>
  <p id="gWfK">Итак, некоторое время назад наши дата-сатанисты попросили меня развернуть метабейс, потому что он им был нужен для каких-то темных дата-ритуалов. Я посмотрел, сложного ничего, говорю, будет сделано.</p>
  <p id="NzjD">А мы, как раз, ввели в эксплуатацию еще один k8s-кластер как раз под всякие подобные штуки. Туда я его и решил затащить.</p>
  <p id="uG2S">Пару слов о сетапе: в одном каталоге (назовем его app) облака расположен источник данных в виде нашего PG, там же есть кубернетес для всяких непродакшеновых нужд. В другом каталоге облака (назовем его infra) расположен еще один кластер k8s, который является целевым для нашего метабейса. Прямой сетевой связности между ними нет, но есть VPN в виде site-to-site ipsec StrongSwan</p>
  <p id="1SvF">Так вот, метабейс умеет хранить свою служебную инфу либо в h2, это такая его встроенная БД на файлах, для продакшена не рекомендуется, либо в mysql или в PG. Для проверки я развернул его на h2 в app-кластере, подключил PG как источник данных, посмотрел, все ок. Отдал дата-сатанистам, они дали добро, все хорошо.</p>
  <p id="8OmK">Ну в общем беру его я, готовлю уже продакшен-сетап, переношу его в infra-кластер, подцепляю к нему его собственный PG для хранения служебной инфы, проверяю коннект к другому каталогу, все отлично. Отдаю ds-команде и с чувством выполненного долга ухожу делать другие задачи</p>
  <p id="xkHL">И буквально вот вчера, за окном пятница, приходят ко мне ребята из DS и говорят: беда, метабейс не видит схему данных. То есть к бд он цепляется нормально, но в ответ на попытку посмотреть схему, говорит буквально следующее:<br /></p>
  <figure id="ffN6" class="m_original">
    <img src="https://img3.teletype.in/files/6e/4a/6e4ad310-fa16-4169-8324-42c67bb51da7.png" width="1182" />
  </figure>
  <p id="7Y34">Опачки. В понедельник уже должна быть презентация красивых визуализаций, а оно схему не видит.<br />При этом в метабейсе есть возможность сделать прямой запрос к БД и если там набрать буквально<br /><code>SELECT * FROM table_name;</code><br />то все работает норм, данные возвращаются, все отлично. То есть таблички он видит, базу он видит, но почему-то не хочет показывать схему.<br />А надо сказать, что схему он показывает в виде таких больших кнопок с названиями таблиц и с помощью этих кнопок строятся дашборды. То есть без схемы этой совсем никак.<br />Ну и непонятно, конечно, почему он все-таки говорит, что таблиц нет, хотя они есть и он явно про это в курсе</p>
  <p id="KRe7">Иду в настройки, делаю принудительный синк, одновременно смотрю в логи. Вижу, что синк запускается, но не заканчивается. Ну то есть там несколько этапов, один из них называется <code>sync_metadata</code> , это вот ровно оно и есть. Все остальные этапы помечены как started и finished, а этот нет.<br />Примерно минут через 40 это синк падает с ошибкой<br /><code>PSQLException: An I/O error occured while sending to the backend.</code></p>
  <p id="x5hB">Ооооокей</p>
  <p id="GxdK">Несколько часов уходит на извращения с helm-чартом в самых разных вариантах, изменение уровня логирования (я теперь знаю очень много про log4j, я и раньше знал, но там много всего добавилось😁), адское гугление и чтение форумов. Проблема появляется у многих, но все предложенные решения не работают<br />Так, задета моя профессиональная гордость, оставить это я уже не могу.</p>
  <p id="o4Fa">Ко мне приходит светлая мысль, что что-то не так со служебным PG, так как я вижу, что туда попадает информация о бд (креды, IP и все вот это), но нет информации о схеме. При этом на тестовом сетапе с h2 все работало. Решаю сделать с h2 чтобы проверить. Разворачиваю метабейс в инфра-кластере с h2, и... хрен там, ничего не получается. Схемы нет. Я начинаю чувствовать, что схожу с ума</p>
  <p id="0Mon">8 вечера, пятница, я сижу с блокнотом и прикидываю, что у нас есть: </p>
  <ol id="9J5S">
    <li id="iNXN">Все работает как надо, когда приложение и сервис в одном каталоге</li>
    <li id="Zn02">Все не работает как надо, когда они в разных. Но при этом сетевая связность есть в обе стороны и консольный клиент PG работает отлично</li>
  </ol>
  <p id="fkZi">Внимательно смотрю на кластеры, в чем еще может быть разница? Агашечки, на апп-кластере стоит nginx как ingress-контроллер, а в инфра-кластер мы затащили Istio на посмотреть, насколько он хорош (очень хорош🤗). Так блин, неужели дело в этом? Собираюсь уже затаскивать nginx и в инфра-кластер, но тут решаю на шару прицепить к метабейсу БД из его же каталога как источник данных.<br />Voilà! Все работает хорошо, схема есть.</p>
  <p id="VrUv">Так, значит дело <s>не в бобине</s> не в истио, почему-то метабейс не может пробиться в другой каталог. Причем проблема именно в нем, консольный клиент же работает нормально, вы помните? И схему показывает, и селекты дергает. А метабейс, судя по <code>i/o error</code> просто теряет коннект. Но почему он его теряет?! Почему он не выгребает данные сразу, как это делает <code>psql</code>?</p>
  <p id="DDK9">Думаю про какие-то перемудренные таймауты постгреса (хотя какие, к херам, таймауты? Эти вмки если не в одной стойке, то в одном ДЦ точно), закапываюсь в доки по постгресу, ничего не помогает 🤷‍♂️ Схемы нет</p>
  <p id="iEul">Так, исключили проблемы с БД, очевидно, что метабейс не пролезает через ipsec, но блин, почему? Консольный клиент пролезает, а этот нет. Пишу тестовое приложение на джаве с тем же драйвером, который использует метабейс. Все ок, все работает. Приложение, в смысле. Метабейс — нет.</p>
  <p id="sU25"><em>За окном очень поздний вечер</em></p>
  <p id="rnZz">Пытаюсь понять, в каком еще юзкейсе можно смоделировать поведение, аналогичное метабейсу, но без его участия? Ну конечно, банальный полный дамп данных. Поднимаю jump-pod рядом с метабейсом, запускаю pg_dump ииии....</p>
  <p id="bdlt">Да, детка! pg_dump тоже зависает и падает с таймаутом. При этом таки показав мне, на чем таки оно валится.<br />Уберите детей от экранов, валится оно вот на этом:</p>
  <figure id="OO8T" class="m_original">
    <img src="https://img3.teletype.in/files/a8/a1/a8a16247-bce0-4611-8d10-c8d2da6e15e9.png" width="3292" />
  </figure>
  <p id="0PTw">Да.. я бы тоже упал конечно. Подозрение с метабейса снято. Выглядит все это очень страшно, но таки делать с этим что-то надо. Решаю проверить все это добро у себя на локалке (у меня тоже поднят VPN до Яндекса, но уже не StrongSwan s2s, а банальный OpenVPN)</p>
  <p id="wtJF">Опачки...</p>
  <figure id="kEd7" class="m_original">
    <img src="https://img2.teletype.in/files/1c/a4/1ca466ee-b221-4493-ae2b-4146a7f000b6.png" width="1916" />
  </figure>
  <p id="ATNc">Все пролетает просто прекрасно. Значит дело не в VPN в принципе, а в конкретном ipsec-е, который соединяет наши два каталога. Время 22.30, я провел в этой отладке уже семь с половиной часов.</p>
  <p id="6mGs">Иду прогуляться, чувствую себя идиотом. На пятом круге, навернутом вокруг дома ясно понимаю (💡), что именно надо попробовать! Залетаю домой и не раздеваясь бросаюсь к ноутбуку. Короткая команда на обоих концах туннеля, и...</p>
  <p id="IRy4">Оно заработало!!!!1111</p>
  <p id="4DRZ">Оргазм по сравнению с этим ощущением — жалкая пародия на удовольствие. Меня реально отпустило, гора упала с плеч, профессиональная гордость вернулась к привычным размерам)</p>
  <p id="axsl">Таки чтоже это была за команда?</p>
  <p id="VM1b"><code>ifconfig eth0 mtu 1650 up</code></p>
  <p id="Lv1d"><a href="https://en.wikipedia.org/wiki/Maximum_transmission_unit" target="_blank">MTU (или maximum transmission unit)</a> это максимальный размер блока данных в байтах, который может быть передан через сетевой слой без фрагментации. Его чрезмерное увеличение влияет на производительность, а чрезмерное уменьшение вытворяет вот такие штуки с трафиком.</p>
  <p id="LmyM">Дада, друзья :) IPSec откусывает немножко от MTU и в дефолтное свое значение 1500 трафик может и не пролезть. Я задрал с запасом до 1650 и все полетело. Вообще, MTU можно довольно точно рассчитать, но после 8 часов деьага я на это не способен. Я честно скажу, я пока не понимаю, почему именно этот поток данных не пролез в ipsec, почему все остальное работало норм, с этим я разберусь потом :) После 8 часов жесткой отладки я уже не способен на интеллектуальные упражнения</p>
  <p id="FRnq">А сейчас самое главное, что проблема исправлена, можно спокойно закрывать ноут и ложиться спать. По горячим следам я написал эту заметку, потом обязательно дополню более подробным исследованием на тему MTU</p>
  <p id="lhFe">Всем спасибо за внимание! Приходите ко мне в телеграм-канал <a href="https://t.me/happy_devops" target="_blank">@happy_devops</a>, там еще много интересного :)</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@happydevops/sef8wATUeDm</guid><link>https://teletype.in/@happydevops/sef8wATUeDm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops</link><comments>https://teletype.in/@happydevops/sef8wATUeDm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=happydevops#comments</comments><dc:creator>happydevops</dc:creator><title>Gruntwork собрали свои production-readiness рекомендации в одной статье</title><pubDate>Sat, 31 Jul 2021 16:01:53 GMT</pubDate><category>AWS</category><description><![CDATA[https://blog.gruntwork.io/introducing-the-gruntwork-production-deployment-guides-887b3b037a1]]></description><content:encoded><![CDATA[
  <p><a href="https://blog.gruntwork.io/introducing-the-gruntwork-production-deployment-guides-887b3b037a1" target="_blank">https://blog.gruntwork.io/introducing-the-gruntwork-production-deployment-guides-887b3b037a1</a></p>
  <p>Гайд по:<br />- AWS EKS<br />- Созданию AWS акаунта (IAM, Organization, etc.)<br />- Структура VPC</p>

]]></content:encoded></item></channel></rss>