<?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>Вороний блог | Linux и IT</title><generator>teletype.in</generator><description><![CDATA[Меня зовут Иван Чёрный, я автор статей и владелец сайта r4ven.me - Вороний блог.]]></description><image><url>https://img4.teletype.in/files/f0/bd/f0bd1a6d-34d4-44c8-b546-0f3a19ab3be8.png</url><title>Вороний блог | Linux и IT</title><link>https://teletype.in/@r4ven_me</link></image><link>https://teletype.in/@r4ven_me?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/r4ven_me?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/r4ven_me?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 24 Jun 2026 03:24:30 GMT</pubDate><lastBuildDate>Wed, 24 Jun 2026 03:24:30 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/linux-quiz-21-25</guid><link>https://teletype.in/@r4ven_me/linux-quiz-21-25?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/linux-quiz-21-25?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Linux викторина №21-25: что делает команда/скрипт на изображении?</title><pubDate>Mon, 02 Dec 2024 17:33:00 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/45/d0/45d07084-2325-4851-8a0c-743b3e0a993a.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/51/dc/51dc0397-3517-42b4-81bb-dc3bad9391a1.png"></img>Пройти тест можно на моём сайте r4ven.me.]]></description><content:encoded><![CDATA[
  <figure id="RGpj" class="m_original">
    <img src="https://img2.teletype.in/files/51/dc/51dc0397-3517-42b4-81bb-dc3bad9391a1.png" width="1024" />
    <figcaption>Linux викторина №21-25: что делает команда/скрипт на изображении?</figcaption>
  </figure>
  <section>
    <p id="ZY6G"><strong>Пройти тест можно на моём сайте <a href="https://r4ven.me/it-razdel/linux-quiz/linux-viktorina-21-25-chto-delaet-komanda-skript-na-izobrazhenii/" target="_blank">r4ven.me</a><a href="https://r4ven.me/it-razdel/linux-quiz/linux-viktorina-16-20-chto-delaet-kazhdaya-komanda-na-izobrazhenii/" target="_blank">.</a></strong></p>
  </section>
  <p id="MLbi"><em>Присоединяйтесь к нашему каналу в телеграм: <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат: <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</em></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/proverit-skorost-vpn</guid><link>https://teletype.in/@r4ven_me/proverit-skorost-vpn?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/proverit-skorost-vpn?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Быстрый способ проверить скорость VPN соединения с помощью SSH</title><pubDate>Fri, 29 Nov 2024 18:09:24 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/18/e1/18e149a3-14ef-4d2c-a584-ca52aa9f98fd.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/ed/fe/edfe36de-98e5-41cc-952a-72778b2d304e.png"></img>Исходный сайт представленного материала: r4ven.me]]></description><content:encoded><![CDATA[
  <figure id="b9Zo" class="m_original">
    <img src="https://img3.teletype.in/files/ed/fe/edfe36de-98e5-41cc-952a-72778b2d304e.png" width="1024" />
    <figcaption>Быстрый способ проверить скорость VPN соединения с помощью SSH</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Fo2R">Исходный сайт представленного материала: <a href="https://r4ven.me/it-razdel/zametki/bystryj-sposob-proverit-skorost-vpn-soedineniya-s-pomoshhyu-ssh/" target="_blank">r4ven.me</a></p>
  </section>
  <h3 id="ffwB">Приветствую!</h3>
  <p id="PMKV">Короткая заметка про то, как проверить скорость Download/Upload с помощью SSH в Linux. Подобная диагностика бывает полезна при анализе проблем, связанных с передачей данных по защищенным каналам связи, таким как <a href="https://r4ven.me/it-razdel/slovarik/vpn-tehnologiya-dlya-obespecheniya-bezopasnogo-setevogo-vzaimodejstviya/" target="_blank">VPN</a>.</p>
  <blockquote id="LxYv">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</blockquote>
  <p id="giln">Демонстрация из статьи выполнялась в среде дистрибутива <strong>Linux Mint Debian Edition 6</strong> (Debian 12). Все аналогичным образом будет работать и в других <a href="https://r4ven.me/it-razdel/slovarik/distributiv-linux/" target="_blank">дистрибутивах Linux</a>.</p>
  <figure id="vX1s" class="m_original">
    <img src="https://img4.teletype.in/files/3c/52/3c522e06-3ef2-4a0e-8589-5d18905e71a5.png" width="705" />
  </figure>
  <h2 id="chZK">Подготовка</h2>
  <p id="MYfP">Для работы нам понадобятся:</p>
  <ul id="huhU">
    <li id="QyEk"><a href="https://r4ven.me/it-razdel/zametki/ssh-bezopasnoe-podklyuchenie-k-udalyonnym-hostam-vvedenie/" target="_blank">доступ к удаленному серверу по SSH;</a></li>
    <li id="twlx">утилита контроля <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-perenapravlenie-vvoda-i-vyvoda/" target="_blank">пайплайнов</a> – <code>pv</code> (pipeviewer);</li>
    <li id="QWoj">утилита низкоуровневой передачи данных – <code>dd</code>;</li>
    <li id="QK9V">утилита <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-vyvod-i-chtenie-soderzhimogo-komandy-echo-cat-less/" target="_blank">вывода содержимого</a> – <code>cat</code>.</li>
  </ul>
  <p id="JyCZ">Из списка выше доустановить потребуется лишь утилиту <code>pv</code> (крайне полезная вещь). Она есть в стандартных <a href="https://r4ven.me/it-razdel/slovarik/repozitorij-programmnogo-obespecheniya/" target="_blank">репозиториях</a>:</p>
  <pre id="4SPQ">sudo apt update &amp;&amp; sudo apt install pv</pre>
  <figure id="O4Lf" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-52.png" width="1237" />
  </figure>
  <h2 id="lmyi">Проверка скорости</h2>
  <blockquote id="gk67">Сразу стоит отметить, что скорость передачи данных может зависеть от:пропускной способности сети;производительности CPU, так как SSH использует шифрование;настроек SSH, таких как алгоритмы шифрования.</blockquote>
  <p id="YqVl">В моем примере для подключения используется имя пользователя на удаленном сервере – <strong>ivan</strong> и адрес хоста – <strong>vpn.r4ven.me</strong> (можно указать IP). Замените эти значения в командах на свои.</p>
  <p id="yoxo">Отключите VPN и проверьте скорость download с помощью команды:</p>
  <p id="ao9z">Будьте осторожны с командой <code>dd</code>! Чтобы случайно не перезаписать важные данные.</p>
  <pre id="42Yn">ssh ivan@vpn.r4ven.me dd if=/dev/zero bs=1M count=1024 | pv | cat &gt; /dev/null</pre>
  <figure id="rst3" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-53.png" width="1329" />
  </figure>
  <blockquote id="wuiK">Для остановки проверки используйте сочетание клавиш <code>Ctrl+c</code>.</blockquote>
  <p id="eBH4">И теперь скорость upload:</p>
  <pre id="C0vn">dd if=/dev/zero bs=1M count=1024 | pv | ssh ivan@vpn.r4ven.me &#x27;cat &gt; /dev/null&#x27;</pre>
  <figure id="ZdqG" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-54.png" width="1324" />
  </figure>
  <p id="2Mi3">Затем включите VPN и выполните обе команды снова. Если без туннелирования трафика скорость значительно выше, значит факторы, влияющие на скорость передачи данных на самом сервере, где развернут VPN. Если скорость низкая в обоих случаях, вероятно дело в канале до сервера.</p>
  <h2 id="EZVE">Что вообще делают эти команды</h2>
  <h3 id="1gUJ">1-я команда (Download)</h3>
  <ul id="Kkse">
    <li id="EdkI"><code>ssh ivan@vpn.r4ven.me dd if=/dev/zero bs=1M count=1024</code> – генерирует поток нулевых данных (из <code>/dev/zero</code>) на удалённом сервере с помощью утилиты <code>dd</code> размером 1 ГБ (1024 блока по 1 МБ) и отправляет их через SSH-соединение;</li>
    <li id="xp63"><code>| pv</code> – на локальной машине с помощью <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-perenapravlenie-vvoda-i-vyvoda/" target="_blank">механизма перенаправления</a> измеряет скорость получения по SSH данных;</li>
    <li id="TaT5"><code>| cat &gt; /dev/null</code> – перенаправляет поток данных, проходящий через <code>pv</code> в псевдоустройство (черную дыру), исключая нагрузку на диск.</li>
  </ul>
  <h3 id="1R8G">2-я команда (Upload)</h3>
  <ul id="tSNc">
    <li id="qNv0"><code>dd if=/dev/zero bs=1M count=1024</code> – генерирует поток нулевых данных (<code>/dev/zero</code>) на локальной машине также с помощью утилиты <code>dd</code> (1 ГБ);</li>
    <li id="gWxk"><code>| pv</code> – измеряет скорость передачи данных;</li>
    <li id="hH7M"><code>| ssh ivan@vpn.r4ven.me &#x27;cat &gt; /dev/null&#x27;</code> – передает данные через SSH на удалённый сервер также в черную дыру.</li>
  </ul>
  <p id="FuT1">Таким образом выполняется синтетическая проверка, которая просто утилизирует канал не создавая при этом никаких файлов.</p>
  <h2 id="ZlLR">Если при включенном VPN маршрут до удаленного сервера идет не через туннель</h2>
  <p id="W8CL">В такой ситуации попробуйте временно добавить маршрут вручную, а после проведения проверок удалить. <strong>Но только если удаленный сервер – это не сам сервер VPN!</strong></p>
  <p id="UTcD">Вот пример команд:</p>
  <pre id="HOWf"># проверка маршрута
ip route get &lt;IP_address&gt;

# добавление маршрута через серетвой интерфейс tun0
ip route add &lt;IP_address&gt; dev tun0

# удаление добавленного ранее маршрута
ip route del &lt;IP_address&gt; dev tun0</pre>
  <p id="i9Os">Где <code>&lt;IP_address&gt;</code> – IP адрес сервера, а <code>tun0</code> – это виртуальный сетевой интерфейс вашего туннельного соединения на локальной машине. Замените значения на свои. Узнать их можно с помощью команд:</p>
  <pre id="MDwc"># ip адрес
ping -c1 vpn.r4ven.me | head -1 | awk -F&#x27;[()]&#x27; &#x27;{print $2}&#x27;

# список интерфейсов
ip address</pre>
  <h2 id="nsRs">На почитать</h2>
  <ul id="oPsU">
    <li id="7weL"><a href="https://r4ven.me/it-razdel/zametki/ssh-bezopasnoe-podklyuchenie-k-udalyonnym-hostam-vvedenie/" target="_blank">SSH – Безопасное подключение к удалённым хостам: введение | Вороний блог</a></li>
    <li id="l64I"><a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-perenapravlenie-vvoda-i-vyvoda/" target="_blank">Командная строка Linux, перенаправление ввода и вывода: операторы “&gt;”, “&lt;“, “|”</a></li>
    <li id="luZx"><a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-openconnect-ssl-vpn-server-ocserv-v-docker-dlya-vnutrennih-proektov/" target="_blank">Поднимаем OpenConnect SSL VPN сервер (ocserv) в docker для внутренних проектов | Вороний блог</a></li>
    <li id="xWvB"><a href="https://habr.com/ru/articles/65384/" target="_blank">pv — маленькая, но очень полезная утилита | Habr</a></li>
    <li id="2LsD"><a href="https://manpages.ubuntu.com/manpages/xenial/man1/pv.1.html" target="_blank">Мануал утилиты pv | ubuntu.com (EN)</a></li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/tmux-ustanovka-i-kastomizaciya</guid><link>https://teletype.in/@r4ven_me/tmux-ustanovka-i-kastomizaciya?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/tmux-ustanovka-i-kastomizaciya?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Tmux – установка и кастомизация + Nord theme</title><pubDate>Tue, 26 Nov 2024 08:32:05 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/0b/c7/0bc77a04-32af-4527-a7d6-f430bbd36423.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/92/7b/927b7302-83a2-4f56-bfdf-f190f795cb5b.png"></img>Исходный сайт представленного материала: r4ven.me]]></description><content:encoded><![CDATA[
  <figure id="La8v" class="m_original">
    <img src="https://img2.teletype.in/files/92/7b/927b7302-83a2-4f56-bfdf-f190f795cb5b.png" width="1024" />
    <figcaption>Tmux – установка и кастомизация + Nord theme</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="pJUg">Исходный сайт представленного материала: <a href="https://r4ven.me/it-razdel/poleznoe-po/tmux-ustanovka-i-kastomizaciya-nord-theme/" target="_blank">r4ven.me</a></p>
  </section>
  <h3 id="niUj">Приветствую!</h3>
  <p id="hss0">В <a href="https://r4ven.me/it-razdel/slovarik/terminalnyj-multipleksor/" target="_blank">прошлой заметке</a>📝 мы говорили про терминальные мультиплексоры и какие задачи они выполняют. В сегодняшней статье я продемонстрирую установку и кастомизацию самого популярного инструмента из данной категории – <strong>Tmux</strong>🪟. Как обычно, уже все <s>выстрадано</s> настроено, и для повторения подобного у вас, необходимо будет выполнить всего несколько команд🧑‍💻.</p>
  <blockquote id="PEXT">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</blockquote>
  <p id="mfbm">Демонстрация, приведенная в данной статье выполнялась в среде дистрибутива <a href="https://r4ven.me/it-razdel/instrukcii/nativnoe-obnovlenie-s-linux-mint-21-3-do-linux-mint-22/" target="_blank"><strong>Linux Mint 22</strong></a> с <strong>Tmux</strong> версии <strong>3.4</strong>✍️.</p>
  <figure id="lJML" class="m_original">
    <img src="https://img1.teletype.in/files/89/26/8926dd1a-5b3f-4532-a027-704cd8877641.png" width="711" />
  </figure>
  <h2 id="hiTJ">Предисловие</h2>
  <p id="0i9w">Я очень люблю тему <a href="https://r4ven.me/tag/nord-theme/" target="_blank">Nord</a>❄️ от разработчиков Arcticicestudio⛄️ и предпочитаю оформлять свою систему и приложения в этой палитре😌. Tmux не стал исключением, поэтому для корректного и гармоничного отображения конфигурации, как у меня вам понадобятся:</p>
  <ol id="aeeN">
    <li id="GWXg">Любой моноширный иконочный <strong>Powerline</strong> <strong>шрифт</strong>⚡️.</li>
    <ul id="9Rpu">
      <li id="1lS4"><em>Например из проекта <a href="https://www.nerdfonts.com/" target="_blank">Nerd fonts</a>. Я предпочитаю шрифт <a href="https://github.com/ryanoasis/nerd-fonts/releases/download/v3.3.0/Hack.zip" target="_blank">Hack Nerd Font Mono</a>. Шрифт необходимо поместить по пути <code>/usr/share/fonts/</code> либо отдельно для пользователя в <code>~/.local/share/fonts/</code> и применить его к терминалу.</em></li>
    </ul>
    <li id="PKpu">Любой <strong>эмулятор терминал</strong>🧑‍💻, с поддержкой TrueColor и темы Nord.</li>
    <ul id="Wy6P">
      <li id="aVlG"><em>Например <a href="https://r4ven.me/it-razdel/instrukcii/kastomizaciya-linux-mint-20-nord-theme/#%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB_Gnome" target="_blank">Gnome-terminal</a> или <a href="https://r4ven.me/it-razdel/poleznoe-po/guake-vypadayushhij-drop-down-terminal/" target="_blank">выпадающий (drop-down) терминал – Guake</a>. По моему опыту, данная тема есть под любой популярный эмулятор терминала;</em></li>
    </ul>
    <li id="K5qs">(Опционально) <strong>Консольный редактор</strong>📝 с темой Nord.</li>
    <ul id="xkyX">
      <li id="MBIo"><em>Например <a href="https://r4ven.me/it-razdel/poleznoe-po/neovim-ustanovka-i-nastrojka-redaktora-koda-s-elementami-ide-vsego-v-neskolko-komand/" target="_blank">Vim/Neovim</a>.</em></li>
    </ul>
    <li id="Qtky">(Опционально) Интерактивная <strong>командная оболочка</strong>💻.</li>
    <ul id="5B63">
      <li id="dWaJ"><em>Например <a href="https://r4ven.me/it-razdel/instrukcii/zsh-interaktivnaya-komandnaya-obolochka-dlya-linux-oh-my-zsh/" target="_blank">Zsh + Oh-My-Zsh</a> с темой <strong>agnoster</strong>.</em></li>
    </ul>
  </ol>
  <p id="zjfp">Для тех, кто только знакомится с Tmux кратко перечислю его сущности🧐:</p>
  <ul id="pl9G">
    <li id="4xjO"><strong>Сессия (session)</strong> – основная единица работы, содержащая окна и панели;</li>
    <li id="SXYp"><strong>Окно (window)</strong> – отдельный терминал в сессии;</li>
    <li id="uvbU"><strong>Панель (pane)</strong> – разделение окна на несколько терминалов (панелей);</li>
    <li id="pQTH"><strong>Команды (command)</strong> – инструкции для управления <code>tmux</code>;</li>
    <li id="2R5p"><strong>Клавиша префикса (prefix)</strong> – клавиша для активации команд (по умолчанию <code>Ctrl-b</code>);</li>
    <li id="FgFR"><strong>Состояние (state)</strong> – активные и неактивные окна и панели;</li>
    <li id="57f8"><strong>Конфигурация (config)</strong> – настройки tmux, например в файле <code>~/.tmux.conf</code> или <code>~/.config/tmux/tmux.conf</code>.</li>
  </ul>
  <p id="DBAN">Можем приступать к установке.</p>
  <h2 id="6Khq">Установка Tmux</h2>
  <figure id="2RTM" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-49.png" width="1000" />
  </figure>
  <p id="3lpQ">Tmux почти всегда есть в стандартных репозиториях, а во многих <a href="https://r4ven.me/it-razdel/slovarik/distributiv-linux/" target="_blank">дистрибутивах</a> Linux он даже предустановлен👌.</p>
  <p id="g8md">Открываем терминал и выполняем:</p>
  <pre id="IhW7">sudo apt update &amp;&amp; sudo apt install -y curl git xclip tmux</pre>
  <ul id="10rM">
    <li id="j73o"><code>curl</code> – утилита для взаимодействия с web (понадобится для скачивания конфига);</li>
    <li id="Mh1m"><code>git</code> – система контроля версий и одноименная утилита для работы с git <a href="https://r4ven.me/it-razdel/slovarik/repozitorij-programmnogo-obespecheniya/" target="_blank">репозиториями</a> (нужна для установки сторонних плагинов);</li>
    <li id="RUXy"><code>xclip</code> – утилита управления буфером обмена в <a href="https://r4ven.me/it-razdel/slovarik/okruzhenie-rabochego-stola/" target="_blank">desktop</a> системах Xorg, обычно предустановлена (если выполняете установку tmux на системе без gui, то ее можно не устанавливать);</li>
    <li id="34aK"><code>tmux</code> – сам терминальный мультиплексор;</li>
  </ul>
  <figure id="qWRs" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-46.png" width="1163" />
  </figure>
  <h2 id="el38">Скачивание конфига и запуск</h2>
  <p id="UAOn">Теперь воспользуемся утилитой <code>curl</code>, чтобы скачать файл конфигурации Tmux с моего <a href="https://github.com/r4ven-me/dots/blob/main/.config/tmux/tmux.conf" target="_blank">GitHub</a>😇 репозитория:</p>
  <pre id="4nh6">curl --create-dirs -fLo \
    ~/.config/tmux/tmux.conf \
    https://raw.githubusercontent.com/r4ven-me/dots/main/.config/tmux/tmux.conf</pre>
  <figure id="csLR" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-45.png" width="1184" />
  </figure>
  <p id="LIem">Осталось только запустить Tmux😳. Первый запуск займет некоторое время⏳, т.к. будут скачиваться менеджер плагинов и далее сами плагины с помощью этого менеджера.</p>
  <blockquote id="i0A9">Конфигурация построена так, что при добавлении новых плагинов, во время запуска/перезапуска Tmux, они будут устанавливаться автоматически😌. Для установки плагинов вручную используйте <code>prefix+I</code>.</blockquote>
  <p id="5BmL">Для создания новой именованной сессии воспользуйтесь командой:</p>
  <pre id="yj5U">tmux new -s Work</pre>
  <p id="Ubm9">Где:</p>
  <ul id="foNh">
    <li id="QZCg"><code>new</code> – команда создания новой сессии;</li>
    <li id="UFa1"><code>-s</code> – ключ для указания имени сессии;</li>
    <li id="BnJZ"><code>Work</code> – произвольное имя сессии.</li>
  </ul>
  <figure id="yoFu" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-47.png" width="1013" />
  </figure>
  <p id="Fzt1">Должно получиться примерно так:</p>
  <figure id="YTCF" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-48.png" width="1094" />
  </figure>
  <p id="GxOf">Все😃 настройка завершена! теперь можно активно пользоваться:</p>
  <figure id="4hGM" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-50-1500x845.png" width="1500" />
  </figure>
  <blockquote id="tbHd">Понравился мой конфиг Neovim? Можете с легкостью создать аналогичный по статье: <a href="https://r4ven.me/it-razdel/poleznoe-po/neovim-ustanovka-i-nastrojka-redaktora-koda-s-elementami-ide-vsego-v-neskolko-komand/" target="_blank">Neovim – Установка и настройка редактора кода с элементами IDE всего в несколько команд</a>.</blockquote>
  <figure id="yki0" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-38.png" width="344" />
  </figure>
  <p id="zg5v">А если у вас широкий монитор, то вообще 🔥🔥🔥!</p>
  <figure id="eJvo" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/13-33-09_23-11-2024.resized.png" width="1280" />
    <figcaption>В таком терминале и жить можно😎</figcaption>
  </figure>
  <p id="yczd">Для выхода из <code>tmux</code> без закрытия сессий отправьте команду <code>dettach</code> специальной горячей клавишей: сперва нажмите сочетание клавиш так называемого префикса, по умолчанию это <code>Ctrl+b</code>, а затем сразу же клавишу <code>d</code>, сокращенно: <code>prefix+d</code>.</p>
  <p id="AWiB">Да, такой стиль горячих клавиш у Tmux🤷‍♂️. Сперва нажимается клавиша <code>prefix</code>, а затем клавиша действия/команды. К такому способу нужно привыкнуть. Клавишу <code>prefix</code> можно изменить в конфигурации. Но делать это не рекомендуется, чтобы сохранить универсальность🫠.</p>
  <p id="6hq2">Для возврата к запущенной сессии воспользуйтесь командой:</p>
  <pre id="lEOA">tmux attach -t Work || tmux new -s Work</pre>
  <p id="Pbtp">Где:</p>
  <ul id="ZvEZ">
    <li id="RyCX"><code>attach</code> – команда подключения к запущенной сессии;</li>
    <li id="zpN8"><code>-t</code> – ключ для указания тега/имени существующей сессии;</li>
    <li id="xPAv"><code>Work</code> – имя запущенной ранее нами сессии;</li>
    <li id="dE7W"><code>||</code> – логическое “или” в контексте оболочки, другими словами, параметр <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-kontrol-vypolneniya-komand/" target="_blank">контроля выполнения</a>, который запустит следующую за ним команду в случае ошибки предыдущей.</li>
  </ul>
  <p id="GlOX">Рекомендую сразу же создать удобный alias для вашей <a href="https://r4ven.me/it-razdel/slovarik/komandnyj-interpretator-ili-obolochka-shell/" target="_blank">оболочки</a>:</p>
  <pre id="cP2A">echo &#x27;alias T=&quot;tmux attach -t Work || tmux new -s Work&quot;&#x27; &gt;&gt; ~/.profile

source ~/.profile</pre>
  <p id="mSWi">Замените <code>~/.profile</code> на файл с параметрами подготовки вашего окружения оболочки при необходимости☝️.</p>
  <p id="fklO">Теперь подключаться к существующей сессии с именем <strong>Work</strong> можно просто по команде из одной буквы <code>T</code>.</p>
  <h2 id="jjpF">Описание конфигурации и обзор файла tmux.conf</h2>
  <h3 id="iUa0">Что дополняет/изменяет данная конфигурация</h3>
  <p id="xGZv"><strong>Общие настройки📖:</strong></p>
  <ul id="wht7">
    <li id="pqjj">включена поддержка 256 цветов: <code>screen-256color</code>;</li>
    <li id="Bo3f">включена поддержка TrueColor для более точного отображения цветов;</li>
    <li id="DLq3">окна нумеруются с 1, а не с 0 (<code>base-index 1</code>);</li>
    <li id="MOIm">панели в окнах тоже нумеруются с 1 (<code>pane-base-index 1</code>);</li>
    <li id="UAno">лимит буфера истории увеличен до 10,000 строк для прокрутки терминала;</li>
    <li id="eegb">включена мышь! можно щелкать для выбора окон, прокручивать вывод, изменять размер панелей, менять их местами, также доступен вызов контекстного меню через ПКМ;</li>
    <li id="hcom">включено автоматическое обновление заголовков окон терминала;</li>
    <li id="ddC0">используются vi-стиль клавиш для работы в режиме копирования (<code>mode-keys vi</code>) и взаимодействия с командами tmux (<code>status-keys vi</code> вызывается <code>prefix+:</code>);</li>
    <li id="R796">установлена Zsh как оболочка по умолчанию (замените на свою, если используется иная);</li>
    <li id="XkB3">установлена локаль <code>ru_RU.UTF-8</code>, чтобы корректно отображать русские символы.</li>
  </ul>
  <p id="VvJA"><strong>Управление мышью🐁:</strong></p>
  <ul id="LZcN">
    <li id="axqa">Общие действия:</li>
    <ul id="ZOeA">
      <li id="L7DX">двойной клик по строке статуса создает новое окно (<code>bind-key -n DoubleClick1Status new-window</code>);</li>
    </ul>
    <li id="cIM0">Если используется X11-сервер при работы с tmux:</li>
    <ul id="Svj2">
      <li id="Q65z">средняя кнопка мыши вставляет текст из системного буфера обмена (используется <code>xclip</code>);</li>
      <li id="VPjQ">после выделения текста с помощью мыши копирует текст в буфер обмена без очистки выделения;</li>
      <li id="V5qj">в режиме копирования(!) поддерживается выбор слова/строки по двойному/тройному клику:</li>
      <ul id="9ra7">
        <li id="absH">двойной клик ЛКМ: выделяет слово, копирует его в буфер обмена;</li>
        <li id="I4Tp">тройной клик ЛКМ: выделяет строку, копирует её в буфер обмена;</li>
      </ul>
      <li id="Vhx7">нажатие ЛКМ в режиме копирования отменяет текущее выделение;</li>
    </ul>
    <li id="JYZ8">В других средах (если не используется X11):</li>
    <ul id="8IWZ">
      <li id="0PJg">поведение схоже, но текст сохраняется только во внутренний буфер tmux, а не в системный.</li>
    </ul>
  </ul>
  <p id="od0Y"><strong>Клавиатурные сочетания🎹:</strong></p>
  <p id="Zltt">Немного расширены некоторые сочетания клавиш. Подробнее смотрите далее: <a href="https://r4ven.me/it-razdel/poleznoe-po/tmux-ustanovka-i-kastomizaciya-nord-theme/#%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BE%D1%80%D1%8F%D1%87%D0%B8%D0%B5_%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88%D0%B8_Tmux" target="_blank">Пункт 6. Кастомные горячие клавиши Tmux</a>.</p>
  <p id="bYkh"><strong>Список плагинов📋:</strong></p>
  <ol id="KyFQ">
    <li id="KolZ"><code>tmux-plugins/tpm</code> – менеджер плагинов для tmux:</li>
    <ul id="oUUf">
      <li id="mSiM">обеспечивает установку и управление другими плагинами;</li>
    </ul>
    <li id="0rVX"><code>tmux-plugins/tmux-sensible</code> – устанавливает оптимальные настройки tmux по умолчанию;</li>
    <li id="Px2I"><code>arcticicestudio/nord-tmux</code> – устанавливает тему Nord для tmux;</li>
    <li id="Dq6t"><code>tmux-plugins/tmux-resurrect</code> – сохраняет состояние сессий (окна, панели, запущенные процессы) и позволяет восстанавливать сессии после перезапуска tmux;</li>
    <li id="EcvP"><code>tmux-plugins/tmux-continuum</code> – расширение для <code>tmux-resurrect</code>:</li>
    <ul id="KbO0">
      <li id="a29e">автоматически сохраняет сессии через заданные интервалы (60 минут);</li>
      <li id="ZMnE">автоматически восстанавливает сессии при запуске tmux;</li>
      <li id="PNET">активация с помощью юнита systemd:</li>
      <ul id="uxVO">
        <li id="nLC2">см. <code>systemctl status --user tmux</code></li>
      </ul>
    </ul>
  </ol>
  <p id="CFQI"><strong>Дополнительно📦:</strong></p>
  <ul id="Mlag">
    <li id="gktc">автоматическая установка tpm при первом запуске и проверка/установка новых плагинов при каждом запуске/перезапуске;</li>
    <li id="knlx">очистка старых файлов сессий старше 3 дней (в <code>~/.local/share/tmux/resurrect/</code>);</li>
    <li id="G04q">используется система восстановления для Neovim через механизм сессий.</li>
  </ul>
  <h3 id="Cse9">Содержимое файла tmux.conf</h3>
  <p id="BP3p">Дабы не делать из статьи полотно, последняя версия <code>tmux.conf</code> также доступна в <a href="https://github.com/r4ven-me/dots/blob/main/.config/tmux/tmux.conf" target="_blank">моем GitHub</a>.</p>
  <h2 id="N00M">Базовые горячие клавиши Tmux</h2>
  <p id="Elrs">Ниже представлены частоиспользуемые базовые команды/сочетания клавиш tmux. Если планируете регулярно работать в среде tmux, то настоятельно рекомендую их запомнить🤯.</p>
  <p id="2Bxr"><strong>Префикс❗️:</strong></p>
  <p id="PQJ2"><code>Ctrl-b</code> – prefix;</p>
  <p id="Ze9G"><strong>Управление окнами (windows)</strong>🪟:</p>
  <ul id="sWyv">
    <li id="Ic6z"><code>prefix+c</code> – создать новое окно (на статус панели выглядит, как вкладка);</li>
    <li id="VcDQ"><code>prefix+w</code> – показать список окон;</li>
    <li id="Wbyx"><code>prefix+n</code> – переключиться на следующее окно;</li>
    <li id="dmNq"><code>prefix+p</code> – переключиться на предыдущее окно;</li>
    <li id="wvo7"><code>prefix+&lt;номер&gt;</code> – перейти к окну с указанным номером (например, <code>ptefix+1</code> – к первому окну);</li>
    <li id="BO7c"><code>prefix+,</code> – переименовать текущее окно.</li>
  </ul>
  <p id="dsJQ"><strong>Управление панелями (panes)</strong>🎛:</p>
  <ul id="GAAf">
    <li id="Vo94"><code>prefix+%</code> – разделить окно на панели вертикально;</li>
    <li id="pJ7U"><code>prefix+&quot;</code> – разделить окно на панели горизонтально;</li>
    <li id="Bdea"><code>prefix+o</code> – переключиться на следующую панель;</li>
    <li id="8ZU7"><code>prefix+q</code> – показать номера панелей (полезно для выбора);</li>
    <li id="FRiO"><code>prefix+x</code> – закрыть текущую панель;</li>
    <li id="SC0l"><code>prefix+z</code> – развернуть текущую панель на весь экран (и вернуть её обратно);</li>
    <li id="T6tb"><code>prefix+{</code> – переместить панель влево;</li>
    <li id="5AsA"><code>prefix+}</code> – переместить панель вправо;</li>
    <li id="Q5i9"><code>prefix+!</code> – вынести текущую панель в отдельное окно.</li>
  </ul>
  <p id="SJMH"><strong>Управление сессиями</strong>📚:</p>
  <ul id="TFNF">
    <li id="cRb5"><code>tmux new -s &lt;имя&gt;</code> – создать новую сессию с именем;</li>
    <li id="pn8S"><code>tmux ls</code> – показать список сессий;</li>
    <li id="2YTy"><code>tmux attach -t &lt;имя&gt;</code> – подключиться к сессии;</li>
    <li id="AUhH"><code>prefix+d</code> – отсоединиться от текущей сессии.</li>
  </ul>
  <p id="xopo"><strong>Копирование и вставка</strong>📋:</p>
  <ul id="0WtH">
    <li id="BbXO"><code>prefix+[</code> – войти в режим копирования;</li>
    <ul id="sEUp">
      <li id="MgFP"><strong>Стрелки или PgUp/PgDn</strong> – навигация по истории;</li>
      <li id="FTpq"><strong>Пробел</strong> – начать выделение текста;</li>
      <li id="mfXo"><strong>Enter</strong> – скопировать выделенный текст;</li>
      <li id="9aIB"><strong>Esc</strong> – отмена выделения;</li>
      <li id="W4mD"><strong>q</strong> – выход из режима копирования;</li>
    </ul>
    <li id="lrrP"><code>prefix+]</code> – вставить скопированный текст.</li>
  </ul>
  <p id="NfPR"><strong>Дополнительно</strong>📦:</p>
  <ul id="AmEp">
    <li id="ivJJ"><code>prefix+t</code> – показать часы;</li>
    <li id="ocgf"><code>prefix+?</code> – показать справку о всех комбинациях клавиш;</li>
    <li id="iw1q"><code>prefix+s</code> – показать список сессий.</li>
  </ul>
  <h2 id="EK9F">Кастомные горячие клавиши Tmux</h2>
  <p id="N6qf">Добавленные/измененные команды/клавиши из моего конфига.</p>
  <p id="emB3"><strong>Режим копирования и работа с буфером обмена</strong>📝:</p>
  <ol id="Jrqs">
    <li id="tWK2"><code>prefix+v</code> – включает режим копирования (аналог <code>prefix+[</code>);</li>
    <li id="bzUm"><code>v</code> (в режиме копирования) – начинает выделение текста;</li>
    <li id="6Qtm"><code>Enter</code> и <code>y</code> (в режиме копирования, X11):</li>
    <ul id="ltsc">
      <li id="fVzS">копирует выделенный текст в системный буфер обмена с помощью <code>xclip</code>;</li>
      <li id="6lo4">завершает режим копирования;</li>
    </ul>
    <li id="EfhH"><code>y</code> (в режиме копирования, не X11):</li>
    <ul id="e7pG">
      <li id="97MS">копирует выделение в буфер <code>tmux</code>;</li>
      <li id="nh81">завершает режим копирования;</li>
    </ul>
    <li id="7lYL"><code>p</code> (в режиме копирования, X11):</li>
    <ul id="cIGW">
      <li id="2XBT">завершает режим копирования;</li>
      <li id="6Fhl">вставляет содержимое системного буфера обмена с помощью <code>xclip</code>.</li>
    </ul>
    <li id="TZgp"><code>p</code> (в режиме копирования, не X11):</li>
    <ul id="cJZi">
      <li id="zD6M">завершает режим копирования;</li>
      <li id="Q5Ba">вставляет содержимое буфера <code>tmux</code>;</li>
    </ul>
    <li id="RLH5"><code>prefix+]</code> и <code>prefix+P</code> (в обычном режиме, X11):</li>
    <ul id="mHsU">
      <li id="V1FJ">вставляет содержимое системного буфера обмена с помощью <code>xclip</code>;</li>
    </ul>
    <li id="ewHS"><code>prefix+]</code> и <code>prefix+P</code> (в обычном режиме, не X11):</li>
    <ul id="yKaW">
      <li id="1J4J">вставляет содержимое буфера <code>tmux</code>.</li>
    </ul>
  </ol>
  <p id="8cPW"><strong>Навигация между панелями (в стиле vi)</strong>🎛:</p>
  <ul id="SdIe">
    <li id="Xr7j"><code>prefix+h</code> – переключиться на панель слева;</li>
    <li id="bTAH"><code>prefix+j</code>– переключиться на панель снизу;</li>
    <li id="32wm"><code>prefix+k</code> – переключиться на панель сверху;</li>
    <li id="ANxx"><code>prefix+l</code> – переключиться на панель справа.</li>
  </ul>
  <p id="gHzt"><strong>Изменение размеров панелей (в стиле vi)🎛, клавишу команды можно нажимать многократно</strong>:</p>
  <ul id="vRLo">
    <li id="GanU"><code>prefix+H</code> – увеличить панель влево на 2 пикселя;</li>
    <li id="wZiU"><code>prefix+J</code> – увеличить панель вниз на 2 пикселя;</li>
    <li id="3EN9"><code>prefix+K</code> – увеличить панель вверх на 2 пикселя;</li>
    <li id="ntwW"><code>prefix+L</code> – увеличить панель вправо на 2 пикселя.</li>
  </ul>
  <p id="tKvp"><strong>Сохранение и восстановление среды через tmux-resurrect</strong>💾:</p>
  <ol id="IgE9">
    <li id="j9z5"><code>prefix+F5</code>:</li>
    <ul id="suB9">
      <li id="QVgW">сохраняет текущее состояние tmux с помощью <code>tmux-resurrect</code>;</li>
      <li id="znHl">перемещает последнюю сохранённую сессию в файл <code>~/.local/share/tmux/resurrect/main.txt</code> для удобства восстановления;</li>
      <li id="mV1o">показывает сообщение о ручном сохранении;</li>
    </ul>
    <li id="tYPL"><code>prefix+F6</code>:</li>
    <ul id="E2Rm">
      <li id="Rjme">загружает сохранённое состояние из файла <code>main.txt</code>.</li>
    </ul>
  </ol>
  <h2 id="Uiiv">Послесловие</h2>
  <p id="3d4l">Фух😮‍💨. Сегодня в нашем арсенале Linux администратора появился еще один полезный инструмент🧑‍💻. С его помощью крайне удобно обслуживать системы📺, где нет графики, например на серверах, которые работают 24/7. Единожды запустили все необходимые утилиты и после просто подключаемся к запущенной сессии, с помощью короткого алиаса😌.</p>
  <p id="By68">Обязательно подписывайтесь на наш <a href="https://t.me/r4ven_me/" target="_blank">телеграм канал</a>✈️, чтобы не пропустить новых публикаций на сайте🌐. А если у вас остались вопросы, то добавляйтесь в <a href="https://t.me/r4ven_me_chat/" target="_blank">Вороний чат</a>: у нас там дружелюбное микросообщество🐧🚶‍♂️🐧🚶‍♂️🐧🚶‍♂️.</p>
  <p id="8LTm">Спасибо, что читаете😇. Желаю успехов в освоении новых инструментов, которые упрощают рутину и повышают эффективность💪.</p>
  <h2 id="h2qS">Полезные материалы</h2>
  <ul id="e1xB">
    <li id="k7Z2"><a href="https://github.com/r4ven-me/dots/blob/main/.config/tmux/tmux.conf" target="_blank">Мой конфиг Tmux | GitHub</a></li>
    <li id="lC7v"><a href="https://r4ven.me/it-razdel/slovarik/terminalnyj-multipleksor/" target="_blank">Словарик линуксоида: Терминальный мультиплексор | Вороний блог</a></li>
    <li id="E4CS"><a href="https://wiki.archlinux.org/title/Tmux" target="_blank">Tmux | ArchWiki</a></li>
    <li id="hqAy"><a href="https://github.com/tmux/tmux/wiki/Getting-Started" target="_blank">‘Getting started’ из оф. документации | GitHub</a></li>
    <li id="iRxn"><a href="https://github.com/tmux-plugins/tpm" target="_blank">Плагин tpm | GitHub</a></li>
    <li id="Rfsr"><a href="https://github.com/tmux-plugins/tmux-sensible" target="_blank">Плагин tmux-sensible | GitHub</a></li>
    <li id="uNIC"><a href="https://github.com/nordtheme/tmux" target="_blank">Плагин nord-tmux | GitHub</a></li>
    <li id="fBxy"><a href="https://github.com/tmux-plugins/tmux-resurrect" target="_blank">Плагин tmux-resurrect | GitHub</a></li>
    <li id="1sSj"><a href="https://github.com/tmux-plugins/tmux-continuum" target="_blank">Плагин tmux-continuum | GitHub</a></li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/terminalnyj-multipleksor</guid><link>https://teletype.in/@r4ven_me/terminalnyj-multipleksor?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/terminalnyj-multipleksor?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Терминальный мультиплексор</title><pubDate>Mon, 18 Nov 2024 15:05:26 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/c3/13/c3132554-1d82-477e-81ac-dc7b0bd22a82.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/3b/da/3bda85e9-a50f-4479-8fa4-369f07bc39f2.png"></img>Исходный сайт представленного материала: r4ven.me]]></description><content:encoded><![CDATA[
  <figure id="aOyE" class="m_original">
    <img src="https://img4.teletype.in/files/3b/da/3bda85e9-a50f-4479-8fa4-369f07bc39f2.png" width="830" />
    <figcaption>Терминальный мультиплексор</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="HLKe"><strong>Исходный сайт представленного материала: <a href="https://r4ven.me/it-razdel/slovarik/terminalnyj-multipleksor/" target="_blank">r4ven.me</a></strong></p>
  </section>
  <h3 id="nNnm">Приветствую!</h3>
  <p id="HeNe">Сегодня в <a href="https://r4ven.me/it-razdel/slovarik/" target="_blank">словарике линуксоида</a>🐧 <strong>терминальный мультиплексор</strong> – инструмент, который очень часто используется в процессе администрирования Linux систем 🧑‍💻. Как обычно дадим определение термину, поговорим про популярные реализации терминальных мультиплексоров и конечно про их преимущества и недостатки🧐.</p>
  <blockquote id="yBfH">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</blockquote>
  <p id="1Dy9">Также обратите внимание, что этот теоретический пост📗 предшествует будущей статье по установке и настройке популярного мультиплексора <strong>Tmux</strong>🪟.</p>
  <figure id="xopv" class="m_custom">
    <img src="https://img4.teletype.in/files/37/1c/371c5df2-ca73-4f5b-899e-4836756f449b.png" width="562" />
  </figure>
  <h2 id="ec3f">Что такое терминальный мультиплексор?</h2>
  <figure id="QnMJ" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-44.png" width="352" />
  </figure>
  <p id="bPMS">Терминальный мультиплексор (terminal multiplexer) — это инструмент, позволяющий пользователю управлять несколькими сессиями <a href="https://r4ven.me/it-razdel/slovarik/emulyator-terminala/" target="_blank">терминала</a> в одном окне. Он выполняет роль “менеджера окон” для консоли, позволяя запускать и переключаться между множеством процессов и <a href="https://r4ven.me/it-razdel/slovarik/komandnyj-interpretator-ili-obolochka-shell/" target="_blank">оболочек</a>, разделять экран на панели и (самое важное для меня) восстанавливать работу после разрыва соединения, например SSH. Управление происходит с помощью горячих клавиш🎹 и иногда мыши🐭.</p>
  <p id="kSyK">В общем, незаменимый инструмент для продвинутых пользователей Linux😎.</p>
  <h2 id="uGJR">Краткая история</h2>
  <p id="O2la">Идея управления несколькими терминальными сессиями возникла вместе с развитием многозадачности в <a href="https://r4ven.me/it-razdel/slovarik/operacionnaya-sistema-unix/" target="_blank">Unix-подобных системах</a>. Первым популярным инструментом для этих целей стал <strong><code>screen</code></strong> от проекта GNU, выпущенный в 1987 году. Он был прост в использовании и позволял восстановить сессии после разрыва связи🧐.</p>
  <p id="eSrG">Со временем появились новые инструменты, которые предложили более современный функционал. Так в <s>верните мой</s> 2007 году был выпущен <strong>tmux</strong>🔥, который пришел из мира BSD и стал популярной альтернативой <code>screen</code>, благодаря удобной настройке, расширяемости и поддержке сценариев.</p>
  <p id="9GTh">В последние годы появились более современные реализации👀, такие, как <strong>Zellij</strong> и <strong>Wezterm</strong>, нацеленные на улучшение пользовательского опыта.</p>
  <h2 id="rDYL">Популярные реализации, их плюсы и минусы</h2>
  <h3 id="Mob1"><strong>GNU Screen</strong></h3>
  <figure id="YRt7" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-40.png" width="1433" />
    <figcaption>Источник: Habr</figcaption>
  </figure>
  <ul id="aNuP">
    <li id="1Fo4"><strong>Написан на: </strong>С;</li>
    <li id="nCst"><strong>Лицензия:</strong> GPL 3.0;</li>
    <li id="7ERf"><strong>Плюсы:</strong></li>
    <ul id="kteh">
      <li id="I2vW">лёгкость установки (доступен практически во всех <a href="https://r4ven.me/it-razdel/slovarik/repozitorij-programmnogo-obespecheniya/" target="_blank">репозиториях</a>);</li>
      <li id="kubz">простота конфигурации и работы;</li>
      <li id="FbTc">проверенная временем стабильность.</li>
    </ul>
    <li id="YOlM"><strong>Минусы:</strong></li>
    <ul id="MQFh">
      <li id="R8Ev">ограниченный функционал по сравнению с современными аналогами;</li>
      <li id="fQjD">несколько устаревший интерфейс, неудобство настройки горячих клавиш;</li>
      <li id="k8A9">низкая активность разработки в последние годы.</li>
    </ul>
  </ul>
  <h3 id="3ZB0"><strong>Tmux</strong></h3>
  <figure id="Szg3" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-41.png" width="1433" />
    <figcaption>Источник: Habr</figcaption>
  </figure>
  <blockquote id="Xz1t">А вот, как выглядит моя конфигурация Tmux, про которую я расскажу в будущей статье:</blockquote>
  <figure id="BdkC" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/tmux-e1731870090468-1500x869.png" width="1500" />
  </figure>
  <ul id="riWA">
    <li id="9gss"><strong>Написан на: </strong>С;</li>
    <li id="GqHi"><strong>Лицензия:</strong> ISC (BSD);</li>
    <li id="0iDZ"><strong>Плюсы:</strong></li>
    <ul id="cQKs">
      <li id="mWJb">гибкость настройки, возможность создавать сложные конфигурации;</li>
      <li id="xX0e">активное сообщество и регулярные обновления;</li>
      <li id="oNud">поддержка плагинов для расширения функциональности🤯;</li>
      <li id="YYmw">улучшенное управление окнами и панелями.</li>
    </ul>
    <li id="bGLM"><strong>Минусы:</strong></li>
    <ul id="hglW">
      <li id="uf6D">кривая обучения для новичков (особенно настройка конфигурационного файла);</li>
      <li id="kupY">некоторые функции требуют установки сторонних плагинов.</li>
    </ul>
  </ul>
  <h3 id="qJQ2"><strong>Zellij</strong></h3>
  <figure id="hGdJ" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-42-1500x790.png" width="1500" />
    <figcaption>Источник: zellij.dev</figcaption>
  </figure>
  <ul id="nGzH">
    <li id="kgiO"><strong>Написан на: </strong>Rust;</li>
    <li id="jImo"><strong>Лицензия:</strong> MIT;</li>
    <li id="tpWv"><strong>Плюсы:</strong></li>
    <ul id="18dd">
      <li id="x6pS">интуитивный интерфейс и продуманная система горячих клавиш;</li>
      <li id="7YP6">расширенные возможности для работы с несколькими пользователями;</li>
      <li id="k9HI">современный дизайн и активно развивающийся проект.</li>
    </ul>
    <li id="hrYZ"><strong>Минусы:</strong></li>
    <ul id="PV0l">
      <li id="0Afx">молодой инструмент, не такой стабильный, как <code>tmux</code> или <code>screen</code>;</li>
      <li id="OX7M">меньшее количество плагинов и документации.</li>
    </ul>
  </ul>
  <h3 id="UMex"><strong>Wezterm</strong></h3>
  <figure id="Yb9H" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-43-1500x851.png" width="1500" />
    <figcaption>Источник: GitHub</figcaption>
  </figure>
  <ul id="oyf5">
    <li id="KYW4"><strong>Написан на: </strong>Rust;</li>
    <li id="sZyK"><strong>Лицензия:</strong> MIT;</li>
    <li id="dq6l"><strong>Плюсы:</strong></li>
    <ul id="eTle">
      <li id="x94l">интеграция с современными терминалами и поддержка GPU-рендеринга;</li>
      <li id="h2P4">расширенные возможности кастомизации интерфейса посредством Lua;</li>
      <li id="Iue3">по сути является полноценным терминалом.</li>
    </ul>
    <li id="uN0l"><strong>Минусы:</strong></li>
    <ul id="CEk6">
      <li id="tndG">сложность настройки для начинающих;</li>
      <li id="Hbak">менее популярный в сообществе инструмент, поэтому сложнее найти помощь.</li>
    </ul>
  </ul>
  <h2 id="S3pR">Заключение</h2>
  <p id="x7f1">Выбор терминального мультиплексора зависит, конечно же, от ваших требований и вкусов🤷‍♂️.</p>
  <p id="Lehq">Я предпочитаю работать в <strong>Tmux</strong>, т.к. это был первый мультиплексор, с которым я познакомился😌. Еще конечно немаловажный фактор – это время и ресурсы, которые я потратил на настройку Tmux🤯, чтобы превратить его в идеальный для меня инструмент работы с консолью.</p>
  <p id="hHid">Если вы часто находитесь в окне терминала, но еще не работали с терминальными мультиплексорами, рекомендую обратить на них внимание👍.</p>
  <p id="LDQz">Подписывайтесь на <strong>Вороний блог</strong> в телеграм: <a href="https://t.me/r4ven_me" target="_blank">@r4ven_me</a>📱, чтобы не пропустить новые посты. Если возникли вопросы или желание пообщаться по теме – заглядывайте в наш чат там же: <a href="https://t.me/r4ven_me_chat" target="_blank">@r4ven_me_chat</a>💬. У нас вежливое микросообщество🤓.</p>
  <h2 id="geZB">Полезные источники</h2>
  <ul id="U0nB">
    <li id="ZU7z"><a href="https://en.wikipedia.org/wiki/Terminal_multiplexer" target="_blank">Терминальный мультиплексор | Википедия (EN)</a></li>
    <li id="qLzE"><a href="https://habr.com/ru/companies/otus/articles/646037/" target="_blank">Терминальные мультиплексоры | Habr</a></li>
    <li id="v02s"><a href="https://wiki.archlinux.org/title/GNU_Screen" target="_blank">GNU Screen | ArchWiki (EN)</a></li>
    <li id="2i83"><a href="https://wiki.archlinux.org/title/Tmux" target="_blank">Tmux | ArchWiki (EN)</a></li>
    <li id="sC0c"><a href="https://zellij.dev/" target="_blank">Zellij | Сайт проекта (EN)</a></li>
    <li id="90Ge"><a href="https://wezfurlong.org/wezterm/index.html" target="_blank">Wezterm | Сайт проекта (EN)</a></li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/ansible-znakomstvo</guid><link>https://teletype.in/@r4ven_me/ansible-znakomstvo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/ansible-znakomstvo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Ansible – система управления конфигурациями: знакомство</title><pubDate>Thu, 07 Nov 2024 19:54:53 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/37/83/3783aeba-d547-4861-9ba5-32b1be0d8268.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/44/2f/442f0b73-4126-4a38-9182-9f2e297b4e30.png"></img>В этой заметке мы с вами познакомимся с популярной open source системой управления конфигурациями с говорящим названием – Ansible🎻. Выполним установку и настройку🛠, составим инвентаризацию📋, научимся запускать плейбуки🚀, поговорим про Ansible facts🗂, узнаем, что такое Ansible console🖥 и напишем playbook📝 который правит конфиг sshd и копирует файлы на сервер. Будет познавательно😉!]]></description><content:encoded><![CDATA[
  <figure id="5E1S" class="m_original">
    <img src="https://img1.teletype.in/files/44/2f/442f0b73-4126-4a38-9182-9f2e297b4e30.png" width="1024" />
    <figcaption>Ansible – система управления конфигурациями: знакомство</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="GF6O">Исходный сайт представленного материала: <a href="https://r4ven.me/it-razdel/zametki/ansible-sistema-upravleniya-konfiguraciyami-znakomstvo/" target="_blank">r4ven.me</a></p>
  </section>
  <h3 id="byxQ">Приветствую!</h3>
  <p id="uUZs">В этой заметке мы с вами познакомимся с популярной <a href="https://r4ven.me/it-razdel/slovarik/otkrytoe-po/" target="_blank">open source</a> системой <a href="https://r4ven.me/it-razdel/slovarik/sistema-upravleniya-konfiguraciyami/" target="_blank">управления конфигурациями</a> с говорящим названием – <strong>Ansible</strong>🎻. Выполним установку и настройку🛠, составим инвентаризацию📋, научимся запускать плейбуки🚀, поговорим про Ansible facts🗂, узнаем, что такое Ansible console🖥 и напишем playbook📝 который правит конфиг sshd и копирует файлы на сервер. Будет познавательно😉!</p>
  <blockquote id="87je">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</blockquote>
  <figure id="wo6R" class="m_original">
    <img src="https://img3.teletype.in/files/a3/a0/a3a02582-38da-4db9-a154-e7f1ed22e8f1.png" width="712" />
  </figure>
  <h2 id="JLcp">Предисловие</h2>
  <p id="DmKs">Чтобы чуть лучше понимать суть происходящего, рекомендую прочитать мою <a href="https://r4ven.me/it-razdel/slovarik/sistema-upravleniya-konfiguraciyami/" target="_blank">теоретическую заметку</a>📝 про системы управления конфигурациями (Cofiguration Management, CM). В ней дано описание термина, какие виды существуют, а также коротко рассказано про популярные реализации подобных систем и их отличия.</p>
  <p id="EEl8">Возвращаясь к Ansible, с его помощью можно автоматизировать конфигурацию серверов путем описания желаемого состояния в удобном формате <strong>yaml</strong>. Стоит также отметить, что операции Ansible имеют свойство <strong>идемпотентности</strong>🙄. Это означает, что, если вы запускаете плейбук или задачу несколько раз, состояние системы не изменится после первого успешного выполнения.</p>
  <p id="GmGE">Ну и прежде, чем мы продолжим углубляться перечислю основные сущности данной CM📒:</p>
  <ul id="0Qkh">
    <li id="2xuK"><strong>Control node</strong> — управляющий сервер, на котором установлен Ansible и с которого запускаются команды и Playbooks с помощью SSH;</li>
    <li id="wcOw"><strong>Managed nodes</strong> — управляемые серверы, на которых Ansible выполняет задачи, не требуют установки Ansible на них;</li>
    <li id="xSGP"><strong>Inventory file</strong> — файл(ы) (обычно <code>inventory.yml</code>), содержащий список управляемых узлов и их групп для логического объединения. В нем указываются IP-адреса, DNS имена, порты и пользовательские переменные;</li>
    <li id="dyJC"><strong>Configuration file</strong> — файл конфигурации Ansible (по умолчанию <code>ansible.cfg</code>), где задаются настройки, например, путь к файлу инвентаря, параметры SSH и другие параметры, позволяющие настроить поведение Ansible под конкретные нужды;</li>
    <li id="ljRY"><strong>Variables</strong> — переменные, которые можно использовать для гибкой настройки задач и параметров. Переменные могут определяться на разных уровнях: в файле инвентаризации, плейбуке, ролях, командах и динамически собираться;</li>
    <li id="Ued6"><strong>Playbook</strong> — файл сценария в формате YAML, описывающий, какие задачи нужно выполнить на каких узлах;</li>
    <li id="0Uht"><strong>Facts</strong> (факты) — информация об управляемом сервере в виде системных переменных (например, тип и версия ОС, IP-адрес, версии пакетов и пр.), автоматически собираемая Ansible. Часто используются для описания условий выполнения задач (tasks);</li>
    <li id="eDB9"><strong>Task </strong>— отдельное задание, выполняемое на управляемом узле. Это атомарная инструкция (например, установка пакета), описанная с помощью Ansible module;</li>
    <li id="hA7A"><strong>Module</strong> — готовый модуль из библиотеки Ansible для выполнения конкретной задачи, например, копирование файла, управление сервисами, установка пакетов и пр.;</li>
    <li id="QGAG"><strong>Handler</strong> (обработчик) — задача, которая запускается только при изменении состояния (например, перезапуск сервиса), вызывается из задачи через параметр <code>notify</code>;</li>
    <li id="lFC7"><strong>Template</strong> — файл шаблона (в формате Jinja2), который позволяет, например, создавать динамические файлы конфигурации с использованием переменных и конструкций, свойственным языкам программирования (фильтры, циклы, условные выражения и т.д.), тут можно утонуть;</li>
    <li id="oGWY"><strong>Role</strong> — структура файлов и директорий для удобной организации задач, шаблонов, файлов переменных для Playbook. По сути, это плейбук, раздробленный на отдельные файлы/папки для большего удобства и наглядности;</li>
    <li id="tPD4"><strong>Plugins</strong> – дополнения Ansible, расширяющие его функционал.</li>
  </ul>
  <h2 id="SWWy">Установка Ansible в Debian / Ubuntu / Linux mint</h2>
  <p id="adBx">Пример установки я буду показывать в среде <a href="https://r4ven.me/it-razdel/slovarik/distributiv-linux/" target="_blank">дистрибутива</a> Debian 12😎:</p>
  <figure id="GiMd" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-17.png" width="1144" />
  </figure>
  <p id="V3zy">Т.к. Ansible работает по <strong>push</strong> принципу (т.е. все управление происходит с административного сервера), то и устанавливать его необходимо только на одной машине. На управляемых серверах понадобится установленный Python🐍 и доступ по SSH.</p>
  <blockquote id="YtQf">Подробнее про использование и настройку SSH в Linux, в т.ч. и работу с ключами, читайте в отдельной инструкции: <a href="https://r4ven.me/it-razdel/zametki/ssh-bezopasnoe-podklyuchenie-k-udalyonnym-hostam-vvedenie/" target="_blank">SSH – Безопасное подключение к удалённым хостам: введение</a>.</blockquote>
  <p id="2fj1">Все необходимые пакеты Ansible есть в стандартных <a href="https://r4ven.me/it-razdel/slovarik/repozitorij-programmnogo-obespecheniya/" target="_blank">репозиториях</a>🗄. Поэтому просто открываем терминал и вводим команду:</p>
  <pre id="SMor">sudo apt update &amp;&amp; sudo apt install -y ansible sshpass</pre>
  <figure id="jlfT" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image.png" width="1302" />
  </figure>
  <p id="xBJt">Также мы устанавливаем утилиту <strong>sshpass</strong>, которая понадобится для передачи пароля при соответствующей SSH аутентификации, а также получение полномочий через <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-povyshenie-privilegij-komandy-su-sudo/" target="_blank">sudo</a>💪.</p>
  <p id="lxAg">Зависимостей много, поэтому установка займет некоторое время⏳.</p>
  <h2 id="ebmk">Настройка Ansible – файл <code>ansible.cfg</code></h2>
  <p id="p4jl">Переходим к начальной настройке. Для этого создаем необходимые директории и файл конфигурации. Открываем его любым текстовым редактором (я предпочитаю <a href="https://r4ven.me/it-razdel/poleznoe-po/vim-konsolnyj-redaktor-znakomstvo/" target="_blank">vim/neovim</a>)🧑‍💻:</p>
  <pre id="GrXu">mkdir -p ~/ansible/{playbooks,roles,tmp}

nvim ~/ansible/ansible.cfg</pre>
  <figure id="cqoW" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-1.png" width="1296" />
  </figure>
  <p id="vq8E">И наполняем его:</p>
  <pre id="zSsc">[defaults]
home = ~/ansible/                    ; основная директория Ansible
local_tmp = ~/ansible/tmp/           ; локальная временная директория для выполнения задач
inventory = ~/ansible/inventory.yml  ; путь к файлу инвентаря с перечнем хостов
playbook_dir = ~/ansible/playbooks/  ; директория, где хранятся плейбуки
roles_path = ~/ansible/roles/        ; директория, где Ansible ищет роли
remote_user = ivan                   ; пользователь, под которым Ansible подключается к хостам
become_method = sudo                 ; метод повышения прав (sudo, su)
become_user = root                   ; пользователь, от имени которого выполняются sudo команды
gather_facts = True                  ; собирать факты о системе перед выполнением задач
private_key_file = ~/ansible/id_ed25519  ; путь к приватному ключу для подключения по SSH
host_key_checking = False            ; отключает проверку ключей хоста SSH
fact_caching = jsonfile              ; кэширование фактов с использованием формата json
fact_caching_connection = ~/ansible/tmp/  ; путь для хранения кэшированных фактов</pre>
  <figure id="tAoR" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-4.png" width="1309" />
  </figure>
  <blockquote id="JlPn">Понравился мой конфиг Neovim? Можете с легкостью создать аналогичный по статье: <a href="https://r4ven.me/it-razdel/poleznoe-po/neovim-ustanovka-i-nastrojka-redaktora-koda-s-elementami-ide-vsego-v-neskolko-komand/" target="_blank">Neovim – Установка и настройка редактора кода с элементами IDE всего в несколько команд</a>.</blockquote>
  <figure id="cKc9" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-38.png" width="344" />
  </figure>
  <p id="DZ9o">Такой конфигурации достаточно, чтобы начать использовать Ansible👍. Этот файл определяет поведение Ansible по умолчанию, которое может быть переопределено в других местах: файлах инвентаризации, плейбуках, файлах переменных, командах или в других конфигах.</p>
  <p id="iBto">Если есть потребность изучить все доступные параметры файла конфигурации🤓, то его можно сгенерировать такой командой:</p>
  <pre id="2eUZ">ansible-config init --disabled &gt; ~/ansible/ansible.cfg.example</pre>
  <p id="7QbS">Файл хорошо прокомментирован🧐.</p>
  <blockquote id="TwZL">Подробнее про процесс конфигурации смотрите на оф. сайте: <a href="https://docs.ansible.com/ansible/latest/reference_appendices/config.html" target="_blank">Ansible Configuration Settings</a>.</blockquote>
  <p id="4Yo1">Также для удобства, рекомендую сразу добавить переменную окружения, указывающую на наш дефолтный файл конфига:</p>
  <pre id="XGTO">export ANSIBLE_CONFIG=&quot;$HOME/ansible/ansible.cfg&quot;

# для создания переменной при входе в систему
echo &#x27;export ANSIBLE_CONFIG=&quot;$HOME/ansible/ansible.cfg&quot;&#x27; &gt;&gt; ~/.profile</pre>
  <figure id="LMnV" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-3.png" width="1297" />
  </figure>
  <blockquote id="dKRd">Замените <code>~/.profile</code> на файл загрузки окружения вашей оболочки. В моем случае используется <a href="https://r4ven.me/it-razdel/instrukcii/zsh-interaktivnaya-komandnaya-obolochka-dlya-linux-oh-my-zsh/" target="_blank">интерактивная оболочка ZSH</a>.</blockquote>
  <p id="k61i">В таком случае можно будет пользоваться командами Ansible из любой директории без явного указания пути до файла с настройками😌.</p>
  <blockquote id="aqST">Полный список доступных переменных окружения также смотрите в оф. доке: <a href="https://docs.ansible.com/ansible/latest/reference_appendices/config.html#environment-variables" target="_blank">Environment Variables</a>.</blockquote>
  <h2 id="vjH3">Инвентаризация – файл <code>inventory.yml</code></h2>
  <p id="PeUQ">Переходим к инвентаризации хозяйства, которым будем управлять. Для этого создаем файл инвентаря:</p>
  <pre id="jxI1">nvim ~/ansible/inventory.yml</pre>
  <figure id="pg4V" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-5.png" width="1198" />
  </figure>
  <p id="ETpm">И добавляем в него список наших серверов📋, которыми будем управлять. В моем примере 5 Linux серверов (<strong>3</strong> – Debian, <strong>2</strong> – Ubuntu):</p>
  <pre id="16n2">## HOSTS
all:
  hosts:
    debian12-vpn:
      ansible_host: 192.168.122.93
      ansible_port: 22
      ansible_user: ivan
      ansible_ssh_private_key_file: ~/.ssh/id_ed25519
      project: vpn
    debian12-dns:
      ansible_host: 192.168.122.201
      ansible_port: 22
      ansible_user: ivan
      ansible_ssh_private_key_file: ~/.ssh/id_ed25519
      project: vpn
    debian12-monitoring:
      ansible_host: 192.168.122.30
      ansible_port: 22
      ansible_user: ivan
      ansible_ssh_private_key_file: ~/.ssh/id_ed25519
      project: monitor
    ubuntu22-storage:
      ansible_host: 192.168.122.5
      ansible_port: 22
      ansible_user: ivan
      ansible_ssh_private_key_file: ~/.ssh/id_ed25519
      # ansible_password: &quot;Pa$$w0rD&quot;
      project: storage
    ubuntu22-backup:
      ansible_host: 192.168.122.249
      ansible_port: 22
      ansible_user: ivan
      ansible_ssh_private_key_file: ~/.ssh/id_ed25519
      # ansible_become_password: &quot;Pa$$w0rD&quot;
      project: storage

## GROUPS
debian:
  hosts:
    debian12-vpn:
    debian12-dns:
    debian12-monitoring:
ubuntu:
  hosts:
    ubuntu22-storage:
    ubuntu22-backup:</pre>
  <p id="XKUT">Не забудьте заменить параметры на свои 😉</p>
  <figure id="T2jU" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-2.png" width="1298" />
  </figure>
  <p id="2ccd">Сохраняем, закрываем.</p>
  <blockquote id="qsch">Имейте в виду, что формат <strong>YAML</strong> отступозависимый. Это значит, что отступы являются частью синтаксиса, и даже один неправильный пробел приведет к ошибке.</blockquote>
  <p id="fNiq">Коротко опишу содержимое на примере сервера <strong>debian12-vpn</strong>:</p>
  <ul id="T399">
    <li id="USSl"><code>debian12-vpn</code> – произвольное имя хоста в файле инвентаризации;</li>
    <li id="cfTq"><code>ansible_host: 192.168.122.93</code> – адрес хоста (IP или DNS);</li>
    <li id="tqeu"><code>ansible_port: 22</code> – порт подключения SSH;</li>
    <li id="ZMEu"><code>ansible_user: ivan</code> – пользователь SSH, с помощью которого выполняется подключение;</li>
    <li id="qUVe"><code>ansible_ssh_private_key_file: ~/.ssh/id_ed25519</code> – путь до приватного SSH ключа (переопределяет значение из <code>ansible.cfg</code>);</li>
    <ul id="SKo9">
      <li id="NYHQ">Нежелательная альтернатива: <code>ansible_password</code> – пароль подключения по SSH;</li>
    </ul>
    <li id="vZtz"><code>project: vpn</code> – пользовательская переменная для данного хоста.</li>
  </ul>
  <p id="0gFs">Также обратите внимание, что после списка хостов идет список групп🖥🖥:</p>
  <ul id="E2dO">
    <li id="jlcx"><code>debian</code></li>
    <li id="7KYU"><code>ubuntu</code></li>
  </ul>
  <p id="GghL">которые включают в себя хосты, разделенные по ОС (в моем случае). Группы также формируются произвольно, главное соблюдайте синтаксис.</p>
  <blockquote id="Uayw">Весь список доступных параметров подключения для файла <strong>inventory</strong> смотрите тут: <a href="https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html#connecting-to-hosts-behavioral-inventory-parameters" target="_blank">Connecting to hosts: behavioral inventory parameters</a>.</blockquote>
  <p id="Ptx0">Наш файл инвентаря составлен, давайте посмотрим на его структуру такой командой:</p>
  <pre id="1cRo">ansible-inventory --graph</pre>
  <figure id="6fOu" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-6.png" width="1307" />
  </figure>
  <p id="ngXt">Эта визуализация особенно полезна, если у вас большая инфраструктура из сотен серверов, разбитых на группы📊.</p>
  <h2 id="vczC">Пишем первый плейбук: проверка доступности серверов с помощью модуля <code>ping</code></h2>
  <p id="C336">В контексте Ansible модуль <code>ping</code> не выполняет ping сервера в классическом понимании🤷‍♂️. Его задача произвести подключение к серверу по SSH, выполнить некоторые проверки (например наличие интерпретатора Python) и вернуть сообщение об успехе/ошибке👀.</p>
  <p id="HOH7">Создаем файл плейбука в директории, которую мы обозначили в файле конфигурации:</p>
  <pre id="gNIk">nvim ~/ansible/playbooks/ping.yml</pre>
  <figure id="pQQO" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-10.png" width="1208" />
  </figure>
  <p id="ZWPr">В самом простом виде плейбук выглядит так:</p>
  <pre id="mX9O">---

- name: Check connection

  hosts: all
  gather_facts: false
  tasks:
    - name: Ping
      ping:</pre>
  <figure id="87wh" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-11.png" width="1163" />
  </figure>
  <p id="IgG5">Где:</p>
  <ul id="0VWu">
    <li id="DKt5"><code>hosts: all</code> – список хостов, на которых требуется выполнить плейбук (в данном примере на всех);</li>
    <li id="DSgp"><code>gather_facts: false</code> – отключает сбор фактов (про них будет ниже);</li>
    <li id="Qpje"><code>tasks</code> – блок со списком задач, выполняемых на управляемых хостах, в данном случае одна задача: <code>ping</code>.</li>
  </ul>
  <p id="cwnP">Сохраняем файл и запускаем плейбук:</p>
  <pre id="jPHB">ansible-playbook ./ansible/playbooks/ping.yml</pre>
  <figure id="TMAo" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-12-1500x681.png" width="1500" />
  </figure>
  <blockquote id="nca6">При использовании команды <code>ansible-playbook</code> путь до плейбуков нужно указывать явно. Чтобы не делать этого каждый раз, для удобства можно создать короткую функцию и вызывать ее в консоли (смотрите <a href="https://r4ven.me/?p=5422&preview=true#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8E_%D0%B4%D0%BB%D1%8F_%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0_%D0%BF%D0%BB%D0%B5%D0%B9%D0%B1%D1%83%D0%BA%D0%BE%D0%B2" target="_blank">далее в статье</a>).</blockquote>
  <p id="w53b">В моем примере доступ до серверов настроен по ключам SSH. Поэтому проверка доступности выполнена успешно😎.</p>
  <figure id="5QF3" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-28.png" width="432" />
  </figure>
  <p id="X8sl">Если вы используете пароль (что не рекомендуется)😳 можете задать его в файле <code>ansible.cfg</code> (параметр <code>ansible_password</code>) или передать интерактивно с помощью ключа <code>--ask-pass</code> (для этого мы устанавливали пакет <code>sshpass</code>):</p>
  <pre id="sQps">ansible-playbook ./ansible/playbooks/ping.yml --ask-pass</pre>
  <p id="3I14">В случае каких-либо ошибок, Ansible выведет страшного вида красные сообщения⛔️. Например, при недоступности хоста по SSH такое:</p>
  <figure id="pIZa" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-13-1500x672.png" width="1500" />
  </figure>
  <p id="Y5zR">Чтобы запустить плейбук на указанной группе серверов, можно их явно указать в команде через параметр <code>-l</code> (limit):</p>
  <pre id="MvO3">ansible-playbook ./ansible/playbooks/ping.yml -l ubuntu</pre>
  <figure id="abZw" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-14-1500x428.png" width="1500" />
  </figure>
  <figure id="RlFU" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-34.png" width="750" />
  </figure>
  <p id="NKfH">Для запуска плейбука от имени привилегированного пользователя💪 добавьте ключ <code>-b</code> (become). В моем примере модуль ping запуститься от имени root:</p>
  <pre id="uHDH">ansible-playbook ./ansible/playbooks/ping.yml -b</pre>
  <figure id="AMLR" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-17-1500x672.png" width="1500" />
  </figure>
  <p id="g60d">В моей конфигурации серверов настроен беспарольный доступ к root через <code>sudo</code> (т.к. у меня тестовый стенд🛠), поэтому все отработало корректно. Но если у вас доступ по паролю, его можно передать в файле <code>ansible.cfg</code> (параметр <code>ansible_become_password</code>, не рекомендуется) или ввести интерактивно, с помощью ключа <code>--ask-become-pass</code>:</p>
  <pre id="UYXM">ansible-playbook ./ansible/playbooks/ping.yml -b --ask-become-pass</pre>
  <p id="QGbV">Ну а для безопасной автоматизации передачи паролей используется шифрование с помощью <code>ansible-vault</code>, но это тема для отдельной статьи😉.</p>
  <figure id="BFmJ" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-35.png" width="480" />
  </figure>
  <blockquote id="RlW9">Если что, вот <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html" target="_blank">документация по модулю ping</a>.</blockquote>
  <h2 id="W0sz">Ansible facts – модули <code>setup</code> и <code>debug</code></h2>
  <p id="DkSL">Как уже ранее говорилось, факты Ansible (facts) – это информация об управляемом сервере в виде системных переменных, таких как тип и версия ОС, IP-адрес, версии пакетов и пр., автоматически собираемая Ansible во время выполнения плейбуков (если активирован флаг <code>gather_facts</code>) и команд🤯.</p>
  <p id="BQQ3">Давайте теперь соберем эти факты, чтобы понять, как они выглядят👨‍🏭. Для этого используется стандартный модуль <strong>setup</strong>. Выполняем:</p>
  <pre id="pqlY">ansible all -m setup</pre>
  <blockquote id="r6Wf"><code>all</code> – тут логично представляет всех хостов из файла инвентаря. Тут также можно указать любой хост отдельно, список хостов через запятую или группу.</blockquote>
  <p id="CZuY">В зависимости от количества хостов, сбор фактов может занять какое-то время. В выводе команды вы увидите все собранные факты в формате json:</p>
  <figure id="hiuf" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-7.png" width="1308" />
  </figure>
  <p id="dGIZ">Факты можно фильтровать, например так:</p>
  <pre id="HxGM">ansible debian12-vpn -m setup -a &#x27;filter=os_family,distribution_version&#x27;</pre>
  <p id="q9AS">Ранее в файле <code>ansible.cfg</code> мы настроили кэширование фактов с помощью <code>fact_caching</code>☝️.</p>
  <p id="6jk4">Это значит, что собранные факты будут сохранятся в виде <code>json</code> файлов во временной директории <code>~/ansible/tmp</code>, которую мы также обозначили в файле конфига:</p>
  <pre id="tVFP">ls -l ./ansible/tmp/</pre>
  <figure id="50I0" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-8.png" width="1300" />
  </figure>
  <p id="15RM">Часто необходимо получить значения только конкретных фактов или переменных. Это можно сделать с помощью модуля <code>debug</code>🔨 в плейбуках или прямо в терминале.</p>
  <p id="Sa8G">Вот пример получения информации об OS, объеме диска <code>/dev/sda1</code>, переменной project и выводе shell команды на сервере <strong>debian12-vpn</strong> в playbook:</p>
  <pre id="ft35">nvim ./ansible/playbooks/debug.yml</pre>
  <pre id="HJJ6">---

- name: Debug

  hosts: debian12-vpn
  gather_facts: true
  become: true

  tasks:

    - name: Debug 1
      debug:
        msg: &quot;Example to use var: {{ ansible_facts.os_family }}&quot;

    - name: Debug 2
      debug:
        var: ansible_facts.distribution_version

    - name: Debug 3
      debug:
        var: project

    - name: Shell 1
      shell:
        cmd: whoami
      register: user_name

    - name: Debug 4
      debug:
        var: user_name.stdout</pre>
  <p id="9G4o">И запускаем:</p>
  <pre id="ECvi">nvim ./ansible/playbooks/debug.yml</pre>
  <figure id="9pi7" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-39-1500x872.png" width="1500" />
  </figure>
  <p id="5dEZ">Просмотр фактов с помощью команд в терминале:</p>
  <blockquote id="2eEQ">В этом случае факты будут взяты из кэша.</blockquote>
  <pre id="fpN9">ansible debian12-vpn -m debug -a &#x27;var=ansible_facts.os_family,ansible_facts.distribution_version&#x27;

ansible debian12-vpn -m debug -a &#x27;var=ansible_facts.devices.keys()&#x27;

ansible debian12-vpn -m debug -a &#x27;var=ansible_facts.devices.sda.partitions.sda1.size&#x27;</pre>
  <figure id="L5MO" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-9-1500x826.png" width="1500" />
  </figure>
  <p id="en2s">Можно было заметить, что обращение к фактам происходит с помощью синтаксиса точки, как в Python (ansible написан на этом языке👌).</p>
  <blockquote id="DFZt">Подборную инфу по сбору фактов также смотрите на оф сайте: <a href="https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_vars_facts.html" target="_blank">Discovering variables: facts and magic variables</a>. Инфа по модулю debug <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/debug_module.html" target="_blank">тут</a>.</blockquote>
  <h2 id="X6g8">Выполнение shell команд в терминале на нескольких серверах одновременно</h2>
  <p id="SH9Z">С помощью Ansible и стандартного модуля <code>shell</code> можно выполнять удаленные команды сразу на множестве серверов🧑‍💻💻💻💻. Это очень удобно для дебага или выполнения простых операций.</p>
  <p id="Py6W">Удаленная команда передается в кавычках с помощью ключа <code>-a</code>. Например, вывести список сетевых интерфейсов их IP адресов:</p>
  <pre id="0XZK">ansible all -m shell -a &#x27;ip -br a&#x27;</pre>
  <figure id="LAlY" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-15-1500x674.png" width="1500" />
  </figure>
  <p id="bJwO">Или выполнить команду из нашей <a href="https://r4ven.me/it-razdel/linux-quiz/" target="_blank">Linux викторины</a>🧐, которая выводит uptime сервера в формате <a href="https://r4ven.me/it-razdel/slovarik/operacionnaya-sistema-unix/" target="_blank">Unix</a> time:</p>
  <pre id="hafk">ansible debian12-vpn,ubuntu22-storage -m shell -a &#x27;date -d &quot;$(uptime -s)&quot; +%s&#x27;</pre>
  <figure id="qtio" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-16-1500x247.png" width="1500" />
  </figure>
  <p id="S1Lh">Для запуска команд от имени привилегированного пользователя также используется <code>-b</code>:</p>
  <pre id="Wb71">ansible all -m shell -a &#x27;whoami&#x27; -b</pre>
  <figure id="I7OS" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-18.png" width="934" />
  </figure>
  <h2 id="9YhH">Что такое Ansible console</h2>
  <p id="iwZz">В комплекте с Ansible идет такой полезные инструмент, как <code>ansible-console</code>😏. Это интерактивная оболочка для выполнения команд на нескольких серверах. Похоже на команды модуля <code>shell</code>, которые мы выполняли ранее, но способ взаимодействия немного другой:</p>
  <pre id="y7RD">ansible-console

whoami</pre>
  <figure id="98kS" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-19.png" width="1082" />
  </figure>
  <blockquote id="RR6R">Для выхода введите <code>exit</code> или нажмите сочетание клавиш <code>Ctrl+d</code>.</blockquote>
  <p id="y12q">Пример использования модуля <code>ping</code> группы debian:</p>
  <pre id="bM2s">ansible-console debian

ping</pre>
  <figure id="G1lv" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-20.png" width="1186" />
  </figure>
  <p id="poIW">Просмотр фактов Ansible:</p>
  <pre id="cywS">setup filter=ansible_hostname</pre>
  <figure id="cJ6b" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-21.png" width="1192" />
  </figure>
  <p id="Nynn">Для выполнения привилегированных команды, добавьте ключ <code>-b</code> (но будьте осторожны!):</p>
  <pre id="Ao4y">ansible-console debian -b

whoami</pre>
  <figure id="rbKH" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-22.png" width="1188" />
  </figure>
  <p id="ipfC">При выполнении удаленных команд <code>ansible-console</code> по умолчанию используется модуль <strong>command</strong>❗️. Он вызывает команды напрямую, поэтому некоторые <code>shell</code> механизмы тут работать не будут. Для задействования shell укажите его явно:</p>
  <pre id="oDNV">shell echo $HOME</pre>
  <figure id="bGUs" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-23.png" width="1181" />
  </figure>
  <h2 id="Y7T6">Документация Ansible прямо в терминале</h2>
  <p id="UFjr">У Ansible очень хорошая документация (правда на английском🙄) и она доступна даже из консоли с помощью утилиты <code>ansible-doc</code>. Например, чтобы посмотреть описание и примеры использования модуля <strong>systemd</strong> выполните:</p>
  <pre id="lk7F">ansible-doc systemd</pre>
  <figure id="qoLQ" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-24.png" width="1175" />
  </figure>
  <p id="eP9b">Вы попадете в режим просмотра <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-vyvod-i-chtenie-soderzhimogo-komandy-echo-cat-less/" target="_blank">less</a>. Обычно примеры использования модулей в плейбуках находятся внизу документации:</p>
  <figure id="BSui" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-25.png" width="1178" />
  </figure>
  <p id="Q8vA">Как по мне, это очень удобно!</p>
  <h2 id="eSTK">Пример ansible playbook: правка конфига sshd и копирование SSH ключа</h2>
  <p id="xU9e">В качестве практики напишем плейбук📝, который:</p>
  <ul id="9LWq">
    <li id="rRXX">на всех серверах:</li>
    <ul id="PWjm">
      <li id="BY7M">изменит номер порта подключения SSH;</li>
      <li id="sRHU">отключит доступ по паролю на сервер по SSH;</li>
      <li id="n5Ju">создаст директорию <code>~/.ssh</code>, если она не существует;</li>
      <li id="ftb4">добавить новый публичный ssh ключ для авторизации по ключу.</li>
    </ul>
    <li id="2fP2">на серверах, у которых переменная “project” равна “vpn”:</li>
    <ul id="erHZ">
      <li id="uuoh">скопирует файл приватного ключа SSH с локальной машины в директорию пользователя на удаленных серверах.</li>
    </ul>
  </ul>
  <p id="jeiV">Генерируем новый ключ:</p>
  <pre id="uu9W">ssh-keygen -t ed25519 -f ~/ansible/id_ed25519_new</pre>
  <figure id="hIip" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-27.png" width="1183" />
  </figure>
  <p id="0vU7">Создаем плейбук:</p>
  <pre id="c8PK">nvim ./ansible/playbooks/sshd_config.yml</pre>
  <figure id="nAgd" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-26.png" width="1189" />
  </figure>
  <p id="hONF">Наполняем его:</p>
  <pre id="Uu4w">---

- name: Config sshd service and copy private key   # имя/описание плейбука
  hosts: all                            # применять ко всем хостам
  gather_facts: false                   # не собирать факты (ускоряет выполнение)
  become: true                          # выполнять с повышением привилегий (sudo)
  force_handlers: true                  # выполнять обработчики даже в случае ошибки

  vars:
    - new_ssh_port: 4444                # новый номер порта SSH
    - user_name: &quot;ivan&quot;                 # имя пользователя, для которого добавляем SSH ключ
    - user_ssh_privkey: &quot;/home/ivan/ansible/id_ed25519_new&quot; # путь до приватного SSH ключа для пользователя
    - user_ssh_pubkey: &quot;/home/ivan/ansible/id_ed25519_new.pub&quot; # путь до публичного SSH ключа для пользователя

  tasks:
    - name: Change sshd port number
      lineinfile:
        path: /etc/ssh/sshd_config      # путь к файлу конфигурации SSH
        regexp: &quot;^Port&quot;                 # регулярное выражение для поиска строки с портом
        line: &quot;Port {{ new_ssh_port }}&quot; # изменить порт на значение из переменной
        backup: true                    # создать бэкап файла sshd_config перед изменением
      notify:
        - Restart sshd                  # обработчик для перезапуска SSH при изменении
      tags:
        - ssh_server                      # тег для возможности выборочного запуска задачи
    
    - name: Disable sshd password auth
      lineinfile:
        path: /etc/ssh/sshd_config      # путь к файлу конфигурации SSH
        regexp: &#x27;^PasswordAuthentication yes&#x27;  # регулярное выражение для поиска строки
        line: &#x27;PasswordAuthentication no&#x27;      # отключаем аутентификацию по паролю
      notify:
        - Restart sshd                  # обработчик для перезапуска SSH
      tags:
        - ssh_server                      # тег для задачи SSH сервера

    - name: Create ssh directory if it does not exist
      file:
        path: &quot;/home/{{ user_name }}/.ssh/&quot;  # путь к директории .ssh для пользователя
        state: directory               # создать директорию, если не существует
        owner: &quot;{{ user_name }}&quot;       # задать владельца
        group: &quot;{{ user_name }}&quot;       # задать группу
        mode: 0700                     # права доступа к директории
      tags:
        - ssh_client                   # тег для задач SSH клиента
    
    - name: Add user ssh public key
      lineinfile:
        path: &quot;/home/{{ user_name }}/.ssh/authorized_keys&quot;  # путь к файлу authorized_keys
        line: &quot;{{ lookup(&#x27;file&#x27;, &#x27;{{ user_ssh_pubkey }}&#x27;) }}&quot;  # в качестве добавляемой строки использовать содержимое файла публичного ключа
        owner: &quot;{{ user_name }}&quot;       # задать владельца
        group: &quot;{{ user_name }}&quot;       # задать группу
        mode: 0600                     # права доступа к файлу
        backup: true                   # создать бэкап файла перед изменением
        create: true                   # создать новый файл, если он не существует
      tags:
        - ssh_client                   # тег для задач SSH клиента

    - name: Copy user ssh private key
      copy:
        src: &quot;{{ user_ssh_privkey }}&quot;  # путь к файлу на локальной машине
        dest: &quot;/home/{{ user_name }}/.ssh/&quot;  # путь к директории на удаленном сервере, слэш обязателен
        owner: &quot;{{ user_name }}&quot;       # задать владельца
        group: &quot;{{ user_name }}&quot;       # задать группу
        mode: 0600                     # права доступа к файлу
        backup: true                   # создать бэкап файла перед изменением
      when: project == &quot;vpn&quot;           # выполнять только если у хоста переменная project = &quot;vpn&quot;
      tags:
        - ssh_client                   # тег для задач SSH клиента

  handlers:
    - name: Restart sshd
      systemd:
        name: sshd                     # название systemd сервиса SSH
        state: restarted               # перезапуск сервиса</pre>
  <p id="q2ml">И запускаем:</p>
  <figure id="40aI" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-37.png" width="289" />
  </figure>
  <p id="Ci1V"><strong>ВНИМАНИЕ</strong>❗️ Данный playbook <strong>меняет номер порта демона sshd</strong> и <strong>отключает парольный доступ к серверу по SSH</strong>. Крайне рекомендуется запускать необкатанные плейбуки в тестовых средах. Все действия вы выполняете на свой страх и ответственность. Я вас предупредил)</p>
  <pre id="rPNI">ansible-playbook ./ansible/playbooks/sshd_config.yml</pre>
  <figure id="GYbo" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-29-1500x1351.png" width="1500" />
  </figure>
  <p id="vmdx">Если все отработало корректно, то порт доступа SSH на удаленных серверах будет изменен. Не забудьте скорректировать номер порта в файле инвентаризации. Или верните старый номер порта подобной командой:</p>
  <pre id="yOCH">ansible-playbook ./ansible/playbooks/sshd_config.yml -e &#x27;ansible_port=4444&#x27; -e &#x27;new_ssh_port=22&#x27;</pre>
  <p id="fUFP">В ней переопределены переменная <code>ansible_port</code> (из конфига <code>ansible.cfg</code>), используемая для подключения к хостам, и кастомная переменная <code>new_ssh_port</code> (из плейбука <code>sshd_config.yml</code>), определяющая новый номер порта в плейбуке😶‍🌫️.</p>
  <p id="mYge">На всякий случай повторю, что плейбук также добавляет наш новый публичный (<code>~/ansible/id_ed25519_new.pub</code>) ключ на сервера.</p>
  <p id="upWw">Возможно вы обратили внимание🧐, что в плейбуке используются теги🔖. С их помощью можно осуществлять выборочный запуск. Например, выполнить только те задачи, которых есть тег <code>ssh_client</code> (ключ <code>-t</code> или <code>--tags</code>):</p>
  <pre id="BnJL">ansible-playbook ./ansible/playbooks/sshd_config.yml -t ssh_client</pre>
  <figure id="lu2J" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-30-1500x714.png" width="1500" />
  </figure>
  <p id="OYnb">Или наоборот, игнорировать задачи (<code>--skip-tags</code>):</p>
  <pre id="lPRb">ansible-playbook ./ansible/playbooks/sshd_config.yml --skip-tags ssh_server</pre>
  <h2 id="8FyN">Коротко про Ansible roles</h2>
  <p id="LGZs">Как говорилось в начале статьи, <strong>Ansible role</strong> – это структура файлов и директорий для удобной организации задач, шаблонов, файлов переменных для Playbook🚜. Создать шаблон роли можно такой командой:</p>
  <pre id="4JDJ">ansible-galaxy init ./ansible/roles/base-config</pre>
  <figure id="CMG6" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-31.png" width="1283" />
  </figure>
  <p id="H6Kc">Краткое описание структуры:</p>
  <pre id="Jvzo">./ansible/roles/base-config/
├── README.md           # документация роли
├── defaults/           # значения переменных по умолчанию (main.yml)
├── files/              # файлы, которые будут копироваться на целевые хосты
├── handlers/           # обработчики для уведомлений (main.yml)
├── meta/               # метаданные роли, включая зависимости (main.yml)
├── tasks/              # основные задачи роли (main.yml)
├── templates/          # шаблоны Jinja2, которые будут рендериться
├── tests/              # тесты для роли (inventory, test.yml)
└── vars/               # переменные роли с более высоким приоритетом (main.yml)</pre>
  <p id="6gUH">В будущем, мы обязательно будем писать роли Ansible для различных задач!</p>
  <figure id="0eRy" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-35.png" width="480" />
  </figure>
  <p id="9iwn">Но и это уже совсем другая история)</p>
  <h2 id="PMFe">Создаем функцию для удобного запуска плейбуков</h2>
  <p id="3Aax">Ранее я обещал функцию для удобного выполнения плейбуков. Она довольно проста, но полезна. Выполняем:</p>
  <pre id="Clsi">echo &#x27;ap() {ansible-playbook ~/ansible/playbooks/&quot;$@&quot;}&#x27; &gt;&gt; ~/.profile

source ~/.profile

which ap</pre>
  <p id="yCI2">Описания команд выше:</p>
  <ul id="4toe">
    <li id="zfBd"><code>echo</code> – выводит строку (подробнее про вывод текста <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-vyvod-i-chtenie-soderzhimogo-komandy-echo-cat-less/" target="_blank">тут</a>);</li>
    <li id="M9SZ"><code>&#x27;ap() {ansible-playbook ~/ansible/playbooks/&quot;$@&quot;}&#x27;</code> – строка, которая определяет функцию <code>ap</code>:</li>
    <ul id="xsVM">
      <li id="5XT7"><code>ap()</code> — объявление функции с именем <code>ap</code> (имя произвольное);</li>
      <li id="9qcI"><code>{ansible-playbook ~/ansible/playbooks/&quot;$@&quot;}</code> – тело функции, которая запускает <code>ansible-playbook</code>, передавая ей все аргументы (<code>&quot;$@&quot;</code>), например, <code>ap playbook.yml --become</code>;</li>
      <li id="Y2Gr"><code>&gt;&gt; ~/.profile</code> – добавляет строку в конец файла <code>~/.profile</code>, чтобы функция автоматически загружалась при входе в систему (подробнее про перенаправление потоков <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-perenapravlenie-vvoda-i-vyvoda/" target="_blank">тут</a>).</li>
    </ul>
    <li id="evdb"><code>source ~/.profile</code> – загружает изменения из <code>~/.profile</code>, активируя функцию <code>ap</code> в текущей сессии;</li>
    <li id="LqZF"><code>which ap</code> – если функция определена успешно, это отобразит её как часть текущей оболочки.</li>
  </ul>
  <figure id="mm0Q" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-32-1500x338.png" width="1500" />
  </figure>
  <p id="Xh7L">Проверяем работу:</p>
  <pre id="ofyS">ap ping.yml</pre>
  <figure id="qJli" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/11/image-33-1500x637.png" width="1500" />
  </figure>
  <p id="g8xO">Отлично!</p>
  <h2 id="sag6">Послесловие</h2>
  <p id="4eci">Вот мы с вами и познакомились с таким крутым и полезным инструментом управления конфигурациями под названием Ansible😎. Базовые знания у нас есть, теперь осталось применить их на практике для решения рутинных задач😌. В планах написать плейбук по базовой настройке сервера Linux, установке и запуску различных сервисов, установке Arch linux на шифрованные разделы и много чего другого🤯.</p>
  <p id="KNXd">Все файлы с примерами доступны в моем репозитории на <a href="https://github.com/r4ven-me/ansible" target="_blank">GitHub</a>.</p>
  <p id="DIvu">Спасибо, что уделили время 😊. Если появились вопросы – приглашаю в наш дружелюбный <a href="https://t.me/r4ven_me_chat/" target="_blank">Вороний чат</a> 🚶‍♀️🐧🚶🐧🚶‍♂️🐧 в телеге 😅. Также обязательно подписывайтесь на основной телеграм канал: <a href="https://t.me/r4ven_me/" target="_blank">@r4ven_me</a>, уведомления о новых материалах на сайте приходят туда в день публикации.</p>
  <p id="IjeA">Удачи!</p>
  <h2 id="EXtu">Полезные источники</h2>
  <ul id="ZCtl">
    <li id="Hphy"><a href="https://github.com/r4ven-me/ansible" target="_blank">Файлы с примерами из статьи | GitHub</a></li>
    <li id="tnRE"><a href="https://docs.ansible.com/ansible/latest/reference_appendices/config.html" target="_blank">Конфигурация ansible (EN) | docs.ansible.com</a></li>
    <li id="SvMu"><a href="https://docs.ansible.com/ansible/latest/reference_appendices/config.html#environment-variables" target="_blank">Список переменных окружения Ansible (EN) | docs.ansible.com</a></li>
    <li id="qwXu"><a href="https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html" target="_blank">Составление инвентаризации Ansible | docs.ansible.com</a></li>
    <li id="TOsW"><a href="https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html#connecting-to-hosts-behavioral-inventory-parameters" target="_blank">Список параметров подключения для файла inventory | docs.ansible.com</a></li>
    <li id="tXcE"><a href="https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_vars_facts.html" target="_blank">Список фактов (ansible facts) | docs.ansible.com</a></li>
    <li id="F9Gw"><a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/debug_module.html" target="_blank">Документация по модулю debug | https://docs.ansible.com/</a></li>
    <li id="hski"><a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html" target="_blank">Документация по модулю ping | https://docs.ansible.com/</a></li>
    <li id="fn63"><a href="https://r4ven.me/it-razdel/zametki/ssh-bezopasnoe-podklyuchenie-k-udalyonnym-hostam-vvedenie/" target="_blank">SSH – Безопасное подключение к удалённым хостам: введение | Вороний блог</a></li>
    <li id="P8G3"><a href="https://r4ven.me/it-razdel/poleznoe-po/vim-konsolnyj-redaktor-znakomstvo/" target="_blank">VIM – Консольный редактор: знакомство | Вороний блог</a></li>
    <li id="VisN"><a href="https://r4ven.me/it-razdel/instrukcii/zsh-interaktivnaya-komandnaya-obolochka-dlya-linux-oh-my-zsh/" target="_blank">ZSH – Интерактивная командная оболочка для Linux + Oh-My-Zsh | Вороний блог</a></li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/linux-quiz-16-20</guid><link>https://teletype.in/@r4ven_me/linux-quiz-16-20?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/linux-quiz-16-20?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Linux викторина №16-20: что делает каждая команда на изображении?</title><pubDate>Thu, 31 Oct 2024 20:03:07 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/cd/12/cd122d70-8a9e-4fb5-8dbe-f492f051b8ee.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/14/2a/142a437b-37e2-46ac-87df-3b3add14c618.png"></img>Пройти тест можно на моём сайте r4ven.me.]]></description><content:encoded><![CDATA[
  <figure id="WY3m" class="m_original">
    <img src="https://img2.teletype.in/files/14/2a/142a437b-37e2-46ac-87df-3b3add14c618.png" width="847" />
    <figcaption>Linux викторина №16-20: что делает каждая команда на изображении?</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="ZY6G"><strong>Пройти тест можно на моём сайте <a href="https://r4ven.me/it-razdel/linux-quiz/linux-viktorina-16-20-chto-delaet-kazhdaya-komanda-na-izobrazhenii/" target="_blank">r4ven.me.</a></strong></p>
  </section>
  <p id="MLbi"><em>Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</em></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/configuration-management</guid><link>https://teletype.in/@r4ven_me/configuration-management?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/configuration-management?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Система управления конфигурациями</title><pubDate>Mon, 28 Oct 2024 20:31:25 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/02/30/02301d9b-6b0c-413d-8da9-2a754c5fa709.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/85/1f/851f3cf1-bb06-4ad4-848e-239d97ceca50.png"></img>Исходный сайт представленного материала: r4ven.me]]></description><content:encoded><![CDATA[
  <figure id="Wp9d" class="m_original">
    <img src="https://img1.teletype.in/files/85/1f/851f3cf1-bb06-4ad4-848e-239d97ceca50.png" width="830" />
    <figcaption>Система управления конфигурациями</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="HoRy">Исходный сайт представленного материала: <a href="https://r4ven.me/it-razdel/slovarik/sistema-upravleniya-konfiguraciyami/" target="_blank">r4ven.me</a></p>
  </section>
  <h3 id="sw0L">Приветствую!</h3>
  <p id="tuUk">Сегодня в словарике линуксоида🐧 термин – <strong>системы управления конфигурациями</strong>. Данные системы уже давно являются неотъемлемой частью процесса администрирования IT инфраструктуры🧑‍💻. По традиции дадим определение термину, узнаем какие существуют типы и популярные реализации подобных систем. Ну и коротко про преимущества и недостатки🧐.</p>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="U3Jj">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</p>
  </section>
  <p id="4v6j">Обращаю ваше внимание, что этот теоретический пост📗 предшествует будущим материалам по Ansible🛠. В числе которых: статья по установке и настройке, плейбук по <a href="https://r4ven.me/it-razdel/instrukcii/nachalnaya-nastrojka-linux-servera-na-primere-debian/" target="_blank">базовой конфигурации</a> Linux сервера, плейбук по развертыванию <a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-openconnect-ssl-vpn-server-ocserv-v-docker-dlya-vnutrennih-proektov/" target="_blank">OpenConnect</a> сервера и <a href="https://r4ven.me/it-razdel/zametki/pishem-bash-skript-dlya-podklyucheniya-k-openconnect-vpn-serveru/" target="_blank">клиента</a> и т.д. Идей у меня много😉.</p>
  <figure id="OhXm" class="m_original">
    <img src="https://img1.teletype.in/files/41/e7/41e79084-644f-4915-92d3-a62ac06b5ea5.png" width="725" />
  </figure>
  <h2 id="1hIw">Вместо введения: зачем нужны системы управления конфигурациями?</h2>
  <figure id="31oC" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-16.png" width="460" />
  </figure>
  <p id="uHEY"><strong>Устойчивость и стабильность</strong>. Системы управления конфигурациями позволяют сократить риск сбоев и ошибок. Автоматизация процессов устраняет человеческий фактор и сохраняет состояние инфраструктуры в неизменном виде.</p>
  <p id="irpo"><strong>Снижение затрат на администрирование</strong>. CM-системы автоматизируют рутинные задачи, снижая нагрузку на администраторов и давая им возможность сконцентрироваться на стратегических задачах.</p>
  <p id="HoZL"><strong>Контроль версий и повторяемость</strong>. CM-инструменты фиксируют историю изменений и позволяют быстро откатываться к прошлым версиям. Это важно при возникновении неполадок или необходимости вернуть предыдущую конфигурацию.</p>
  <p id="dvIe"><strong>Гибкость и масштабируемость</strong>. CM-системы обеспечивают гибкость при развертывании инфраструктуры, делая её готовой к быстрой адаптации в условиях роста нагрузки или внедрения новых технологий.</p>
  <p id="uiVK">бла бла бла😶‍🌫️</p>
  <h2 id="1PJp">Немного из истории CM-систем</h2>
  <figure id="R75k" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-15.png" width="469.0000000000001" />
  </figure>
  <p id="U51N">Системы управления конфигурациями появились в ответ на потребность автоматизировать повторяющиеся задачи в управлении серверами и снижать нагрузку на системных администраторов. В начале 2000-х годов, с ростом масштабов веб-приложений и данных, администраторы столкнулись с проблемой: инфраструктура увеличивалась, а управление ею вручную стало занимать слишком много времени и человеческих ресурсов. Разработчики и инженеры осознали, что конфигурации серверов, как и код, могут быть зафиксированы в <a href="https://r4ven.me/it-razdel/slovarik/repozitorij-programmnogo-obespecheniya/" target="_blank">репозиториях</a>, а их изменение и развертывание — автоматизированы. Тут и пошло поехало😳.</p>
  <p id="4MQV">Одной из первых таких систем была <strong>CFEngine</strong>, созданная Марком Берджессом в 1993 году. Она положила начало автоматизированным CM-инструментам, установив базовые принципы, которые до сих пор используются в более современных системах. CFEngine разрабатывалась на фоне <a href="https://r4ven.me/it-razdel/slovarik/operacionnaya-sistema-unix/" target="_blank">UNIX-систем</a> и была построена вокруг идеи поддержания состояния серверов. Со временем её идеи распространились и повлияли на появление других систем, таких как Puppet и Chef.</p>
  <h2 id="2KMU">Про типы CM-систем</h2>
  <p id="HfcO">CM-системы можно разделить на два типа: <strong>push и pull ориентированные</strong>. Эти подходы определяют, как именно CM-системы взаимодействуют с управляемыми серверами.</p>
  <ol id="a3S1">
    <li id="urO8"><strong>Push-ориентированные системы</strong><br />В push-системах центральный сервер управления отправляет команды на целевые машины. Этот подход даёт полный контроль над процессом развертывания. Одним из самых известных примеров push-системы является <strong>Ansible</strong>.</li>
    <li id="D55W"><strong>Pull-ориентированные системы</strong><br />В pull-системах агенты, установленные на целевых машинах, регулярно обращаются к серверу за обновлениями. Это позволяет автоматизировать процесс управления конфигурацией даже в распределённых системах. Примером такой системы является <strong>Puppet</strong>.</li>
  </ol>
  <h2 id="twIy">Популярные CM-системы и их особенности</h2>
  <figure id="zPeS" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-13.png" width="470" />
  </figure>
  <ol id="O2T4">
    <li id="pGn3"><strong>Ansible</strong> (наше всё🙃)</li>
    <ul id="iSML">
      <li id="uCRI"><strong>Написан на: </strong>Python;</li>
      <li id="WHno"><strong>Лицензия:</strong> GPL 3.0;</li>
      <li id="eDg1"><strong>Преимущества</strong>: простота настройки, отсутствие агентов (использует лишь SSH и Python), поддержка YAML для описания конфигураций;</li>
      <li id="g2NB"><strong>Недостатки</strong>: последовательное выполнение задач может замедлять работу в крупных средах;</li>
      <li id="MHcS"><strong>Из истории</strong>: Созданная Михаэлом ДеХааном в 2012 году, Ansible развивалась как лёгкое решение для DevOps-задач, и вскоре была приобретена компанией Red Hat. Интересно, что несмотря на свою молодость, Ansible оказалась настолько успешной, что стала одним из стандартов CM.</li>
    </ul>
    <li id="8xFc"><strong>Puppet</strong></li>
    <ul id="lcsh">
      <li id="g1Qv"><strong>Написан на:</strong> Ruby;</li>
      <li id="7Fhi"><strong>Лицензия:</strong> Apache License 2.0;</li>
      <li id="Wgqs"><strong>Преимущества</strong>: зрелый инструмент с большим сообществом, поддерживает декларативный стиль конфигураций, подходит для крупных компаний;</li>
      <li id="xvOq"><strong>Недостатки</strong>: требует установки агентов, сложен для новичков;</li>
      <li id="mIUt"><strong>Из истории:</strong> Puppet был разработан в 2005 году Люком Каньесом, когда необходимость в управлении конфигурациями для масштабных сред уже была очевидна. Puppet Labs, компания, стоящая за Puppet, активно участвовала в формировании подходов к DevOps. На основе Puppet строили свои инфраструктуры крупнейшие компании, такие как Google, Oracle, Cisco и др.</li>
    </ul>
    <li id="LZMY"><strong>Chef</strong></li>
    <ul id="9LWr">
      <li id="f09Q"><strong>Написана на:</strong> на Ruby (клиентская часть) и Erlang (серверная часть);</li>
      <li id="11fg"><strong>Лицензия:</strong> Apache License 2.0;</li>
      <li id="g4eh"><strong>Преимущества</strong>: гибкость, поддержка Ruby и высокая степень кастомизации;</li>
      <li id="4DZK"><strong>Недостатки</strong>: высокий порог вхождения для тех, кто не знаком с Ruby, необходимость установки агентов;</li>
      <li id="fugJ"><strong>Из истории:</strong> Chef, созданный в 2009 году, вдохновлялся идеями Puppet, но предоставил больше свободы за счёт возможности использования Ruby для программирования инфраструктуры. Это помогло компании Opscode (ныне Chef) привлечь к инструменту специалистов, ориентированных на программирование. Chef была одной из первых CM-систем, активно поддерживавших идеи DevOps.</li>
    </ul>
    <li id="cNIk"><strong>SaltStack</strong></li>
    <ul id="XWRZ">
      <li id="hQVb"><strong>Написан на:</strong> Python;</li>
      <li id="J1i3"><strong>Лицензия:</strong> Apache;</li>
      <li id="kv4g"><strong>Преимущества</strong>: высокая скорость работы, поддержка как push-, так и pull-ориентированной модели;</li>
      <li id="Q6oT"><strong>Недостатки</strong>: может быть сложен в настройке;</li>
      <li id="9IzM"><strong>Из истории:</strong> SaltStack был выпущен в 2011 году и привлёк внимание благодаря быстрой обработке команд и гибкости. В отличие от других систем, SaltStack предоставляет гибридный подход, что делает его популярным в высоконагруженных средах.</li>
    </ul>
  </ol>
  <h2 id="acuK">Заключение</h2>
  <p id="dqMh">Системы управления конфигурациями прошли долгий путь от первых разработок в 1990-х годах до современных решений, таких как Ansible, Puppet, Chef и SaltStack. Каждое из этих решений обладает своими особенностями и преимуществами, которые делают их подходящими для определённых задач и сред. Выбор инструмента, как это часто бывает, зависит от потребностей, инфраструктуры и уровня требований к управлению🤵‍♂️.</p>
  <p id="fZBt">В ближайшее время на сайте Вороний блог выйдет вводная заметка по установке и начальной настройке <strong>системы управления конфигурациями – Ansible</strong>. Предпочтение данной CM отдано по очевидным причинам: описание конфигураций в удобном Yaml, при работе необходим лишь SSH и установленный Python на удаленном сервере. Хотя фактически можно обойтись из без Python, но это больше для гурманов🤪.</p>
  <p id="z5IR">Обязательно подписывайтесь на наш телеграм канал <a href="https://t.me/r4ven_me" target="_blank">@r4ven_me</a>📱, чтобы не пропустить новые посты, а если возникли вопросы или просто есть желание поболтать про Linux и <a href="https://r4ven.me/it-razdel/slovarik/otkrytoe-po/" target="_blank">Open source</a> – добро пожаловать в наш чат <a href="https://t.me/r4ven_me_chat" target="_blank">@r4ven_me_chat</a>💬. У нас там вежливое микросообщество🤓.</p>
  <p id="Wk9s">Спасибо, что читаете!</p>
  <h2 id="7nj7">Полезные источники</h2>
  <ul id="jiwO">
    <li id="Xh4v"><a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" target="_blank">Конфигурационное управление | Википедия</a></li>
    <li id="Tb6b"><a href="https://ru.wikipedia.org/wiki/Ansible" target="_blank">Ansible | Википедия</a></li>
    <li id="LTYg"><a href="https://ru.wikipedia.org/wiki/Puppet" target="_blank">Puppet | Википедия</a></li>
    <li id="SQxK"><a href="https://ru.wikipedia.org/wiki/Chef_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0)" target="_blank">Chef | Википедия</a></li>
    <li id="4FKU"><a href="https://ru.wikipedia.org/wiki/SaltStack" target="_blank">SaltStack | Википедия</a></li>
    <li id="De4j"><a href="https://habr.com/ru/companies/otus/articles/774150/" target="_blank">Управление конфигурациями: Puppet vs. Chef vs. Ansible | Habr</a></li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/sborka-dvuhprocessornogo-pk</guid><link>https://teletype.in/@r4ven_me/sborka-dvuhprocessornogo-pk?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/sborka-dvuhprocessornogo-pk?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Сборка двухпроцессорного ПК для Linux</title><pubDate>Tue, 01 Oct 2024 18:48:07 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/5f/24/5f24bebe-9673-47b0-8291-d9f2b29a1ad9.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/84/ac/84acacb5-69ca-4572-bb0e-4810932c59ec.png"></img>Заголовок получился кликбейтный😏, но сегодня речь действительно пойдет о моей сборке ПК с двухпроцессорной конфигурацией🧑‍💻. Будет много фоток и мало слов, погнали😉.]]></description><content:encoded><![CDATA[
  <figure id="M12S" class="m_original">
    <img src="https://img1.teletype.in/files/84/ac/84acacb5-69ca-4572-bb0e-4810932c59ec.png" width="961" />
    <figcaption>Сборка двухпроцессорного ПК для Linux</figcaption>
  </figure>
  <h3 id="DAMq">Приветствую!</h3>
  <p id="Rmhs">Заголовок получился кликбейтный😏, но сегодня речь действительно пойдет о моей сборке ПК с двухпроцессорной конфигурацией🧑‍💻. Будет много фоток и мало слов, погнали😉.</p>
  <p id="BoQF"><em>Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</em></p>
  <blockquote id="DIzs"><strong>КРАСНАЯ ПЛАШКА<br /></strong>Пожалуйста, обратите внимание, что данная статья не является рекомендацией. Я лишь делюсь своим мнением и пережитым опытом. Будьте осторожны при покупке Б/У деталей, потому что всегда существует риск приобрести нерабочий экземпляр.</blockquote>
  <figure id="beTt" class="m_original">
    <img src="https://img2.teletype.in/files/94/7d/947d6486-acb5-4311-a09c-3108e8d32061.png" width="650" />
  </figure>
  <h2 id="Ojfy">Зачем нужен двухпроцессорный ПК</h2>
  <p id="oSI3">TLDR: чтобы наблюдать такую радугу в системном мониторе😂:</p>
  <figure id="rNWw" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-1.png" width="1233" />
  </figure>
  <p id="6V0T">Если серьезно, то основная причина вот:</p>
  <figure id="Es9w" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-2.png" width="1475" />
  </figure>
  <p id="m0QQ">Создание лабораторной среды на базе функционального <a href="https://r4ven.me/it-razdel/slovarik/gipervizor-po-dlya-virtualizacii/" target="_blank">гипервизора</a> для проведения различных тестов и быстрого развертывания образов VM в т.ч. с использованием <strong><a href="https://wiki.archlinux.org/title/Cloud-init" target="_blank">Cloud init</a></strong>. Тут мой выбор пал на популярное <a href="https://r4ven.me/it-razdel/slovarik/otkrytoe-po/" target="_blank">open source</a> решение – <strong>Proxmox</strong>.</p>
  <p id="3H5K">Несмотря на то, что в моем случае proxmox запускает ВМ в режиме <a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" target="_blank">паравиртуализации</a>, все работает довольно шустро. Мне для тестов хватает с головой. Возможно в будущем сделаю заметку по этой теме📝.</p>
  <p id="FKIg">В результате половину ресурсов получает мое <a href="https://r4ven.me/it-razdel/slovarik/okruzhenie-rabochego-stola/" target="_blank">графическое окружение</a> (LMDE6 с Cinnamon), а другая половина отдана Proxmox👌.</p>
  <h2 id="qmoz">Обзор комплектующих</h2>
  <h3 id="4En6">Материнская плата</h3>
  <p id="RByv"><strong>Atermiter Dual X99 2011-3</strong> – производитель, как шутят мои друзья, цитата: “какое-то ху*ло”😂😂. Если что, то “мать покупалась на али”.</p>
  <p id="qeUU">Характеристики:</p>
  <ul id="lt0S">
    <li id="a2Pb"><strong>Сокет: </strong>2011 v3</li>
    <li id="1ayo"><strong>Количество сокетов:</strong> 2</li>
    <li id="70OB"><strong>Количество слотов памяти:</strong> 8</li>
    <li id="hLpX"><strong>Тип памяти:</strong> DDR4 DIMM</li>
    <li id="aWov"><strong>Слоты PCI-E:</strong> 2 x PCI-E 3.0 x1, 2 x PCI-E 3.0 x16</li>
    <li id="3nnr"><strong>USB на плате:</strong> 1 x USB 3.2, 1 x USB 2.0</li>
    <li id="yQUQ"><strong>Разъемы на задней панели:</strong> 4 x USB 2.0 Type-A, 4 x USB 3.2 Type-A, LAN RJ-45, PS/2 (клавиатура), PS/2 (мышь)</li>
    <li id="WS1g"><strong>Звук:</strong> AC’97</li>
    <li id="iMpa"><strong>Форм-фактор:</strong> EATX</li>
    <li id="1AIO"><strong>Слоты накопителей:</strong> 8 x SATA 6G, 2 x M.2 NVME (вероятно разных поколений)</li>
  </ul>
  <figure id="YcAJ" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_1_2024-10-01_15-16-36-e1727787560670.jpg" width="964" />
  </figure>
  <figure id="4UaZ" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_2_2024-10-01_15-16-36-e1727787110724.jpg" width="964" />
  </figure>
  <h3 id="YjwS">ПроцессорЫ (Б/У)</h3>
  <p id="U9bd">2 штука <strong>Intel Xeon E5-2680V3</strong> – не самые мощные для данного сокета, просто продавались в комплекте с мат. платой и памятью. Так было банально дешевле. Есть возможность “доумощниться” при необходимости😎.</p>
  <p id="Bwej">Характеристики (на один процессор):</p>
  <ul id="DMXq">
    <li id="tC9E"><strong>Количество:</strong> 2 шт.</li>
    <li id="9CCV"><strong>Тех. процесс:</strong> 22 nm</li>
    <li id="MaSo"><strong>Ядер:</strong> 12</li>
    <li id="6XFc"><strong>Потоков:</strong> 24</li>
    <li id="fqb3"><strong>Базовая частота:</strong> 2500 MHz</li>
    <li id="RUhK"><strong>Максимальная частота в Turbo Boost:</strong></li>
    <ul id="UrlZ">
      <li id="5TQU">3300 MHz (1-2 ядра)</li>
      <li id="xVNi">3100 MHz (3 ядра)</li>
      <li id="I1Es">2900 MHz (4 ядра)</li>
      <li id="ahRp">2800 MHz (5 и больше ядер)</li>
    </ul>
    <li id="yvf9"><strong>Кэш 3-го уровня:</strong> 30 Mb</li>
    <li id="KTlm"><strong>Поддержка оперативной памяти DDR4:</strong> 2133 MHz</li>
    <li id="GUWG"><strong>TDP:</strong> 120 W</li>
  </ul>
  <figure id="b2aN" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_5_2024-10-01_15-16-36.jpg" width="964" />
  </figure>
  <h3 id="LSGz">КулерЫ</h3>
  <p id="64Su">Тут все просто. 2 китайские башни белого цвета – <strong>M-T4 Snowman</strong></p>
  <ul id="tb9j">
    <li id="Fm0Z"><strong>Разъем питания:</strong> 4 pin</li>
    <li id="YK3J"><strong>Количество тепловых трубок:</strong> 4 шт</li>
    <li id="PuBM"><strong>Диаметр вентилятора:</strong> 120 мм</li>
    <li id="uzlS"><strong>Макс. оборотов:</strong> 1300 об/мин</li>
    <li id="SR62"><strong>TDP: </strong>150 Вт</li>
    <li id="QrCT"><strong>Макс. воздушный поток:</strong> 48 CFM</li>
  </ul>
  <figure id="isYX" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_6_2024-10-01_15-16-36-e1727787129208.jpg" width="964" />
  </figure>
  <h3 id="KvTp">Оперативная память (Б/У)</h3>
  <p id="jWca">Память от того же *йло сборщика – <strong>Atermiter</strong>. Скорее всего от этого вендора тут только радиаторы😁. Память серверная, а чьи чипы – хз.</p>
  <p id="Ogws">Характеристики:</p>
  <ul id="spdI">
    <li id="sBhF"><strong>Тип:</strong> DDR4</li>
    <li id="voud"><strong>Форм-фактор:</strong> DIMM</li>
    <li id="xgWu"><strong>Количество:</strong> 4 шт.</li>
    <li id="ktnj"><strong>Объем одного модуля:</strong> 16GB</li>
    <li id="vITA"><strong>Частота:</strong> 3200 MHz (ага, а процессор только 2133)</li>
    <li id="rxPV"><strong>Особенности:</strong> серверная, ECC REG</li>
  </ul>
  <figure id="QSHE" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image.png" width="577" />
  </figure>
  <h3 id="YETF">Видеокарта (Б/У)</h3>
  <p id="Aq0Y">Сразу скажу, что в послесднее время в игры я играю редко. Поэтому сильно по этому поводу не заморачивался. Раз решил брать мать с б/у процом, то и видюху взял аналогичную.</p>
  <p id="EypU">Выбор пал на <strong>Radeon rx 580 8gb</strong>, как самую распространенную и доступную в соотношении цена-качество. Вендор – написано, что <strong>XFX</strong>.</p>
  <p id="Gm17">Характеристики:</p>
  <ul id="sm9k">
    <li id="XyY5"><strong>Питание видеокарты:</strong> 8 pin</li>
    <li id="NYWt"><strong>Видео разъемы:</strong> DisplayPort 3 шт., HDMI 1 шт., DVI-D 1 шт.</li>
    <li id="rmmP"><strong>Объем видеопамяти:</strong> 8192 Мб</li>
    <li id="2e2x"><strong>Тип видеопамяти:</strong> GDDR5</li>
    <li id="y80f"><strong>Разрядность шины:</strong> 256 бит</li>
    <li id="Rok0"><strong>Потребляемая мощность:</strong> 150 Вт</li>
  </ul>
  <figure id="0Olp" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_16_2024-10-01_15-16-36-e1727787192805.jpg" width="1280" />
  </figure>
  <figure id="Bn09" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_19_2024-10-01_15-16-36-e1727787209363.jpg" width="1280" />
  </figure>
  <h3 id="OdCv">Накопитель М2</h3>
  <p id="nmbk">Т.к. на плате есть 2 разъема под M.2 накопители, решил попробовать. Взял один из недорогих: <strong>ARDOR GAMING Ally AL1282</strong> на 256 гб под систему. Тесты показывают совсем не те цифры, что заявлены. Но с чьей стороны косяк: материнки или SSD пока не определил.</p>
  <p id="ojwT">Характеристики:</p>
  <ul id="P2ZX">
    <li id="vZfJ"><strong>Объем накопителя:</strong> 256 Gb</li>
    <li id="AHiF"><strong>Ключ разъема:</strong> M.2</li>
    <li id="OFL6"><strong>Интерфейс:</strong> NVMe</li>
    <li id="gjRe"><strong>Структура памяти:</strong> 3D NAND</li>
    <li id="7aGg"><strong>Макс. заявленная скорость чтения:</strong> 3000 Мб/сек</li>
    <li id="CJdl"><strong>Макс. заявленная скорость записи:</strong> 1300 Мб/сек</li>
    <li id="csno"><strong>Максимальный ресурс записи (TBW):</strong> 187.5 ТБ</li>
  </ul>
  <figure id="smyD" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_13_2024-10-01_15-16-36-e1727787224267.jpg" width="1280" />
  </figure>
  <h3 id="WkoA">Блок питания</h3>
  <p id="0aFt">БП – сердце компьютера, экономить на нем не рекомендую никогда. И уж точно я вас призываю <strong>НЕ ПОКУПАТЬ</strong> Б/У блоки питания!!! Это все таки ваша безопасность. Для меня тут выбор таков: <strong>Chieftec Silicon 850W [SLC-850C]</strong>. Мощности хватает с запасом.</p>
  <p id="3X1l">Характеристики:</p>
  <ul id="AeHo">
    <li id="OTyj"><strong>Мощность (номинал):</strong> 850 Вт</li>
    <li id="uVAo"><strong>Форм-фактор:</strong> ATX</li>
    <li id="ZDah"><strong>Тип подключения:</strong> модульный</li>
    <li id="yFCZ"><strong>Сертификат 80 PLUS:</strong> Bronze</li>
  </ul>
  <figure id="1Yrd" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_9_2024-10-01_15-16-36-e1727787246356.jpg" width="964" />
  </figure>
  <figure id="da3A" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_10_2024-10-01_15-16-36-e1727788180820-edited.jpg" width="964" />
  </figure>
  <h3 id="DDUC">Корпус</h3>
  <p id="WLg1">Мой предыдущий ПК тоже был в корпусе от “пумы” с отличной вентиляцией. Вот и в этот раз решил взять от них, только разумеется побольше габаритами из-за высоких кулеров – <strong>Cougar Duoface Pro RGB [CGR-5AD1B-RGB]</strong>. Ну и конечно “нетрадиционной ориентации” подсветка с множеством цветов. Я изначально хотел белый.</p>
  <p id="XwV7">Характеристики:</p>
  <ul id="wKRk">
    <li id="7eea"><strong>Типоразмер корпуса:</strong> Mid-Tower</li>
    <li id="ZueD"><strong>Вентиляторы в комплекте:</strong> 4 x 120 мм</li>
    <li id="VaA6"><strong>Тип подсветки:</strong> ARGB</li>
    <li id="K4Bw"><strong>Материал окна:</strong> каленое стекло</li>
    <li id="sLYD"><strong>Разъемы:</strong> Jack 3.5, 2 x USB 3.1, 1 x USB 2.0, 1 x USB Type C (которого на плате нет😔)</li>
  </ul>
  <figure id="FOBy" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_2024-10-01_15-24-52-e1727787299672.jpg" width="964" />
  </figure>
  <figure id="zl4w" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_4_2024-10-01_15-16-36-e1727787329160.jpg" width="964" />
  </figure>
  <p id="CPrU">Даже есть какой-то кэйбэл мэнэджмэнт по умолчанию😎</p>
  <figure id="z1X6" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_3_2024-10-01_15-16-36-e1727787312530.jpg" width="964" />
  </figure>
  <h2 id="MlNi">Сборка</h2>
  <p id="Uazi">Начинаем собирать:</p>
  <figure id="KpfO" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_7_2024-10-01_15-16-36-e1727787156967.jpg" width="964" />
  </figure>
  <p id="wbvo">И сталкиваемся с такой не приятной ситуацией:</p>
  <figure id="Jj4K" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-3.png" width="767" />
  </figure>
  <p id="m3sY">В моем случае это не критично, поэтому “напилингом” я решил не заниматься. Работает и так, но в итоге местами плашки я все же поменял.</p>
  <p id="5xq4">Запихиваем все добро в корпус:</p>
  <figure id="FRcD" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_8_2024-10-01_15-16-36.jpg" width="964" />
  </figure>
  <p id="7RPD">Добавляем <s>щепотку специй</s> видеокарту:</p>
  <figure id="lsuq" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_18_2024-10-01_15-16-36.jpg" width="964" />
  </figure>
  <p id="GlF8">Ну, стартуем!!!</p>
  <figure id="kD9I" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-8.png" width="461.00000000000006" />
  </figure>
  <p id="ahA4">И..</p>
  <figure id="8zBd" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-7.png" width="458" />
  </figure>
  <figure id="7u6z" class="m_custom">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-6.png" width="457" />
  </figure>
  <p id="BQHN">Разумеется с первого раза ничего не запустилось😳. Благо на мат. плате есть маленький дисплей отображающий POST коды запуска, которые легко гуглятся. Трабла: Б/Ушная память решила “повыделываться”. Но, имея некоторый опыт, я обратился за квалифицированной помощью к специалисту.</p>
  <p id="6cYp">Встречайте:</p>
  <figure id="QiqQ" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-5.png" width="803" />
  </figure>
  <p id="5Bij">Перетёр с ним за контакты оперативки и все завелось😁.</p>
  <p id="rpza">После сборки логичным этапом идет установка ОС. Скачал последний <strong>Linux Mint Debian Edition 6</strong> и накатил. А пока сей недолгий процесс шел, решил выпить чаю☕️. Еще и скучный интернешнл шел тогда📺.</p>
  <figure id="LgLi" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_11_2024-10-01_15-16-36.jpg" width="1280" />
  </figure>
  <h2 id="RaDx">Итоговый результат</h2>
  <p id="8St3">В результате получился вот такой Devil Machine😈😈😈:</p>
  <figure id="KxKQ" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_21_2024-10-01_15-16-36-e1727787344562.jpg" width="964" />
  </figure>
  <figure id="SfHX" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/photo_17_2024-10-01_15-16-36.jpg" width="964" />
  </figure>
  <p id="3D0C">Немного Hardinfo уже в ОС:</p>
  <figure id="iuJk" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-4.png" width="1004" />
  </figure>
  <figure id="Bkmr" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/10/image-9.png" width="1223" />
  </figure>
  <h2 id="BAAf">Что почём?</h2>
  <p id="oivH">Вот такой прайс у меня получился в 2024 году:</p>
  <ul id="PczD">
    <li id="BLYt"><strong>Мат. плата + процы + память:</strong> 15200 р.</li>
    <li id="b775"><strong>2 кулера:</strong> 2200 р.</li>
    <li id="zj5d"><strong>Видеокарта:</strong> 8860 р.</li>
    <li id="W86Q"><strong>SSD 256GB:</strong> 2850 р.</li>
    <li id="RuY5"><strong>Блок питания:</strong> 10450 р.</li>
    <li id="4gw1"><strong>Корпус:</strong> 8500 р.</li>
  </ul>
  <p id="6fsJ"><strong>Итого:</strong> 48 060 р.</p>
  <p id="0Ccd">Скажу, что на сегодня это нормально. Можно сказать экономно💰, даже с учетом рисков (все таки часть деталей Б/У).</p>
  <h2 id="a6SG">Заключение</h2>
  <p id="w3Xm">Мое мнение по итогу: доволен как слон. Конечно при сборке были некоторые нюансы, в основном с оперативкой, но все завелось и работает. Я уже активно пользуюсь поднятым Proxmox для своих задач и различных тестов😎. Надеюсь машинка будет отлично работать и впредь😌. Это был интересный опыт.</p>
  <p id="Y4Df">Если у вас появились вопросы или желание пообщаться по теме – приглашаю в наш <a href="https://t.me/r4ven_me_chat" target="_blank">Вороний чат</a>💬 в телеге. И обязательно подписывайтесь на наш канал <a href="https://t.me/r4ven_me" target="_blank">@r4ven_me</a>📱 там же, чтобы не пропустить новые посты на сайте Вороний блог.</p>
  <p id="GfiO">Спасибо, что читаете. Желаю только работающих сборок😉.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/zabbix-server-v-docker</guid><link>https://teletype.in/@r4ven_me/zabbix-server-v-docker?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/zabbix-server-v-docker?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Поднимаем сервер мониторинга Zabbix 7 + TimescaleDB в docker</title><pubDate>Wed, 25 Sep 2024 09:35:11 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/cd/5c/cd5cf9fb-afea-4e9d-ae93-7bf916eef630.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/f5/03/f503f847-f287-4f84-9200-f21de1c1ea0a.png"></img>В данной инструкции мы с вами развернем популярную систему мониторинга Zabbix с использованием TimescaleDB – плагина для БД PostgreSQL, позволяющего эффективно работать с “временнЫми рядам”. Все это добро мы завернем внутрь docker контейнеров 🐳. Будет интересно 😉.]]></description><content:encoded><![CDATA[
  <figure id="MPOp" class="m_original">
    <img src="https://img4.teletype.in/files/f5/03/f503f847-f287-4f84-9200-f21de1c1ea0a.png" width="1038" />
    <figcaption>Поднимаем сервер мониторинга Zabbix 7 + TimescaleDB в docker</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="5O4D">Исходный сайт представленного материала: <a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-server-monitoringa-zabbix-7-timescaledb-v-docker/" target="_blank">r4ven.me</a></p>
  </section>
  <h3 id="WdGe">Приветствую!</h3>
  <p id="2m9s">В данной инструкции мы с вами развернем популярную систему мониторинга <strong>Zabbix</strong> с использованием <strong>TimescaleDB</strong> – плагина для БД <strong>PostgreSQL</strong>, позволяющего эффективно работать с “временнЫми рядам”. Все это добро мы завернем внутрь docker контейнеров 🐳. Будет интересно 😉.</p>
  <p id="bRo9">Напомню, что в одной из прошлых заметок мы обсуждали, что такое <a href="https://r4ven.me/it-razdel/slovarik/chto-takoe-sistemy-monitoringa-v-it/" target="_blank">системы мониторинга в IT</a>, какие виды бывают и немного узнали о популярных реализациях на сегодняшний день, среди которых – Zabbix.</p>
  <p id="mn3u">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</p>
  <blockquote id="LGGY">Сразу прошу обратить внимание на то, что все действия описанные в данном руководстве вы делаете на свой риск и ответственность. Прошу это понимать. Мой блог – лишь площадка, где я рассказываю про свой опыт и делюсь своим мнением по каким-либо вещам и явлениям. Спасибо за понимание.Иван Чёрный</blockquote>
  <figure id="WrTj" class="m_custom">
    <img src="https://img3.teletype.in/files/60/d3/60d3ccd2-4f9b-473f-b6e9-437e12e6027b.png" width="547" />
  </figure>
  <h2 id="zHWw">Введение</h2>
  <p id="ApCH">Особенностью инсталяции, описываемой в этой статье является не только развертывание системы мониторинга Zabbix в docker контейнерах, но и использование ее в связке с базой данных временных рядов – TimescaleDB.</p>
  <p id="J6B7">Прежде чем мы начнем, давайте дадим несколько определений в качестве введения.</p>
  <p id="v46Z"><strong>Zabbix</strong> — это открытая платформа для мониторинга сетей и серверов. Для хранения данных использует реляционные СУБД, например: PostgreSQL, MySQL, MariaDB, Oracle, SQLite и т.д.</p>
  <p id="LWnd"><strong>Временные ряды в базах данных (time series)</strong> — это набор данных, упорядоченных по времени, где значения регистрируются через равные или неравные интервалы времени.</p>
  <p id="b0jq"><strong>Базы данных временных рядов (time series database)</strong> — это специализированные базы данных, предназначенные для эффективного хранения, управления и анализа временных рядов. Часто это <strong>no sql</strong> базы данных.</p>
  <p id="8uar"><strong>TimescaleDB (TSDB)</strong> — это расширение для PostgreSQL, которое оптимизирует работу с временными рядами в данной СУБД, сохраняя при этом всю мощь и гибкость классических SQL like баз данных. С определенного времени Zabbix научился работать с данной СУБД.</p>
  <p id="FgWr">Цитата из официальной документации Zabbix:</p>
  <blockquote id="EEY7">Zabbix supports TimescaleDB, a PostgreSQL-based database solution of automatically partitioning data into time-based chunks to support faster performance at scale.Zabbix.com</blockquote>
  <p id="Icgu">Для лучшего понимания причины выбора именно такой связки, рекомендую статью на Habr: <a href="https://habr.com/ru/companies/zabbix/articles/458530/" target="_blank">Zabbix, временные ряды и TimescaleDB</a>.</p>
  <p id="cA2R">Прошу вас также обратить внимание на предупреждение из оф. документации Zabbix:</p>
  <blockquote id="bPGf">Warning: Currently, TimescaleDB is not supported by Zabbix proxy.Zabbix.com 09.2024</blockquote>
  <p id="qaED">Уверен, что в будущем это поправят. А пока хватит трепа, переходим к делу🤵‍♂️.</p>
  <h2 id="Q4JH">Подготовка</h2>
  <p id="vQri">Разворачивать Zabbix будем в среде <a href="https://r4ven.me/it-razdel/slovarik/distributiv-linux/" target="_blank">дистрибутива</a> <strong>Debian 12</strong> 💿 с установленным <strong>Docker engine</strong> 🐳. Если у вас еще нет готового Linux сервера, то рекомендую мои предыдущие статьи:</p>
  <ul id="lP3c">
    <li id="n7wk"><a href="https://r4ven.me/it-razdel/instrukcii/ustanovka-servera-debian-12-v-virtualbox/" target="_blank">Установка сервера Debian 12 в VirtualBox</a></li>
    <li id="5eUi"><a href="https://r4ven.me/it-razdel/instrukcii/nachalnaya-nastrojka-linux-servera-na-primere-debian/" target="_blank">Начальная настройка Linux сервера на примере Debian</a></li>
    <li id="Pty5"><a href="https://r4ven.me/it-razdel/instrukcii/ustanovka-docker-engine-na-linux-server-pod-upravleniem-debian/" target="_blank">Установка Docker engine на Linux сервер под управлением Debian</a></li>
  </ul>
  <p id="UWWb">Также для дальнейшей работы нам понадобится пользователь с правами <strong>root</strong>.</p>
  <h3 id="B44u">Установка необходимых утилит</h3>
  <p id="NejK">Сегодня нам понадобятся утилиты для взаимодействия с веб. Открываем терминал и устанавливаем систему контроля версий <code>git</code> и утилиту <code>curl</code>:</p>
  <pre id="czYQ">sudo apt update &amp;&amp; sudo apt install -y git curl</pre>
  <figure id="rZHb" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-29.png" width="1117" />
  </figure>
  <h3 id="Ucfk">Скачивание файлов проекта</h3>
  <p id="3GrM">Все файлы проекта находятся в моем <a href="https://r4ven.me/it-razdel/slovarik/repozitorij-programmnogo-obespecheniya/" target="_blank">репозитории</a> на <a href="https://github.com/r4ven-me/zabbix" target="_blank">GitHub</a>. Клонируем его с помощью установленной ранее утилиты <code>git</code> по пути <code>/opt/zabbix</code>:</p>
  <pre id="3zlS">sudo git clone https://github.com/r4ven-me/zabbix /opt/zabbix</pre>
  <figure id="EdWr" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-30.png" width="1121" />
  </figure>
  <p id="ejO4">Описание файлов проекта:</p>
  <figure id="ity8" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-108.png" width="630" />
  </figure>
  <p id="NnYV"><strong>docker-compose.yml – файл описания сервисов, запускаемых в docker контейнерах:</strong></p>
  <p id="GmC2">Секция <strong>NETWORK</strong> – определяет две виртуальные сети docker:</p>
  <ul id="zZ13">
    <li id="qAPx"><code>zbx_net_backend</code> – изолированная сеть для взаимодействия контейнеров <code>postgres-server,</code> <code>zabbix-server</code>, <code>zabbix-web</code> и <code>zabbix-agent</code>;</li>
    <li id="erWk"><code>zbx_net_frontend</code> – сеть с доступом к контейнерам со стороны хостовой ОС: для контейнеров <code>zabbix-server</code> и <code>zabbix-web</code>.</li>
  </ul>
  <p id="G4Ey">Секция <strong>SERVICES</strong> – определяет параметры запускаемых сервисов/контейнеров:</p>
  <ul id="4BMt">
    <li id="RRDH"><code>postgres-server</code> – сервис СУБД TimescaleDB;</li>
    <li id="yDu9"><code>zabbix-server</code> – сервис Zabbix сервера;</li>
    <li id="Lm57"><code>zabbix-web</code> – сервис веб интерфейса для Zabbix сервера (под капотом <strong>nginx</strong> + <strong>php-fpm</strong>);</li>
    <li id="Kws5"><code>zabbix-agent</code> – сервис агента Zabbix для сбора метрик с самого сервера Zabbix.</li>
  </ul>
  <p id="uh3V">Секция <strong>SECRETS</strong> – определяет файлы, содержащие чувствительную информацию, которые прокидываются внутрь контейнеров <code>postgres-server</code>, <code>zabbix-server</code> и <code>zabbix-web</code>:</p>
  <ul id="Kbis">
    <li id="rfcQ"><code>POSTGRES_USER</code> (файл <code>./env/.POSTGRES_USER</code>) – имя пользователь для базы данных Zabbix в СУБД TimescaleDB;</li>
    <li id="WTas"><code>POSTGRES_PASSWORD</code> (файл <code>./env/.POSTGRES_PASSWORD</code>) – соответственно, пароль пользователя.</li>
  </ul>
  <p id="mrLu"><strong>env – директория с файлами, содержащие переменные окружения, значения которых передаются внутрь контейнера при его запуске:</strong></p>
  <ul id="nVoM">
    <li id="UZPS"><code>.env_db</code> – параметры для <code>postgres-server</code>;</li>
    <li id="Jt4H"><code>.env_srv</code> – параметры для <code>zabbix-server</code>;</li>
    <li id="DV37"><code>.env_web</code> – параметры для <code>zabbix-web</code>;</li>
    <li id="x2gz"><code>.env_agent</code> – параметры для локального <code>zabbix-agent</code>;</li>
    <li id="X5Kh"><code>.POSTGRES_PASSWORD</code> – пароль пользователя в БД zabbix;</li>
    <li id="Saep"><code>.POSTGRES_USER</code> – имя пользователя в БД zabbix.</li>
  </ul>
  <p id="a2wB"><strong>src – директория с исходными файлами для сборки кастомного контейнера zabbix-server с расширенным функционалом:</strong></p>
  <ul id="omOs">
    <li id="VGhD"><code>alertscripts</code> – директория с файлами для отправки уведомлений в Telegram:</li>
    <li id="D3nQ"><code>docker-entrypoint.sh</code> – скрипт подготовки окружения внутри контейнера (не изменялся);</li>
    <li id="n1Dr"><code>Dockerfile</code> – кастомизированный файл описания сборки образа;</li>
    <li id="H4Ig"><code>externalscripts</code> – директория со скриптом мониторинга делегирования домена.</li>
  </ul>
  <p id="2rhJ">При необходимости, отредактируйте блок <code>deploy</code> у нужных сервисов в файле <code>docker-compose.yml</code>, в зависимости от серверных ресурсов, которыми располагаете. По умолчанию используются самые минимальные значения.</p>
  <h3 id="xXSM">Создание сервисного пользователя zabbix</h3>
  <p id="QTxd">В целях безопасности создаем ограниченные в правах группу и сервисного пользователя для запуска контейнеров zabbix:</p>
  <pre id="ucT7">sudo addgroup --system --gid 1995 zabbix

sudo adduser --system --gecos &quot;Zabbix monitoring system&quot; \
    --disabled-password --uid 1997 --ingroup zabbix  \
    --shell /sbin/nologin --home /opt/zabbix/zabbix_data zabbix</pre>
  <p id="uJo0"><em><code>adgroup</code> – команда создания группы;</em></p>
  <ul id="FYm4">
    <li id="IE7e"><em><code>--system</code> – помечает группу, как системную и применяет к ней установленные политики;</em></li>
    <li id="YFiU"><em><code>--gid 1995</code> – указывает явный идентификатор группы (GID) – в данном случае 1995 (именно такой GID задают разрабы Zabbix в своих контейнерах);</em></li>
    <li id="GgB5"><em><code>zabbix</code> – название создаваемой группы;</em></li>
  </ul>
  <p id="iNIy"><em><code>adduser</code> – команда создания пользователя</em></p>
  <ul id="B33Q">
    <li id="1rWM"><em><code>--system</code> – помечает группу, как системную и применяет к ней установленные политики;</em></li>
    <li id="EYbW"><em><code>--gecos</code> – позволяет задать описание пользователя;</em></li>
    <li id="xGxA"><em><code>--disabled-password</code> – отключает пароль у пользователя (в таком случае под ним нельзя авторизоваться в системе с помощью пароля);</em></li>
    <li id="2gAY"><em><code>--uid 1997</code> – указывает явный идентификатор пользователя (UID) – в данном случае 1997 (именно такой UID задают разрабы Zabbix в своих контейнерах);</em></li>
    <li id="ZjIy"><em><code>--ingroup zabbix</code> – добавляет пользователя в созданную ранее группу zabbix;</em></li>
    <li id="IMnx"><em><code>--shell /sbin/nologin</code> – в качестве оболочки пользователя устанавливает <strong>nologin</strong> – под ней невозможно авторизоваться в системе;</em></li>
    <li id="b92K"><em><code>--home /opt/zabbix/zabbix_data</code> – задает домашний каталог пользователя, в нашем случае это директория с файлами сервисов zabbix;</em></li>
    <li id="3RoO"><em><code>zabbix</code> – имя создаваемого пользователя.</em></li>
  </ul>
  <figure id="duIa" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-31.png" width="1122" />
  </figure>
  <h3 id="0MJX">Создание сервисного пользователя postgres</h3>
  <p id="OoQM">Теперь аналогичным образом создаем группу и пользователя для запуска контейнера TimescaleDB:</p>
  <pre id="8vU9">sudo addgroup --system --gid 70 postgres

sudo adduser --system --gecos &quot;PostgreSQL database&quot; \
    --disabled-password --uid 70 --ingroup postgres  \
    --shell /sbin/nologin --home /opt/zabbix/postgres_data postgres</pre>
  <figure id="ZFcR" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-32.png" width="1122" />
  </figure>
  <p id="AipO">Проверяем наличие всех нужных файлов и папок:</p>
  <pre id="JRXR">ls -l /opt/zabbix</pre>
  <figure id="GAR9" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-33.png" width="1122" />
  </figure>
  <p id="dJzw">Отлично, идем дальше 🚶.</p>
  <h2 id="VtMT">Создание пароля для базы данных Postgres</h2>
  <p id="Wycx">По умолчанию в файле <code>/opt/zabbix/env/.POSTGRES_PASSWORD</code> я задал для БД zabbix одноименный пароль. Но крайне рекомендую сгенерировать новый, например такой командой:</p>
  <pre id="SW0G">tr -cd &quot;[:alnum:]&quot; &lt; /dev/urandom | head -c 30 \
    | sudo tee /opt/zabbix/env/.POSTGRES_PASSWORD</pre>
  <p id="puBh"><em>Команда <code>tr -cd</code> с помощью <a href="https://r4ven.me/it-razdel/zametki/komandnaya-stroka-linux-perenapravlenie-vvoda-i-vyvoda/" target="_blank">механизма перенаправления стандартных потоков</a> получает на ввод латинские буквы и цифры (класс символов <code>[:alnum:]</code>), генерируемые псевдоустройством <code>/dev/urandom</code>. Затем команда <code>head</code>, получая данные по конвейеру, с помощью ключа <code>-c</code> отбирает 30 первых символов (байт). И в конце, полученная псевдорандомная строка передается на ввод команде <code>tee</code>, запущенной от имени суперпользователя. Полученные данные <code>tee</code> записывает в указанный файл (<code>/opt/zabbix/env/.POSTGRES_PASSWORD</code>) и дублирует вывод в стандартный поток (stdout).</em></p>
  <figure id="Xkqe" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-34.png" width="1118" />
  </figure>
  <blockquote id="Z6dQ">Не обращайте внимания на символ <code>%</code> в конце строки моего примера. Это особенность <a href="https://r4ven.me/it-razdel/instrukcii/zsh-interaktivnaya-komandnaya-obolochka-dlya-linux-oh-my-zsh/" target="_blank">командной оболочки ZSH</a>, которая выводит его (или <code>#</code> для root) при отсутствии символа перевода строки.</blockquote>
  <h2 id="S7Om">Запуск Zabbix стека с помощью docker compose</h2>
  <h3 id="W5Pr">Старт Postgres сервера</h3>
  <p id="L2nn">Первым запускаем сервер СУБД, такой командой:</p>
  <pre id="VErR">sudo docker compose -f /opt/zabbix/docker-compose.yml up -d postgres-server</pre>
  <figure id="bqMe" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-35.png" width="1189" />
  </figure>
  <p id="Dhdx">После загрузки образа и запуска контейнера смотрим его вывод:</p>
  <pre id="pASk">sudo docker logs -f postgres-server</pre>
  <p id="2UVU">При успешном запуске, вы увидите подобное:</p>
  <figure id="wupL" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-120-1500x181.png" width="1500" />
  </figure>
  <p id="92jZ">При первом старте, внутри контейнера выполняются скрипты подготовки окружения и базовой конфигурации СУБД в зависимости от параметров сервера. В одном из моих тестов такой скрипт выставлял параметр <code>max_connections</code> равным <code>25</code> – чего недостаточно даже для импорта схемы БД zabbix и процесс выпадет в ошибку:</p>
  <pre id="BuLc">FATAL:  sorry, too many clients already</pre>
  <p id="X6Jl">Проверить значение <code>max_connections</code> можно такой командой:</p>
  <pre id="7aro">sudo grep &#x27;max_connections&#x27; /opt/zabbix/postgres_data/postgresql.conf</pre>
  <figure id="l4Ls" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-36.png" width="1153" />
  </figure>
  <p id="vNa9">Если у вас <code>&lt;=25</code>, то этот параметр необходимо увеличить. Открываем файл на редактирование любым консольным редактором, например, <a href="https://r4ven.me/tag/vim-neovim/" target="_blank">Vim/Neovim</a> 😎:</p>
  <pre id="bN59">sudo vim /opt/zabbix/postgres_data/postgresql.conf</pre>
  <figure id="tUZD" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-37.png" width="1084" />
  </figure>
  <p id="LL2B">Находим там строку:</p>
  <pre id="bSBO">max_connections = 25</pre>
  <figure id="JXDP" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-38.png" width="1074" />
  </figure>
  <p id="8GBu">И меняем ее, например, на:</p>
  <pre id="3N7c">max_connections = 200</pre>
  <figure id="C6Zq" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-39.png" width="780" />
  </figure>
  <p id="R5wL">Сохраняем файл, выходим из редактора.</p>
  <p id="wVqj">Для применения изменений перезапускаем контейнер <code>postgres-server</code> и проверяем текущее значение <code>max_connections</code>:</p>
  <pre id="fRX1">sudo docker compose -f /opt/zabbix/docker-compose.yml restart postgres-server

sudo docker exec -it postgres-server psql -U zabbix -c &quot;SHOW max_connections;&quot;</pre>
  <figure id="2dyG" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-40.png" width="1199" />
  </figure>
  <p id="Ax5T">Все применилось, переходим к запуску контейнера <code>zabbix-server</code>.</p>
  <h3 id="Ctly">Старт Zabbix сервера</h3>
  <p id="LDK7">Запускаем его такой командой:</p>
  <pre id="Shw9">sudo docker compose -f /opt/zabbix/docker-compose.yml up -d zabbix-server</pre>
  <figure id="gDZn" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-41.png" width="1199" />
  </figure>
  <p id="8HPP">Смотрим вывод контейнера:</p>
  <pre id="cdpP">sudo docker logs -f zabbix-server</pre>
  <p id="G4wp">При первом запуске, котейнер запустит создание базы. Это займет некоторое время. Вывод остановится на такой строке:</p>
  <pre id="pFYX">Creating &#x27;zabbix&#x27; schema in PostgreSQL</pre>
  <figure id="IEuM" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-42.png" width="1201" />
  </figure>
  <p id="kUgB">Обязательно дождитесь завершения процедуры создания БД!</p>
  <p id="Ovw9">При успешном запуске вы должны увидеть что-то подобное:</p>
  <figure id="QCvq" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-43.png" width="1196" />
  </figure>
  <p id="5AuL">Возможно в самом конце будет вывод, подобный этому:</p>
  <pre id="GEF5">256:20240922:121849.602 Zabbix agent item &quot;system.cpu.util[,system]&quot; on host &quot;Zabbix server&quot; failed: first network error, wait for 15 seconds
225:20240922:121855.944 item &quot;Zabbix server:zabbix[vmware,buffer,pused]&quot; became not supported: No &quot;vmware collector&quot; processes started.
225:20240922:121858.958 item &quot;Zabbix server:zabbix[process,report writer,avg,busy]&quot; became not supported: No &quot;report writer&quot; processes started.
225:20240922:121859.962 item &quot;Zabbix server:zabbix[process,report manager,avg,busy]&quot; became not supported: No &quot;report manager&quot; processes started.
256:20240922:121904.599 Zabbix agent item &quot;system.users.num&quot; on host &quot;Zabbix server&quot; failed: another network error, wait for 15 seconds
256:20240922:121919.602 Zabbix agent item &quot;system.cpu.load[all,avg5]&quot; on host &quot;Zabbix server&quot; failed: another network error, wait for 15 seconds
225:20240922:121928.010 item &quot;Zabbix server:zabbix[connector_queue]&quot; became not supported: connector is not initialized: please check &quot;StartConnectors&quot; configuration parameter
225:20240922:121929.016 item &quot;Zabbix server:zabbix[process,connector manager,avg,busy]&quot; became not supported: No &quot;connector manager&quot; processes started.
225:20240922:121930.021 item &quot;Zabbix server:zabbix[process,connector worker,avg,busy]&quot; became not supported: No &quot;connector worker&quot; processes started.
256:20240922:121934.600 temporarily disabling Zabbix agent checks on host &quot;Zabbix server&quot;: interface unavailable</pre>
  <p id="MxUw">Не обращаем на него внимания.</p>
  <p id="mgBu">Проверяем статус запущенных контейнеров:</p>
  <pre id="0c8P">sudo docker ps</pre>
  <figure id="Y6qw" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-44-1500x189.png" width="1500" />
  </figure>
  <p id="BXZt">Все ок – идем дальше.</p>
  <h3 id="hRkr">Создание схемы для TimescaleDB</h3>
  <p id="mkxx">Выводим созданный ранее пароль в терминал, скоро он нам понадобится. Затем подключаемся к оболочке контейнера <code>zabbix-server</code>:</p>
  <pre id="b4IL">sudo cat /opt/zabbix/env/.POSTGRES_PASSWORD

sudo docker exec -it zabbix-server bash</pre>
  <figure id="HQAs" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-45.png" width="1111" />
  </figure>
  <p id="sh9X">Теперь импортируем схему TimescaleDB с помощью SQL скрипта, который разработчики Zabbix любезно положили в системные файлы. При вводе команды импорта у нас запросят пароль от БД, который мы вывели на предыдущем шаге:</p>
  <pre id="jh32">psql -h postgres-server -U zabbix zabbix &lt; /usr/share/doc/zabbix-server-postgresql/timescaledb.sql</pre>
  <p id="b1HM">Процесс импорта представляет собой простое перенаправление содержимого SQL скрипта на вводе команды подключения к БД с помощью <code>psql</code>.</p>
  <p id="al8E">Вывод должен быть таким:</p>
  <figure id="9UPA" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-46.png" width="1232" />
  </figure>
  <p id="WgiC">Выходим из контейнера <code>zabbix-server</code> и проверяем наличие информации о чанках (chunks) в Postgres:</p>
  <pre id="eSHx">exit

sudo docker exec -it postgres-server \
    psql -U zabbix -c &quot;SELECT * FROM chunks_detailed_size(&#x27;history&#x27;)&quot;</pre>
  <figure id="JQFc" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-47.png" width="1390" />
  </figure>
  <p id="Ea5C">Если вывод у вас такой же, как на скрине выше, то все импортировалось успешно 🥳.</p>
  <p id="AOaL">На этом этапе БД Postgres/TimesacleDB и Zabbix сервер готовы 😉.</p>
  <h3 id="S0Rg">Старт всего стека TimesacleDB + Zabbix server + Zabbix web + Zabbix agent</h3>
  <p id="2fNP">Останавливаем запущенные контейнеры и запускаем всю инсталляцию, включая Zabbix web и Zabbix agent:</p>
  <pre id="pKzs">sudo docker compose -f /opt/zabbix/docker-compose.yml down

sudo docker compose -f /opt/zabbix/docker-compose.yml up -d</pre>
  <figure id="yo7u" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-48.png" width="1161" />
  </figure>
  <p id="7CEM">Проверяем все ли контейнеры запустились корректно:</p>
  <pre id="99jI">sudo docker ps

sudo docker compose -f /opt/zabbix/docker-compose.yml logs -f</pre>
  <figure id="K3X4" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-49-1500x196.png" width="1500" />
  </figure>
  <p id="Babm">Отлично. Теперь проверим работу самого Zabbix:</p>
  <pre id="U6ZA">curl -I http://localhost:8080

nc -zv localhost 10051

ss -tulnap | grep -E &#x27;8080|10051&#x27;</pre>
  <blockquote id="75E0">Первой командой мы проверили доступность веб интерфейса из консоли, второй – доступность порта <code>zabbix-server</code>, а третьей вывели порты, прослушиваемые хостовой ОС.</blockquote>
  <figure id="LK3J" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-50.png" width="1157" />
  </figure>
  <p id="3SiV">Отлично, все работает 🎉🎉🎉.</p>
  <h2 id="29xd">Доступ к веб интерфейсу Zabbix</h2>
  <p id="2phT">Способ получения доступа к веб интерфейсу Zabbix зависит от условий, в которых вы разворачивали стек. Я опишу несколько очевидных вариантов.</p>
  <p id="MZoR"></p>
  <h3 id="mtJA">1) Если Zabbix сервер развернут на локальной машине</h3>
  <p id="t1MA">Просто вбейте в браузере URL 😁😁😁:</p>
  <pre id="GEQL">http://127.0.0.1:8080/</pre>
  <h3 id="UC1N">2) Если Zabbix сервер развернут на удаленном сервере, который находится в локальной или VPN сети</h3>
  <p id="z96s">В таком случае отредактируйте настройки сети для сервисов <code>zabbix-server</code> и <code>zabbix-web</code> в <code>docker-compose.yml</code> файле.</p>
  <p id="nOZS">Например, внутренний адрес моего сервера в сети VPN: <code>192.168.122.24</code>. Правлю <code>docker-compose.yml</code>:</p>
  <pre id="s9KH">sudo vim /opt/zabbix/docker-compose.yml</pre>
  <p id="fmIU">zabbix-server:</p>
  <figure id="vWgI" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-51.png" width="706" />
  </figure>
  <p id="Cdfc">zabbix-web:</p>
  <figure id="yc8J" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-52.png" width="638" />
  </figure>
  <p id="5ScU">Перезапускаю все контейнеры:</p>
  <pre id="z9GG">sudo docker compose -f /opt/zabbix/docker-compose.yml down

sudo docker compose -f /opt/zabbix/docker-compose.yml up -d

sudo docker ps</pre>
  <figure id="QjNM" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-53-1500x169.png" width="1500" />
  </figure>
  <p id="qCVY">На подключенном к VPN сети клиенте открываю в браузере такой URL:</p>
  <pre id="P8Dv">http://192.168.122.24:8080/</pre>
  <h3 id="nweJ">3) Если Zabbix сервер развернут на удаленном сервере и не подключен к локальной или VPN сети</h3>
  <p id="8ZWa">При таком раскладе можно прокинуть SSH порт либо открыть доступ напрямую или через обратный прокси, наподобие <strong>nginx</strong>. Я рассмотрю лишь первый случай, как самый простой. А еще потому, что два других выходят за рамки данной статьи 😜.</p>
  <p id="pvBs">На клиенте открываем терминал и выполняем:</p>
  <pre id="ahZC">ssh -L 8080:127.0.0.1:8080 user@example.com</pre>
  <p id="8PXl">Где (по порядку):</p>
  <ul id="2cnK">
    <li id="dqtt"><code>-L</code> – ключ перенаправления локального порта;</li>
    <li id="Y9q9"><code>8080</code> – порт, который будет слушать клиентская машина и перенаправлять его на <code>8080</code> порт сервера;</li>
    <li id="nf7r"><code>127.0.0.1</code> – адрес сервера, на котором он слушает порт;</li>
    <li id="48Y4"><code>8080</code> – соответственно порт, на который перенаправляем;</li>
    <li id="MKVU"><code>user@example.com</code> – пользователь и адрес SSH сервера.</li>
  </ul>
  <p id="FLuN">В моём примере команда такая:</p>
  <figure id="8J8S" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-56.png" width="1164" />
  </figure>
  <p id="7MJn">Теперь открываем браузер и переходим по адресу: <code>http://127.0.0.1:8080/</code></p>
  <p id="ACGK">Доступ к веб интерфейсу будет пока открыта SSH сессия.</p>
  <p id="GTDV">Для авторизации в веб интерфейсе используйте стандартные логин: <code>Admin</code> и пароль: <code>zabbix</code></p>
  <figure id="NWec" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-54-1500x927.png" width="1500" />
  </figure>
  <p id="H75y">Если вы увидели такое:</p>
  <figure id="jfPc" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-55-1500x930.png" width="1500" />
  </figure>
  <p id="mW3F">Мои поздравления 😎! Zabbix сервер с TimescaleDB поднят и готов к работе 👷‍♂️.</p>
  <h2 id="noJx">Опционально</h2>
  <p id="0y50">Чтобы не раздувать статью, ниже приведены ссылки на необязательные, но рекомендованные шаги инструкции 😉 на моем сайте <a href="https://r4ven.me/" target="_blank">r4ven.me</a>.</p>
  <ul id="wA8k">
    <li id="5ebZ"><a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-server-monitoringa-zabbix-7-timescaledb-v-docker/#%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Zabbix_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0" target="_blank">Минимальная начальная настройка Zabbix сервера</a></li>
    <li id="YzNM"><a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-server-monitoringa-zabbix-7-timescaledb-v-docker/#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B0%D0%B2%D1%82%D0%BE%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0_Zabbix_%D1%81%D1%82%D0%B5%D0%BA%D0%B0_%D1%81_systemd" target="_blank">Настройка автозапуска Zabbix стека с systemd</a></li>
    <li id="dZVW"><a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-server-monitoringa-zabbix-7-timescaledb-v-docker/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA_Zabbix_agent_%D0%B2_docker_%D0%BD%D0%B0_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC_%D1%85%D0%BE%D1%81%D1%82%D0%B5" target="_blank">Установка и запуск Zabbix agent в docker на удаленном хосте</a></li>
    <li id="uvh1"><a href="https://r4ven.me/it-razdel/instrukcii/podnimaem-server-monitoringa-zabbix-7-timescaledb-v-docker/#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8_%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9_Zabbix_%D0%B2_Telegram_%D1%81_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%BC" target="_blank">Настройка отправки уведомлений Zabbix в Telegram с графиком</a></li>
  </ul>
  <h2 id="2c7z">Заключение</h2>
  <p id="6uzG">Фух..🤯 это была не самая простая статья. Особенно по объему перелопаченной информации. Но, мне кажется, оно того стоило. В итоге мы получили гибкий и легко переносимый проект системы мониторинга, работающий внутри docker контейнеров. А также мы настроили лаконичные, но информативные уведомления с графиками в Telegram, чтобы всегда быть в курсе состояния нашей инфраструктуры.</p>
  <p id="gFaX">Хочется также отметить великолепную работу разработчиков Zabbix. В частности, актуальность и разнообразие docker образов и доступность файлов их сборки. После написания этой статьи, я их зауважал еще больше 👍.</p>
  <p id="AvNZ">Спасибо, что читаете 😊. Если возникли вопросы – приглашаю вас в <a href="https://t.me/r4ven_me_chat/" target="_blank">Вороний чат</a>, как вы догадались, в телеге 😅. У нас там дружное сообщество 🚶‍♀️🐧🚶🐧🚶‍♂️🐧. И обязательно подписывайтесь на основной телеграм канал: <a href="https://t.me/r4ven_me/" target="_blank">@r4ven_me</a>, чтобы не пропустить публикации новых материалов на сайте.</p>
  <p id="mpag">Желаю успехов и нападающего прода! 😌</p>
  <h2 id="bERQ">Используемые материалы</h2>
  <ul id="nZ5U">
    <li id="ETQ9"><a href="https://github.com/r4ven-me/zabbix" target="_blank">Мой репозиторий zabbix сервера | GitHub</a></li>
    <li id="fCPy"><a href="https://github.com/r4ven-me/zabbix-agent" target="_blank">Мой репозиторий zabbix агента | GitHub</a></li>
    <li id="VNeX"><a href="https://ru.wikipedia.org/wiki/%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%80%D1%8F%D0%B4" target="_blank">Временной ряд | Википедия</a></li>
    <li id="cWmq"><a href="https://habr.com/ru/companies/zabbix/articles/458530/" target="_blank">Zabbix, временные ряды и TimescaleDB | Habr</a></li>
    <li id="RS02"><a href="https://www.zabbix.com/documentation/current/en/manual/appendix/install/timescaledb" target="_blank">Использование TimescaleDB с Zabbix | Zabbix.com (EN)</a></li>
    <li id="nE43"><a href="https://github.com/smejdil/zabbix-docker-timescaledb/tree/main/2.7.2-pg14" target="_blank">Исходные файлы docker, которые я адаптировал | GitHub</a></li>
    <li id="hwai"><a href="https://hub.docker.com/r/timescale/timescaledb" target="_blank">Реестр docker образов TimescaleDB | Dockerhub</a></li>
    <li id="ckcQ"><a href="https://hub.docker.com/_/postgres" target="_blank">Описание docker образа PostgresSQL | Dockerhub</a></li>
    <li id="vy2V"><a href="https://github.com/timescale/timescaledb-docker/" target="_blank">Исходные файлы docker образов TimescaleDB | GitHub</a></li>
    <li id="9shU"><a href="https://hub.docker.com/r/zabbix/zabbix-server-pgsql" target="_blank">Описание docker образа Zabbix server | Dockerhub</a></li>
    <li id="3SlO"><a href="https://hub.docker.com/r/zabbix/zabbix-web-nginx-pgsql" target="_blank">Описание docker образа Zabbix web | Dockerhub</a></li>
    <li id="y7Ww"><a href="https://registry.hub.docker.com/r/zabbix/zabbix-agent/" target="_blank">Описание docker образа Zabbix agent | Dockerhub</a></li>
    <li id="CENA"><a href="https://github.com/zabbix/zabbix-docker/tree/7.0/Dockerfiles/server-pgsql/alpine" target="_blank">Исходный Dockerfile для Zabbix server | GitHub</a></li>
    <li id="XyWz"><a href="https://github.com/xxsokolov/Zabbix-Notification-Telegram" target="_blank">Исходные файлы Zabbix Notification Telegram | GitHub</a></li>
    <li id="vr5S"><a href="https://github.com/xxsokolov/Zabbix-Notification-Telegram?" target="_blank">Описание работы скрипта Zabbix Notification Telegram | GitHub</a></li>
    <li id="QJfA"><a href="https://github.com/xxsokolov/Zabbix-Notification-Telegram/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BD%D0%BE%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%B0-Zabbix-Notification-Telegram" target="_blank">Инструкция по установке Zabbix Notification Telegram | GitHub</a></li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@r4ven_me/sistemy-monitoringa</guid><link>https://teletype.in/@r4ven_me/sistemy-monitoringa?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me</link><comments>https://teletype.in/@r4ven_me/sistemy-monitoringa?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=r4ven_me#comments</comments><dc:creator>r4ven_me</dc:creator><title>Что такое системы мониторинга в IT?</title><pubDate>Wed, 18 Sep 2024 21:03:41 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/ec/08/ec08fb37-2397-4154-9633-f08d6b1b6f83.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/1a/42/1a42119d-51f4-4501-b0b1-9839470e9b1a.png"></img>Истодный сайт представленного материала: r4ven.me]]></description><content:encoded><![CDATA[
  <figure id="NdjG" class="m_original">
    <img src="https://img2.teletype.in/files/1a/42/1a42119d-51f4-4501-b0b1-9839470e9b1a.png" width="830" />
    <figcaption>Что такое системы мониторинга в IT?</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="i4SX">Исходный сайт представленного материала: <a href="https://r4ven.me/" target="_blank">r4ven.me</a></p>
  </section>
  <h3 id="I0KB">Приветствую!</h3>
  <p id="FQ7R">В данной заметке поговорим о том, какие бывают виды систем мониторинга, и по традиции, рассмотрим их самые популярные реализации на сегодняшний день. Тема важная, поэтому не поленитесь прочитать, это не займет много времени😉.</p>
  <blockquote id="QGoU">Присоединяйтесь к нашему каналу в телеграм:  <a href="https://t.me/r4ven_me" target="_blank">t.me/r4ven_me</a>, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат:  <a href="https://t.me/r4ven_me_chat" target="_blank">t.me/r4ven_me_chat</a>.</blockquote>
  <p id="rCg8">Хочу отметить, что этот теоретический пост📕 предшествует будущей статье по развертыванию <strong>Zabbix + TimescaleDB</strong> в контейнерах <a href="https://r4ven.me/it-razdel/slovarik/kontejnerizaciya-tehnologiya-virtualizacii-na-urovne-os/" target="_blank">Docker</a>🐳.</p>
  <p id="jbNc">В статье я буду использовать аббревиатуру <strong>СМ</strong> – сокр. система мониторинга.</p>
  <h2 id="zKcQ">Вместо введения: зачем нужны системы мониторинга?</h2>
  <p id="gFN8">TLDR: чтобы не делать так 😁</p>
  <figure id="BI1E" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-28.png" width="1067" />
  </figure>
  <p id="TQOg">А если серьезно, ниже представлен перечень задач, которые решают СМ📊:</p>
  <ol id="fZgo">
    <li id="kQJW"><strong>Сбор метрик</strong>: сбор данных о производительности элементов инфраструктуры, таких как загрузка CPU, RAM, DISK и множество других;</li>
    <li id="EoJA"><strong>Обнаружение неисправностей:</strong> своевременная идентификация проблем позволяет администраторам и разработчикам быстрее их устранить;</li>
    <li id="oz7Z"><strong>Отправка уведомлений:</strong> почти все системы мониторинга, имеет в своем арсенале функционал отправки уведомлений по различным каналам связи (email, мессенджеры, SMS и др.) в случае обнаружения проблем;</li>
    <li id="tlcQ"><strong>Расширенная аналитика:</strong> СМ собирает и хранит множество данных, анализ которых помогает выявить узкие места и улучшить производительность системы;</li>
    <li id="HVDS"><strong>Снижение времени простоя:</strong> очевидно, мониторинг позволяет заранее обнаружить деградацию сервисов и предотвратить серьезные сбои.</li>
  </ol>
  <h2 id="4yV3">Виды систем мониторинга</h2>
  <p id="CHpx">Теперь немного о том, какие основные виды систем мониторинга существуют📋:</p>
  <ul id="D39p">
    <li id="lcrg"><strong>Мониторинг инфраструктуры</strong> – отслеживает состояние серверов, сетевых устройств, баз данных и других компонентов ИТ-инфраструктуры. Примеры СМ: <strong>Nagios</strong>, <strong>Zabbix</strong>.</li>
    <li id="mT2H"><strong>Мониторинг приложений </strong>– следит за состоянием приложений и их производительностью на уровне кода, выявляя узкие места и проблемы в работе ПО. Примеры СМ: <strong>New Relic</strong>, <strong>AppDynamics</strong>.</li>
    <li id="tTlQ"><strong>Мониторинг журналов </strong>– анализирует логи приложений и систем для выявления ошибок, сбоев и аномальных действий. Примеры СМ: <strong>Elasticsearch</strong>, <strong>Logstash</strong>, <strong>Kibana (ELK Stack)</strong>.</li>
    <li id="NDCp"><strong>Мониторинг сетевого трафика</strong> – предназначен для отслеживания сетевой активности, анализа пропускной способности и поиска аномалий в сетевом трафике. Пример: <strong>SolarWinds</strong>, <strong>Wireshark</strong>.</li>
    <li id="yyRL"><strong>Облачный мониторинг</strong> – инструменты, специально предназначенные для мониторинга облачных ресурсов и их инфраструктуры. Примеры СМ: <strong>Amazon CloudWatch</strong>, <strong>Google Cloud Monitoring</strong>.</li>
  </ul>
  <h2 id="MmoA">Популярные системы мониторинга</h2>
  <p id="3tyG">Теперь рассмотрим некоторые популярные <a href="https://r4ven.me/it-razdel/slovarik/otkrytoe-po/" target="_blank">Open source</a> решения из категории СМ, а также коротко пробежимся по их преимуществам и недостаткам.</p>
  <h3 id="YAsW">1. <strong>Zabbix</strong></h3>
  <figure id="zzag" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/monitoring_2.resized.png" width="1024" />
  </figure>
  <p id="xWmn"><strong>Zabbix</strong> — это открытая платформа для мониторинга сетей и серверов. Она поддерживает сбор данных с разных источников, предоставляет детализированные графики и отчеты.</p>
  <p id="ph4B"><strong>Плюсы:</strong></p>
  <ul id="up5s">
    <li id="Ot10">Бесплатный и с открытым исходным кодом.</li>
    <li id="s8FL">Гибкая настройка под любые нужды (просто комбайн в мире СМ).</li>
    <li id="pP5E">Поддержка большого количества метрик.</li>
  </ul>
  <p id="jt1I"><strong>Минусы:</strong></p>
  <ul id="xEa0">
    <li id="adwb">Сложность настройки для начинающих.</li>
    <li id="dHJV">Могут быть проблемы с масштабированием при больших нагрузках.</li>
  </ul>
  <h3 id="5JCY">2. <strong>Prometheus</strong></h3>
  <figure id="ATmh" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/monitoring_4.resized.png" width="1024" />
  </figure>
  <p id="ElG1"><strong>Prometheus</strong> — это мощная система для мониторинга и алертинга с открытым исходным кодом, широко используемая в среде DevOps. Она ориентирована на сбор метрик и поддерживает специальный язык запросов PromQL.</p>
  <p id="VVv9"><strong>Плюсы:</strong></p>
  <ul id="7kpw">
    <li id="6QSE">Высокая скорость обработки данных.</li>
    <li id="H2r0">Идеально подходит для динамических облачных сред.</li>
    <li id="4Qgj">Простая интеграция с системами контейнеризации, такими как Kubernetes.</li>
  </ul>
  <p id="iSEW"><strong>Минусы:</strong></p>
  <ul id="kH1p">
    <li id="XvKa">Ограниченные возможности работы с логами.</li>
    <li id="NzFG">Сложности при хранении данных на длительный срок.</li>
  </ul>
  <h3 id="3Xr9">3. <strong>Grafana</strong></h3>
  <figure id="BEtG" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/monitoring_1-1500x778.png" width="1500" />
  </figure>
  <p id="4TYl"><strong>Grafana</strong> — это open source инструмент для визуализации данных из различных источников мониторинга. Часто используется в связке с Prometheus для создания наглядных дашбордов. Также из коробки имеет функционал отправки уведомлений.</p>
  <p id="VixT"><strong>Плюсы:</strong></p>
  <ul id="onbK">
    <li id="ynMz">Поддержка множества источников данных (Prometheus, InfluxDB, ElasticSearch, Zabbix и др.).</li>
    <li id="cxlH">Гибкие и детальные дашборды.</li>
  </ul>
  <p id="P81z"><strong>Минусы:</strong></p>
  <ul id="twfW">
    <li id="jNEp">Самостоятельно не собирает данные (нужен источник).</li>
    <li id="mSkS">Требует навыков настройки графиков/дашбордов.</li>
  </ul>
  <h3 id="5Ufr">4. <strong>Nagios</strong></h3>
  <figure id="l759" class="m_column">
    <img src="https://r4ven.me/wp-content/uploads/2024/09/image-27-1500x731.png" width="1500" />
    <figcaption>Источник: nagios.org</figcaption>
  </figure>
  <p id="lkUc"><strong>Nagios</strong> — одна из старейших и наиболее известных систем мониторинга, ориентированная на мониторинг серверов, сетей и приложений. Также имеет открытый исходный код.</p>
  <p id="kle5"><strong>Плюсы:</strong></p>
  <ul id="APqu">
    <li id="qNzZ">Широкая поддержка плагинов.</li>
    <li id="oiel">Подходит для небольших и средних сетей.</li>
  </ul>
  <p id="vlFD"><strong>Минусы:</strong></p>
  <ul id="d1lc">
    <li id="p2U3">Сложность настройки для начинающих.</li>
    <li id="VZzK">Ограниченная масштабируемость.</li>
  </ul>
  <h2 id="heeO">Заключение</h2>
  <p id="bRRs">В современном мире, ни одна серьезная IT инфраструктура не обходится без системы мониторинга. Как уже говорил ранее, СМ играет важную роль в обеспечении стабильной работы наблюдаемых систем.</p>
  <p id="7GBG">Выбор подходящего инструмента зависит от различных факторов: размеров компании, типа приложений и прочих особенностей инфры.</p>
  <p id="eBAH">Цель данной заметки, дать читателю общее представление о СМ и их назначении. В ближайшем будущем в Вороньем блоге появится статья, по развёртыванию в Docker одной из популярных open source СМ – <strong>Zabbix</strong>, изначально написанной Алексеем Владышевым.</p>
  <p id="aKI0">Чтобы не пропустить новые посты – подписывайтесь на наш телеграм канал <a href="https://t.me/r4ven_me" target="_blank">@r4ven_me</a>📱, а если возникли вопросы или просто есть желание “перетереть за опенсорс” – заглядывайте в наш чат <a href="https://t.me/r4ven_me_chat" target="_blank">@r4ven_me_chat</a>💬.</p>
  <h2 id="tb9t">Полезные источники</h2>
  <ul id="VojB">
    <li id="azRp"><a href="https://ru.wikipedia.org/wiki/Zabbix" target="_blank">Zabbix | Википедия</a></li>
    <li id="PZOV"><a href="https://www.altlinux.org/Prometheus" target="_blank">Prometheus | ALT Linux Wiki</a></li>
    <li id="C81O"><a href="https://ru.wikipedia.org/wiki/Grafana" target="_blank">Grafana | Википедия</a></li>
    <li id="nqvA"><a href="https://ru.wikipedia.org/wiki/Nagios" target="_blank">Nagios | Википедия</a></li>
    <li id="OY2Q"><a href="https://r4ven.me/it-razdel/slovarik/chto-takoe-sistemy-monitoringa-v-it/" target="_blank">Оригинал статьи | Вороний блог</a></li>
  </ul>

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