<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Troubleshooting on Lead DevOps</title><link>https://lead-devops.blackdevhub.online/tags/troubleshooting/</link><description>Recent content in Troubleshooting on Lead DevOps</description><generator>Hugo</generator><language>ru-RU</language><lastBuildDate>Sun, 06 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lead-devops.blackdevhub.online/tags/troubleshooting/index.xml" rel="self" type="application/rss+xml"/><item><title>journalctl: фильтрация и форматирование логов systemd</title><link>https://lead-devops.blackdevhub.online/posts/journalctl-filtering-formatting/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://lead-devops.blackdevhub.online/posts/journalctl-filtering-formatting/</guid><description>&lt;p&gt;Логи пропали. Сервер перезагрузили — и привычный &lt;code&gt;less /var/log/syslog&lt;/code&gt; молчит. В современных дистрибутивах с systemd логи собирает journald, а читает их &lt;code&gt;journalctl&lt;/code&gt;. Если не знать его фильтры, работа с системой превращается в гадание.&lt;/p&gt;&#10;&lt;h2 id="почему-логи-исчезают-после-перезагрузки"&gt;Почему логи исчезают после перезагрузки&#10;&lt;/h2&gt;&#10;&lt;p&gt;По умолчанию journal хранит данные в &lt;code&gt;/run/log/journal/&lt;/code&gt; — это tmpfs, сбрасывается при ребуте. Чтобы логи переживали перезагрузку, создайте директорию:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-25fc14eb-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-25fc14eb-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /var/log/journal&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemd-tmpfiles --create --prefix /var/log/journal&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;После этого перезапустите systemd-journald:&lt;/p&gt;</description></item><item><title>lsof: какие процессы слушают порт и держат файл</title><link>https://lead-devops.blackdevhub.online/posts/lsof-port-file-processes/</link><pubDate>Fri, 04 Sep 2026 00:00:00 +0000</pubDate><guid>https://lead-devops.blackdevhub.online/posts/lsof-port-file-processes/</guid><description>&lt;p&gt;Сервис не стартует — порт 8080 занят. Разбираешься, кто именно его держит, и попутно выясняется, что тот же процесс держит конфиг, который ты хотел отредактировать. lsof отвечает на оба вопроса: какие процессы открыли файлы и сокеты.&lt;/p&gt;&#10;&lt;h2 id="слушающие-порты"&gt;Слушающие порты&#10;&lt;/h2&gt;&#10;&lt;p&gt;Классическая задача — найти, кто слушает конкретный порт.&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-99ae9cf6-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-99ae9cf6-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsof -i -n -P&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Флаг&lt;/th&gt;&#10; &lt;th scope="col"&gt;Действие&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-i&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Показать интернет-сокеты&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Без DNS-резолва (IP вместо hostname)&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-P&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Без преобразования портов (80 вместо http)&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Без &lt;code&gt;-n -P&lt;/code&gt; lsof тратит время на DNS и резолвит порты в имена сервисов из /etc/services. На продакшене это лишние секунды.&lt;/p&gt;</description></item><item><title>ss: socket statistics вместо устаревшего netstat</title><link>https://lead-devops.blackdevhub.online/posts/ss-replace-netstat/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://lead-devops.blackdevhub.online/posts/ss-replace-netstat/</guid><description>&lt;p&gt;Если &lt;code&gt;netstat&lt;/code&gt; зависает на сервере с десятками тысяч соединений — пора переходить на &lt;code&gt;ss&lt;/code&gt;. Утилита из пакета &lt;code&gt;iproute2&lt;/code&gt; работает напрямую с ядром через netlink, а не парсит &lt;code&gt;/proc/net/*&lt;/code&gt;. Результат — мгновенный вывод и меньше накладных расходов.&lt;/p&gt;&#10;&lt;h2 id="зачем-переходить-с-netstat"&gt;Зачем переходить с netstat&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;netstat&lt;/code&gt; из &lt;code&gt;net-tools&lt;/code&gt; использует устаревшую схему: читает файлы из &lt;code&gt;/proc/net/tcp&lt;/code&gt;, &lt;code&gt;/proc/net/unix&lt;/code&gt; и преобразует числовые ID в символические имена. На сервере с активными соединениями это занимает секунды и нагружает CPU.&lt;/p&gt;</description></item><item><title>strace: трассировка системных вызовов для диагностики зависаний и утечек</title><link>https://lead-devops.blackdevhub.online/posts/strace-syscall-troubleshooting/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://lead-devops.blackdevhub.online/posts/strace-syscall-troubleshooting/</guid><description>&lt;p&gt;При зависании сервиса стандартные инструменты — top, htop, ps — показывают состояние, но не причину. Если процесс в state D (uninterruptible sleep), значит он ждёт syscall. strace подключается к живому процессу и выводит каждый системный вызов в реальном времени. Это превращает загадочное зависание в конкретный syscall, его аргументы и код возврата.&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Примечание&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;strace работает через ptrace — механизм ядра для отладки. На продакшене трассировка замедляет процесс в 2–10 раз. Используйте точечно, на отдельном PID.&lt;/p&gt;</description></item><item><title>SSH escape-последовательности: оживление зависшего терминала</title><link>https://lead-devops.blackdevhub.online/posts/ssh-escape-sequences-frozen-terminal/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://lead-devops.blackdevhub.online/posts/ssh-escape-sequences-frozen-terminal/</guid><description>&lt;p&gt;SSH-сессия зависла, &lt;code&gt;Ctrl+C&lt;/code&gt; не помогает, &lt;code&gt;Ctrl+D&lt;/code&gt; вываливает мусор — знакомая картина. Прежде чем закрывать терминал и терять сессию, попробуй встроенные escape-последовательности. Они работают на уровне SSH-клиента до того, как данные попадут на удалённый хост.&lt;/p&gt;&#10;&lt;h2 id="как-вызвать-escape-последовательность"&gt;Как вызвать escape-последовательность&#10;&lt;/h2&gt;&#10;&lt;p&gt;Escape-символ по умолчанию — тильда (&lt;code&gt;~&lt;/code&gt;). Комбинация срабатывает только в начале строки. Нажал Enter, затем &lt;code&gt;~&lt;/code&gt;, затем нужный символ. Например, &lt;code&gt;~.&lt;/code&gt; рвёт соединение.&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Примечание&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Если тильда не срабатывает — проверь, что нажал Enter перед ней. В середине вывода терминала последовательность игнорируется.&lt;/p&gt;</description></item></channel></rss>