<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title></title>
    <description>Сайт где вы можете найти для себя что-то новое в мире IT.</description>
    <link>http://www.tipoit.kz/</link>
    <atom:link href="http://www.tipoit.kzhttp://www.tipoit.kz/sitemap.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 19 Mar 2026 12:19:40 +0600</pubDate>
    <lastBuildDate>Thu, 19 Mar 2026 12:19:40 +0600</lastBuildDate>
    <generator>Jekyll v3.4.0</generator>
    
      <item>
        <title>Minio - Error has incorrect configuration Expected same MINIO_ environment variables and values across all servers</title>
        <description>&lt;p&gt;Сразу скажу, что проблема тут именно в параметрах, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;MINIO_COMPRESS_EXTENSIONS&lt;/code&gt; и т.д. Что нужно сделать первым делом? Конечно проверить переменные в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/default/minio&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/sysconfig/minio&lt;/code&gt; или в самом &lt;code class=&quot;highlighter-rouge&quot;&gt;systemd файле&lt;/code&gt; сервиса MinIO.&lt;/p&gt;

&lt;p&gt;Но в моём случае всё казалось одинаковым для человеческого глаза. В моём случае переменные были указаны в файле сервиса MinIO (&lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/lib/systemd/system/minio.service&lt;/code&gt;) и моя основная задача была в переносе существующей ноды MinIO на новый сервер с более новой ОС (CentOS 9). Поэтому я уже копировал существующий файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/lib/systemd/system/minio.service&lt;/code&gt; со старого сервера на новый и как мне казалось ничего изменится не могло.&lt;/p&gt;

&lt;h3 id=&quot;как-проверить-что-в-итоге-использует-приложение&quot;&gt;Как проверить что в итоге использует приложение?&lt;/h3&gt;

&lt;p&gt;А вот теперь я покажу что приложение MinIO видит иначе нежели мы. Если переменные передаются сервису в стиле &lt;code class=&quot;highlighter-rouge&quot;&gt;Environment=MINIO_ROOT_USER=storeadmin&lt;/code&gt;, то можно посмотреть какие именно значения получает уже само приложение. Для этого выполняем:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /proc/&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;pidof minio&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/environ | tr &lt;span class=&quot;s1&quot;&gt;'\0'&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'\n'&lt;/span&gt; | grep MINIO_
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;MINIO_ROOT_USER=aaaa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_ROOT_PASSWORD=aaaa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_PROMETHEUS_AUTH_TYPE=public&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CONSOLE_MINIO_SERVER=https://minio&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_COMPRESS=on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_COMPRESS_EXTENSIONS=.txt,.log,.csv,.json,.tar,.xml,.bin,.pdf,.xls,.xlsx,.doc,.docx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_COMPRESS_MIME_TYPES=text/*,application/json,application/xml,application/pdf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И вроде бы всё нормально, но есть одно, но если выполнить туже команду на другой ноде (CentOS 7) я получу результат:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;MINIO_ROOT_USER=aaaa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_ROOT_PASSWORD=aaaa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_PROMETHEUS_AUTH_TYPE=public&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CONSOLE_MINIO_SERVER=https://minio&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_COMPRESS=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;on&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_COMPRESS_EXTENSIONS=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;.txt,.log,.csv,.json,.tar,.xml,.bin,.pdf,.xls,.xlsx,.doc,.docx&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_COMPRESS_MIME_TYPES=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text/*,application/json,application/xml,application/pdf&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Получается, что указанные переменные с двойными кавычками в файле /usr/lib/systemd/system/minio.service передаются приложению уже без них.&lt;/strong&gt; Решением будет либо убрать все кавычки на всех нодах, либо же добавить знак &lt;code class=&quot;highlighter-rouge&quot;&gt;\&lt;/code&gt; перед кавычками.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Environment=MINIO_COMPRESS=\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;on\&quot;
Environment=MINIO_COMPRESS_EXTENSIONS=\&quot;.txt,.log,.csv,.json,.tar,.xml,.bin,.pdf,.xls,.xlsx,.doc,.docx\&quot;
Environment=MINIO_COMPRESS_MIME_TYPES=\&quot;text/*,application/json,application/xml,application/pdf\&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Далее я выполнил &lt;code class=&quot;highlighter-rouge&quot;&gt;systemctl daemon-reload&lt;/code&gt; и нормально запустил ноду. Да я понимаю, что вариант с указанием переменных в самом systemd файле не совсем правильный, но иногда приходится работать с тем то имеешь. Да и у кого-то может быть такая же ситуация, а решения её в интернете я особо и не нашёл.&lt;/p&gt;

&lt;h3 id=&quot;решение-2&quot;&gt;Решение 2&lt;/h3&gt;

&lt;p&gt;Может так оказаться что у вас разные версии MinIO на хостах. В таком случае нужно привести все узлы MinIO к одной версии.&lt;/p&gt;
</description>
        <pubDate>Thu, 20 Nov 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-expected-same-minio-environment</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-expected-same-minio-environment</guid>
        
        <category>minio</category>
        
        
      </item>
    
      <item>
        <title>Docker - Минимум что нужно знать для работы с Kubernetes (k8s)</title>
        <description>&lt;p&gt;В этой статье я не буду &lt;strong&gt;погружаться во все дебри контейнеризации&lt;/strong&gt;, а лишь рассмотрю, &lt;strong&gt;что должен знать любой человек&lt;/strong&gt;, начинающий работать с &lt;strong&gt;Kubernetes (k8s)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#p1&quot;&gt;Что такое Docker?&lt;/a&gt; /
&lt;a href=&quot;#p2&quot;&gt;Docker build&lt;/a&gt; /
&lt;a href=&quot;#p3&quot;&gt;Docker image&lt;/a&gt; /
&lt;a href=&quot;#p4&quot;&gt;docker pull&lt;/a&gt; /
&lt;a href=&quot;#p5&quot;&gt;docker push&lt;/a&gt; /
&lt;a href=&quot;#p6&quot;&gt;docker run&lt;/a&gt; /&lt;/p&gt;

&lt;h3 id=&quot;p1&quot;&gt;Что такое Docker?&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; — это платформа для &lt;strong&gt;контейнеризации&lt;/strong&gt;, которая позволяет &lt;strong&gt;создавать&lt;/strong&gt;, &lt;strong&gt;запускать&lt;/strong&gt; и &lt;strong&gt;управлять приложениями&lt;/strong&gt; в изолированных &lt;strong&gt;контейнерах&lt;/strong&gt;. Сам &lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; уже давно используется (2013 год) и, скорее всего, вы так или иначе с ним сталкивались.&lt;/p&gt;

&lt;p&gt;Суть &lt;strong&gt;контейнеризации&lt;/strong&gt; в том, что вы используете одно физическое устройство (&lt;strong&gt;сервер&lt;/strong&gt;) вместо нескольких. Благодаря &lt;strong&gt;контейнеризации&lt;/strong&gt; один и тот же физический &lt;strong&gt;сервер&lt;/strong&gt; может быть и &lt;strong&gt;веб-сервером&lt;/strong&gt;, и &lt;strong&gt;сервером приложений&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-9.svg&quot; alt=&quot;drawing&quot; width=&quot;70%&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;экономия-ресурсов-и-бюджета&quot;&gt;Экономия ресурсов и бюджета&lt;/h4&gt;

&lt;p&gt;Давайте для примера рассмотрим &lt;strong&gt;компанию&lt;/strong&gt;, разрабатывающую &lt;strong&gt;софт&lt;/strong&gt; для нескольких &lt;strong&gt;проектов&lt;/strong&gt; (&lt;strong&gt;проект А&lt;/strong&gt;, &lt;strong&gt;проект Б&lt;/strong&gt;, &lt;strong&gt;проект В&lt;/strong&gt;). И под каждый &lt;strong&gt;проект&lt;/strong&gt; приходится выделять три физических &lt;strong&gt;сервера&lt;/strong&gt;. Почему так? На то много причин, и самая основная, конечно же, в том, что &lt;strong&gt;проекты не должны пересекаться&lt;/strong&gt;, т.е. требуется &lt;strong&gt;изоляция&lt;/strong&gt; каждого &lt;strong&gt;проекта&lt;/strong&gt; от другого.&lt;/p&gt;

&lt;p&gt;И в такой реализации следующие &lt;strong&gt;минусы&lt;/strong&gt;: &lt;strong&gt;цена&lt;/strong&gt;, &lt;strong&gt;обслуживание серверов&lt;/strong&gt;, &lt;strong&gt;мониторинг состояния серверов&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;При использовании &lt;strong&gt;контейнеризации&lt;/strong&gt; все эти три &lt;strong&gt;проекта&lt;/strong&gt; можно разместить на одном физическом &lt;strong&gt;сервере&lt;/strong&gt;. Получается, что мы урезаем &lt;strong&gt;бюджет&lt;/strong&gt;, да и работу &lt;strong&gt;администратора&lt;/strong&gt; примерно в три раза.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-1.svg&quot; alt=&quot;drawing&quot; width=&quot;70%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Для начала на физический &lt;strong&gt;сервер&lt;/strong&gt; устанавливается &lt;strong&gt;ОС&lt;/strong&gt;, и потом в ней устанавливается программа &lt;strong&gt;контейнеризации&lt;/strong&gt; (&lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://podman.io/&quot;&gt;&lt;strong&gt;Podman&lt;/strong&gt;&lt;/a&gt; и т.д.). Уже эта программа отвечает за работу &lt;strong&gt;контейнеров&lt;/strong&gt;, в которых запущены &lt;strong&gt;проект А&lt;/strong&gt;, &lt;strong&gt;проект Б&lt;/strong&gt;, &lt;strong&gt;проект В&lt;/strong&gt;.&lt;/p&gt;

&lt;h4 id=&quot;изоляция-процессов&quot;&gt;Изоляция процессов&lt;/h4&gt;

&lt;p&gt;Каждое &lt;strong&gt;приложение&lt;/strong&gt; работает в своём &lt;strong&gt;контейнере&lt;/strong&gt;, независимо от других. Все &lt;strong&gt;контейнеры&lt;/strong&gt; изолированы. И работа, например, с &lt;strong&gt;проектом Б&lt;/strong&gt; никак не повлияет на другие &lt;strong&gt;проекты&lt;/strong&gt;.&lt;/p&gt;

&lt;h4 id=&quot;быстрая-развертываемость&quot;&gt;Быстрая развертываемость&lt;/h4&gt;

&lt;p&gt;Выполнить &lt;strong&gt;сборку проекта&lt;/strong&gt; можно гораздо быстрее, чем используя отдельный &lt;strong&gt;сервер&lt;/strong&gt; с установленными &lt;strong&gt;зависимостями&lt;/strong&gt; локально.&lt;/p&gt;

&lt;p&gt;При использовании определённого &lt;strong&gt;сервера&lt;/strong&gt;, если необходимо проверить &lt;strong&gt;приложение&lt;/strong&gt; на новой версии &lt;a href=&quot;https://www.python.org/&quot;&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/a&gt;, что происходит:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Разработчик&lt;/strong&gt; просит &lt;strong&gt;администратора&lt;/strong&gt; обновить &lt;strong&gt;Python&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;В идеале &lt;strong&gt;администратор&lt;/strong&gt; перед выполнением делает &lt;strong&gt;резервную копию сервера&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Администратор&lt;/strong&gt; обновляет &lt;strong&gt;Python&lt;/strong&gt; на &lt;strong&gt;сервере&lt;/strong&gt;, где происходит &lt;strong&gt;сборка проекта&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Уведомляет о проделанной работе &lt;strong&gt;разработчика&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-7.svg&quot; alt=&quot;drawing&quot; width=&quot;70%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;А теперь рассмотрим, как это выглядит при использовании &lt;strong&gt;контейнеризации&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Разработчик&lt;/strong&gt; может сам запустить &lt;strong&gt;сборку приложения&lt;/strong&gt; в &lt;strong&gt;контейнере&lt;/strong&gt; с &lt;strong&gt;образом&lt;/strong&gt; новой версии &lt;a href=&quot;https://www.python.org/&quot;&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/a&gt;. Тут не надо ничего устанавливать — просто меняется версия &lt;strong&gt;образа контейнера&lt;/strong&gt;.
ра.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;портативность-переносимость&quot;&gt;Портативность (переносимость)&lt;/h4&gt;

&lt;p&gt;Если вы сталкивались с &lt;strong&gt;разработкой приложения&lt;/strong&gt;, то в курсе, что частенько всплывают проблемы с &lt;strong&gt;совместимостью&lt;/strong&gt; вашего &lt;strong&gt;приложения&lt;/strong&gt; на другом устройстве. Например, ваше &lt;strong&gt;приложение&lt;/strong&gt; работает на вашем &lt;strong&gt;компьютере&lt;/strong&gt;, но не работает на &lt;strong&gt;компьютере&lt;/strong&gt; вашего &lt;strong&gt;коллеги&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;И чтобы не было таких проблем, при использовании &lt;strong&gt;контейнеризации&lt;/strong&gt; вы создаёте &lt;strong&gt;образ&lt;/strong&gt; &lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; и передаёте его уже вашему &lt;strong&gt;коллеге&lt;/strong&gt;, который запускает &lt;strong&gt;контейнер&lt;/strong&gt;, используя этот &lt;strong&gt;образ&lt;/strong&gt;, и радуется вашему &lt;strong&gt;приложению&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;p3&quot;&gt;Docker image&lt;/h3&gt;

&lt;p&gt;Для того чтобы запустить &lt;strong&gt;контейнер&lt;/strong&gt;, нам нужен &lt;strong&gt;образ контейнера&lt;/strong&gt; (&lt;a href=&quot;https://www.docker.com/resources/what-container&quot;&gt;&lt;strong&gt;Docker image&lt;/strong&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;О том, что такое сам &lt;strong&gt;образ&lt;/strong&gt;, можно говорить долго, но проще представить, что это очень сильно урезанная &lt;strong&gt;ОС&lt;/strong&gt; с нужными &lt;strong&gt;библиотеками&lt;/strong&gt; и самим &lt;strong&gt;кодом&lt;/strong&gt; для работы вашего &lt;strong&gt;приложения&lt;/strong&gt;.&lt;br /&gt;
&lt;strong&gt;Docker-образ&lt;/strong&gt; — это минимальная упакованная система с вашим &lt;strong&gt;кодом&lt;/strong&gt;, которая работает одинаково везде — на &lt;strong&gt;ПК&lt;/strong&gt;, &lt;strong&gt;сервере&lt;/strong&gt; или в &lt;strong&gt;облаке&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Например, у вас есть &lt;strong&gt;приложение&lt;/strong&gt;, которое работает на &lt;a href=&quot;https://www.python.org/&quot;&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/a&gt;. Для работы такого &lt;strong&gt;приложения&lt;/strong&gt; вам понадобится запустить его внутри &lt;strong&gt;контейнера&lt;/strong&gt; с &lt;strong&gt;образом Python&lt;/strong&gt;, который весит около &lt;strong&gt;100 МБ&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;p2&quot;&gt;Docker build&lt;/h3&gt;

&lt;p&gt;Для того чтобы сделать &lt;strong&gt;образ&lt;/strong&gt;, используется команда &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/build/&quot;&gt;&lt;strong&gt;Docker build&lt;/strong&gt;&lt;/a&gt;. Каждый &lt;strong&gt;образ&lt;/strong&gt; состоит из &lt;strong&gt;слоёв&lt;/strong&gt; — простым языком, каждый &lt;strong&gt;слой&lt;/strong&gt; — это выполнение той или иной &lt;strong&gt;команды&lt;/strong&gt; для создания &lt;strong&gt;образа&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для примера рассмотрим следующий &lt;strong&gt;Dockerfile&lt;/strong&gt;, необходимый для создания &lt;strong&gt;Docker image&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;базовый&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;образ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Dockerhub&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script.py&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app/script.py&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;копирование&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;локального&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;файла&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;образ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;смена&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;основной&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;директории&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(рабочей)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;python&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;script.py&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполнение&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;скрипта&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Docker image состоит из слоёв, но не все слои одинаково “видимы” или сохраняются как отдельные файловые изменения. Инструкция &lt;code class=&quot;highlighter-rouge&quot;&gt;CMD&lt;/code&gt; &lt;strong&gt;не создаёт файловых изменений&lt;/strong&gt;, а значит, &lt;strong&gt;не создаёт отдельного слоя с данными&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-10.svg&quot; alt=&quot;drawing&quot; width=&quot;70%&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;docker-image-repository&quot;&gt;Docker image repository&lt;/h3&gt;

&lt;p&gt;Теперь, когда мы знаем, что существуют &lt;strong&gt;образы Docker&lt;/strong&gt;, встаёт вопрос — где их &lt;strong&gt;хранить&lt;/strong&gt;? Хранят их в &lt;strong&gt;репозиториях образов&lt;/strong&gt;, которые могут быть как &lt;strong&gt;приватными&lt;/strong&gt;, так и &lt;strong&gt;публичными&lt;/strong&gt;. Наиболее распространённый публичный &lt;strong&gt;репозиторий&lt;/strong&gt; — это &lt;a href=&quot;https://hub.docker.com/&quot;&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы хранить свои собственные &lt;strong&gt;образы&lt;/strong&gt; внутри компании, не используя &lt;strong&gt;публичные репозитории&lt;/strong&gt;, можно воспользоваться функциями &lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; либо же использовать сторонние приложения, например, &lt;a href=&quot;https://www.sonatype.com/products/sonatype-nexus-repository&quot;&gt;&lt;strong&gt;Sonatype Nexus Repository&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;p4&quot;&gt;docker pull&lt;/h3&gt;

&lt;p&gt;Теперь, когда мы знаем, что каждый &lt;strong&gt;образ&lt;/strong&gt; находится в том или ином &lt;strong&gt;репозитории&lt;/strong&gt;, необходимо его &lt;strong&gt;скачать&lt;/strong&gt;. Делается это при помощи команды &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/pull/&quot;&gt;&lt;strong&gt;docker pull&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker pull&lt;/code&gt; используется для &lt;strong&gt;скачивания Docker-образа&lt;/strong&gt; из &lt;strong&gt;репозитория&lt;/strong&gt; (обычно &lt;a href=&quot;https://hub.docker.com/&quot;&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/a&gt;) на ваше &lt;strong&gt;локальное устройство&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pull&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pull&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При выполнении команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker pull&lt;/code&gt; происходит следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Docker-клиент&lt;/strong&gt; отправляет запрос к &lt;strong&gt;реестру репозитория&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Если &lt;strong&gt;образ&lt;/strong&gt; найден, он &lt;strong&gt;скачивается по слоям&lt;/strong&gt; (каждый &lt;strong&gt;слой образа&lt;/strong&gt; загружается отдельно)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Образ&lt;/strong&gt; сохраняется &lt;strong&gt;локально&lt;/strong&gt; и может использоваться для &lt;strong&gt;старта контейнеров&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-6.svg&quot; alt=&quot;drawing&quot; width=&quot;70%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также вы можете опустить выполнение этой команды, просто выполнив &lt;code class=&quot;highlighter-rouge&quot;&gt;docker run&lt;/code&gt;.&lt;br /&gt;
Дело в том, что если &lt;strong&gt;образ&lt;/strong&gt; ещё не скачан, то &lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; под капотом сам выполнит &lt;code class=&quot;highlighter-rouge&quot;&gt;docker pull&lt;/code&gt; и скачает необходимый &lt;strong&gt;образ&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;p5&quot;&gt;docker push&lt;/h3&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker push&lt;/code&gt; используется для &lt;strong&gt;загрузки вашего локального Docker-образа&lt;/strong&gt; (созданного с помощью &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/build/&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;docker build&lt;/code&gt;&lt;/a&gt;) в &lt;strong&gt;удалённый репозиторий&lt;/strong&gt; (например, &lt;a href=&quot;https://hub.docker.com/&quot;&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://docs.gitlab.com/ee/user/packages/container_registry/&quot;&gt;&lt;strong&gt;GitLab Registry&lt;/strong&gt;&lt;/a&gt; и т.д.).&lt;/p&gt;

&lt;p&gt;Для &lt;strong&gt;загрузки образа&lt;/strong&gt; в &lt;strong&gt;удалённый репозиторий&lt;/strong&gt; иногда требуется &lt;strong&gt;авторизоваться&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-8.svg&quot; alt=&quot;drawing&quot; width=&quot;70%&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myregistry.com&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myregistry.com/project/app:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;p6&quot;&gt;docker run&lt;/h3&gt;

&lt;p&gt;Самая часто используемая команда при работе с Docker. Эта команда &lt;strong&gt;создаёт&lt;/strong&gt; сам контейнер и &lt;strong&gt;запускает&lt;/strong&gt; его.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myhttpd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-p&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;httpd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В команде выше:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-p 8080:80&lt;/code&gt; — &lt;strong&gt;сопоставление локального порта 8080 с портом 80 контейнера&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;httpd&lt;/code&gt; — &lt;strong&gt;имя образа&lt;/strong&gt;, с которого создаётся &lt;strong&gt;контейнер&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-d&lt;/code&gt; — &lt;strong&gt;продолжать работу в фоне&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--name myhttpd&lt;/code&gt; — &lt;strong&gt;задать имя контейнеру&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 15 Oct 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-minimum-you-should-know</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-minimum-you-should-know</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Linux - Either the superblock or the partition table is likely to be corrupt!</title>
        <description>&lt;p&gt;Напишу сразу о том, что ошибка это может быть при разных обстоятельствах. В моём же случае это произошло потому что размер файловой системы был больше чем сам размера раздела жёсткого диска. Произойти так может, например, при уменьшении размера раздела на жёстком диске.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/DuzjUUElNyU?si=F4OHW97aNp0OdkBB&amp;amp;start=950&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;как-узнать-причину&quot;&gt;Как узнать причину?&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Для начала проверяю размер файловой системы с помощью tune2fs (только для ext2/3/4), xfs_info для xfs
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo tune2fs -l /dev/sda1 | grep &lt;span class=&quot;s1&quot;&gt;'Block count\|Block size'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Block&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;count:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2883072&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Block&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4096&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Умножаю 2883072 на 4096 и получаю размер файловой системы (11Гб)&lt;/li&gt;
  &lt;li&gt;Проверяю размер раздела на жёстком диске
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda p
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8999&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяю доступен ли раздел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo e2fsck -f /dev/sda1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filesystem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(according&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;superblock)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2883072&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blocks&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;physical&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2197009&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blocks&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Either&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;superblock&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;likely&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;corrupt!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount /dev/sda1 decrease/
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;mount:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/home/admin/decrease:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wrong&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bad&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;option,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bad&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;superblock&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sda&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;missing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;codepage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;helper&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;program,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;other&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;error.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Т.е. размер файловой системы у меня больше чем размер раздела на жёстком диске.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/3123123123.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;как-решить&quot;&gt;Как решить?&lt;/h3&gt;

&lt;p&gt;Нужно увеличить размер раздела на жёстком диске до текущего размера файловой системы. Каким образом этого достичь тут уже каждый решает сам как может, например:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Удалить другой раздел и освободить место на жёстком диске&lt;/li&gt;
  &lt;li&gt;Увеличить место на виртуальном жёстком диске (мой случай)&lt;/li&gt;
  &lt;li&gt;Может быть есть свободное место на диске&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В общем в любом случае необходимо найти свободное место на жёстком диске.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda p
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Model:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Msft&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Virtual&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(scsi)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sda:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;11.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Гб&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sector&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(logical/physical):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4096&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Table:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8999&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Гб&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Соответственно у меня на диске есть еще 2 Гб свободного места, увеличиваем размер раздела жёсткого диска.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;resizepart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяю доступен ли раздел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo e2fsck -f /dev/sda1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Checking&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inodes,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blocks,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sizes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Checking&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;structure&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Checking&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;connectivity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Checking&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;reference&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;counts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Checking&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;summary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;information&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sda&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;720896&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;non-contiguous),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;71892&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2883072&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blocks&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount /dev/sda1 decrease/
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 13 Oct 2025 04:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-either-the-superblock-or-the-partition-table-is-likely-to-be-corrupt</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-either-the-superblock-or-the-partition-table-is-likely-to-be-corrupt</guid>
        
        <category>linux</category>
        
        <category>storage</category>
        
        <category>mbr</category>
        
        <category>gpt</category>
        
        <category>ext</category>
        
        <category>xfs</category>
        
        
      </item>
    
      <item>
        <title>Docker - Первый веб-сервер в контейнере</title>
        <description>&lt;p&gt;Отлично, теперь, когда мы знаем, что такое &lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt;, самое время создать первый &lt;strong&gt;контейнер&lt;/strong&gt;.&lt;br /&gt;
А внутри этого контейнера будет стоять &lt;a href=&quot;https://nginx.org/&quot;&gt;&lt;strong&gt;Nginx&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;docker-container-run-docker-run&quot;&gt;docker container run (docker run)&lt;/h3&gt;

&lt;p&gt;Собственно, для создания &lt;strong&gt;контейнера&lt;/strong&gt; используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker run&lt;/code&gt;.&lt;br /&gt;
При этом, если &lt;strong&gt;образ&lt;/strong&gt; для контейнера локально еще не загружен, произойдёт сперва его загрузка, а потом уже создание самого контейнера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d --name mynginx -p 80:80 nginx:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге при выполненные команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container run -d --name mynginx -p 80:80 nginx:latest&lt;/code&gt; произошло:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверка скачан ли необходимый образ&lt;/li&gt;
  &lt;li&gt;Скачивание &lt;strong&gt;образа контейнера&lt;/strong&gt; с &lt;a href=&quot;https://hub.docker.com/&quot;&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/a&gt; если образа нет локально&lt;/li&gt;
  &lt;li&gt;Создание нового &lt;strong&gt;контейнера&lt;/strong&gt; из этого образа с именем &lt;strong&gt;mynginx&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выдача виртуального ip-адреса в приватной сети Docker&lt;/li&gt;
  &lt;li&gt;Проброс локального &lt;strong&gt;порта 80&lt;/strong&gt; в контейнер (также &lt;strong&gt;порт 80&lt;/strong&gt;).&lt;br /&gt;
Т.е. весь &lt;strong&gt;трафик&lt;/strong&gt; на &lt;strong&gt;порт 80&lt;/strong&gt; сервера перебрасывается на &lt;strong&gt;порт 80&lt;/strong&gt; контейнера.&lt;/li&gt;
  &lt;li&gt;Запуск контейнера с выполнением команды CMD&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если вы хотите, чтобы ваш &lt;strong&gt;контейнер&lt;/strong&gt; не работал постоянно в &lt;strong&gt;фоновом режиме&lt;/strong&gt;, а только в &lt;strong&gt;интерактивном&lt;/strong&gt; (пока не нажать &lt;strong&gt;CTRL + C&lt;/strong&gt;), то нужно убрать опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;-d&lt;/code&gt; из команды.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-11.svg&quot; alt=&quot;docker container run&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;docker-container-ls-docker-ps&quot;&gt;docker container ls (docker ps)&lt;/h3&gt;

&lt;p&gt;Проверяем, что &lt;strong&gt;контейнер&lt;/strong&gt; запущен с помощью команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt;,&lt;br /&gt;
которая выводит список всех запущенных контейнеров.&lt;br /&gt;
Если вдруг &lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt; не выведет список контейнеров — добавьте опцию &lt;strong&gt;-a&lt;/strong&gt;,&lt;br /&gt;
которая выведет список всех &lt;strong&gt;контейнеров&lt;/strong&gt; (даже не запущенных).&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04287&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fcf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:::&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mynginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь, когда &lt;strong&gt;контейнер&lt;/strong&gt; запущен, можно проверить, что &lt;a href=&quot;https://nginx.org/&quot;&gt;&lt;strong&gt;Nginx&lt;/strong&gt;&lt;/a&gt; работает и отвечает на запросы.&lt;br /&gt;
Для этого локально можно выполнить запрос &lt;code class=&quot;highlighter-rouge&quot;&gt;curl http://127.0.0.1:80&lt;/code&gt;  и в ответ получить:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;Welcome&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx!&amp;lt;/h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же у вас локально стоит &lt;strong&gt;браузер&lt;/strong&gt;, то, перейдя всё по тому же адресу (&lt;a href=&quot;http://127.0.0.1:80&quot;&gt;http://127.0.0.1:80&lt;/a&gt;),&lt;br /&gt;
в браузере должна открыться стандартная страница &lt;a href=&quot;https://nginx.org/&quot;&gt;&lt;strong&gt;Nginx&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Но если необходимо открыть страницу на другом &lt;strong&gt;компьютере&lt;/strong&gt;,&lt;br /&gt;
то для начала нужно открыть &lt;strong&gt;порт 80&lt;/strong&gt; на &lt;strong&gt;файрволе&lt;/strong&gt; и узнать &lt;strong&gt;IP-адрес&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;80/tcp --permanent
sudo firewall-cmd --reload
ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Далее в браузере открываем url http://172.31.144.9:80&lt;/p&gt;

&lt;h3 id=&quot;docker-container-stop-docker-stop&quot;&gt;docker container stop (docker stop)&lt;/h3&gt;

&lt;p&gt;Для остановки работающего &lt;strong&gt;контейнера&lt;/strong&gt; используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stop&lt;/code&gt;.&lt;br /&gt;
В качестве аргумента нужно передать &lt;strong&gt;имя контейнера&lt;/strong&gt; или его &lt;strong&gt;ID&lt;/strong&gt;&lt;br /&gt;
(можно не писать весь &lt;strong&gt;ID&lt;/strong&gt;), получить которые можно, выполнив команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stop mynginx
docker ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04287&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fcf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Exited&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mynginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;docker-container-start-docker-start&quot;&gt;docker container start (docker start)&lt;/h3&gt;

&lt;p&gt;Для запуска остановленного &lt;strong&gt;контейнера&lt;/strong&gt; используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker start&lt;/code&gt;.&lt;br /&gt;
В качестве аргумента нужно передать &lt;strong&gt;имя контейнера&lt;/strong&gt; или его &lt;strong&gt;ID&lt;/strong&gt;  (можно не писать весь &lt;strong&gt;ID&lt;/strong&gt;), получить которые можно, выполнив команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker start mynginx
docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04287&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fcf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mynginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Не путайте команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker start&lt;/code&gt; с &lt;code class=&quot;highlighter-rouge&quot;&gt;docker run&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;случайные-имена-для-контейнеров&quot;&gt;случайные имена для контейнеров&lt;/h3&gt;

&lt;p&gt;Если выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container run&lt;/code&gt; с опцией &lt;strong&gt;–name mynginx&lt;/strong&gt;,&lt;br /&gt;
то имя у созданного &lt;strong&gt;контейнера&lt;/strong&gt; будет &lt;strong&gt;mynginx&lt;/strong&gt;.&lt;br /&gt;
Но это не всегда нужно — точнее, иногда это вообще только мешает.&lt;/p&gt;

&lt;p&gt;Дело в том, что бывают ситуации, когда нужно запустить несколько &lt;strong&gt;экземпляров контейнера&lt;/strong&gt;,&lt;br /&gt;
при этом не переживая за &lt;strong&gt;имена&lt;/strong&gt;.&lt;br /&gt;
Чтобы это выполнить, запускаем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container run&lt;/code&gt; без &lt;strong&gt;–name&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d nginx:latest
docker container run -d nginx:latest
docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;68&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;72&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;interesting_mclaren&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09807&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fervent_lewin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;docker-container-rm-docker-rm&quot;&gt;docker container rm (docker rm)&lt;/h3&gt;

&lt;p&gt;Теперь настал момент, когда необходимо удалить все созданные &lt;strong&gt;контейнеры&lt;/strong&gt; во время написания этой статьи.&lt;br /&gt;
Для удаления &lt;strong&gt;контейнера&lt;/strong&gt; используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker rm&lt;/code&gt;,  в качестве параметра передаём &lt;strong&gt;имя контейнера&lt;/strong&gt; (может быть несколько).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker ps -a
docker rm mynginx 1acc f510
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;510&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;daemon:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/mynginx&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;running:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;before&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;removing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;force&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Контейнер с названием &lt;code class=&quot;highlighter-rouge&quot;&gt;mynginx&lt;/code&gt; не удалился потому что он запущен. Для того чтобы удалить даже запущенные контейнеры добавляем &lt;code class=&quot;highlighter-rouge&quot;&gt;-f&lt;/code&gt;. Но я рекомендую так не делать, а вместо этого сперва остановить контейнер и потом его удалять, чтобы не удалить что-то важное.&lt;/p&gt;

</description>
        <pubDate>Tue, 16 Sep 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-first-nginx-inside-container</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-first-nginx-inside-container</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Что там внутри контейнера?</title>
        <description>&lt;p&gt;Отлично, вот вы запустили &lt;strong&gt;контейнер&lt;/strong&gt; и дошли до того, что необходимо проверить, что там вообще происходит внутри этого самого контейнера.&lt;/p&gt;

&lt;p&gt;Для начала я запущу пару &lt;strong&gt;контейнеров&lt;/strong&gt;, чтобы было над чем &lt;strong&gt;экспериментировать&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --detach --name some-mariadb -e &lt;span class=&quot;nv&quot;&gt;MARIADB_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my-secret-pw mariadb:latest

docker run --detach --name some-nginx nginx:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Первая команда запускает &lt;strong&gt;контейнер&lt;/strong&gt; с базой &lt;strong&gt;&lt;a href=&quot;https://mariadb.org/&quot;&gt;MariaDB&lt;/a&gt;&lt;/strong&gt; и назначает &lt;strong&gt;пароль&lt;/strong&gt; пользователю &lt;strong&gt;root&lt;/strong&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;my-secret-pw&lt;/code&gt;).&lt;br /&gt;
Для того, чтобы узнать, какие &lt;strong&gt;переменные окружения&lt;/strong&gt; для чего используются, можно перейти на страницу &lt;strong&gt;образа&lt;/strong&gt; в &lt;strong&gt;&lt;a href=&quot;https://hub.docker.com/&quot;&gt;Docker Hub&lt;/a&gt;&lt;/strong&gt; и почитать о нём немного, &lt;a href=&quot;https://hub.docker.com/_/mariadb&quot;&gt;например&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bdc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2440&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/docker-entrypoint.…&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;abaa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadb:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;docker-entrypoint.s…&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3306&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-mariadb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;docker-container-top-docker-top&quot;&gt;docker container top (docker top)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-container-top.svg&quot;&gt;docker-container-top.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Выполняя &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container top&lt;/code&gt; можно проверить запущенные процессы внутри контейнера, по аналогии с top в самой ОС.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container top some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PPID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950294&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950274&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;master&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-g&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;daemon&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;off;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;101&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950338&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950294&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;worker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Логично, что в &lt;strong&gt;контейнере&lt;/strong&gt; с &lt;strong&gt;&lt;a href=&quot;https://nginx.org/&quot;&gt;Nginx&lt;/a&gt;&lt;/strong&gt; запущены &lt;strong&gt;процессы&lt;/strong&gt; с именем &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;.  Теперь выполним то же самое для &lt;strong&gt;контейнера&lt;/strong&gt; с &lt;strong&gt;&lt;a href=&quot;https://mariadb.org/&quot;&gt;MariaDB&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container top some-mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PPID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;systemd+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950081&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950063&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadbd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;UID&lt;/strong&gt; — пользователь, от имени которого запущен процесс внутри контейнера;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PID&lt;/strong&gt; — PID процесса в &lt;em&gt;хостовой системе&lt;/em&gt; (тот, что виден в &lt;code class=&quot;highlighter-rouge&quot;&gt;ps aux&lt;/code&gt; на хосте);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PPID&lt;/strong&gt; — родительский процесс (обычно &lt;code class=&quot;highlighter-rouge&quot;&gt;containerd-shim&lt;/code&gt;);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CMD&lt;/strong&gt; — команда, запущенная внутри контейнера.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Тут довольно интересная графа &lt;strong&gt;PID&lt;/strong&gt;.  Дело в том, что в &lt;strong&gt;локальной системе&lt;/strong&gt;, на которой установлен &lt;strong&gt;&lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;&lt;/strong&gt;, также создаётся &lt;strong&gt;процесс&lt;/strong&gt;, как и в &lt;strong&gt;контейнере&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ps -aux | grep mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;systemd+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950081&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;7.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1093428&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;118860&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ssl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadbd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также можно отфильтровать поля, которые хочется видеть в выводе.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container top some-mariadb -eo pid,ppid,cmd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PPID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950081&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1950063&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadbd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;docker-container-inspect-docker-inspect&quot;&gt;docker container inspect (docker inspect)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-container-inspect.svg&quot;&gt;docker-container-inspect.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;После того как &lt;strong&gt;контейнер&lt;/strong&gt; создан, иногда бывает необходимо узнать о нём побольше — про его &lt;strong&gt;конфигурацию&lt;/strong&gt;.  Для этого используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container inspect&lt;/code&gt;.  Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container inspect&lt;/code&gt; — одна из самых полезных для &lt;strong&gt;диагностики&lt;/strong&gt; и &lt;strong&gt;анализа контейнеров&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container inspect some-mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но вывод этой команды будет большим и поэтому показывать этот вывод тут не имеет никакого смысла. Она выводит &lt;strong&gt;всю внутреннюю информацию&lt;/strong&gt; о контейнере в формате &lt;strong&gt;JSON&lt;/strong&gt;. Стало быть можно использовать jq для парсинга вывода, но проще сразу использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;--format&lt;/code&gt; в самой команде.&lt;/p&gt;

&lt;p&gt;Ниже оставлю наиболее популярные шаблоны &lt;code class=&quot;highlighter-rouge&quot;&gt;docker inspect -f&lt;/code&gt;которые чаще всего используют DevOps-инженеры.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Показать IP контейнера&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .NetworkSettings.IPAddress }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;Показать путь к логам
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .LogPath }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Показать порты, проброшенные на хост
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ range .Mounts }}{{ .Source }} -&amp;gt; {{ .Destination }}{{ println }}{{ end }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Имя образа, из которого запущен контейнер
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .Config.Image }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Команда, с которой контейнер был запущен
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .Path }} {{ .Args }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Время запуска контейнера
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .State.StartedAt }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Текущий статус контейнера
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .State.Status }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Показать смонтированные каталоги
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ range .Mounts }}{{ .Source }} -&amp;gt; {{ .Destination }}{{ println }}{{ end }}'&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;docker-container-stats&quot;&gt;docker container stats&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-container-stats.svg&quot;&gt;docker-container-stats.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Теперь перейдём к мониторингу, к вещи о которой все обычно вспоминают когда что-то выполняется настолько долго что уже всем это надоело. Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container stats&lt;/code&gt; — это &lt;strong&gt;мониторинг в реальном времени&lt;/strong&gt;. Она показывает &lt;strong&gt;ресурсы, которые потребляют контейнеры&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stats some-mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CPU&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MEM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MEM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;I/O&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;BLOCK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;I/O&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PIDS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;abaa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-mariadb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;91.44&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.499&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.55&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.37&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;53&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CONTAINER ID / NAME&lt;/strong&gt; - Идентификатор или имя контейнера&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CPU %&lt;/strong&gt; - Средняя загрузка CPU контейнера относительно всех яде&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MEM USAGE / LIMIT&lt;/strong&gt; - Используемая и лимитированная память&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MEM %&lt;/strong&gt; - Процент от лимита&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;NET I/O&lt;/strong&gt; - Сетевой ввод/вывод (RX / TX)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;BLOCK I/O&lt;/strong&gt; - Дисковый ввод/вывод (чтение/запись на блочном уровне)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PIDS&lt;/strong&gt; - Количество процессов внутри контейнера&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Можно также выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stats&lt;/code&gt; без указания контейнера чтобы получить статистику всех запущенных контейнеров.&lt;/p&gt;

&lt;p&gt;Ниже оставлю наиболее популярные шаблоны &lt;code class=&quot;highlighter-rouge&quot;&gt;docker inspect -f&lt;/code&gt; которые чаще всего используются.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;однократный вывод
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stats --no-stream some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;красивое форматирование
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stats --format &lt;span class=&quot;s2&quot;&gt;&quot;table {{.Name}}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{{.CPUPerc}}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{{.MemUsage}}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{{.NetIO}}&quot;&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;только CPU и память всех контейнеров
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stats --format &lt;span class=&quot;s2&quot;&gt;&quot;{{.Name}}: CPU {{.CPUPerc}} | MEM {{.MemUsage}}&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;вывод в формате json
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stats --no-stream --format &lt;span class=&quot;s2&quot;&gt;&quot;{{json .}}&quot;&lt;/span&gt; some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;docker-container-logs&quot;&gt;docker container logs&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-container-logs.svg&quot;&gt;docker-container-logs.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ну и еще одна полезная команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container logs&lt;/code&gt;, которая покажет логи контейнера. Очень часто бывает так что контейнер не стартует после запуска, например если в качестве параметра не передать необходимые переменные.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container logs some-mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2025-10-21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Note&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;created&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IP:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;',&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3306&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025-10-21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Note&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;created&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IP:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'::',&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3306&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025-10-21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Note&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadbd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Scheduler:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Loaded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025-10-21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Note&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadbd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;connections.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Cледить за логами в реальном времени
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container logs -f some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Логи за последние 10 минут
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container logs --since 10m some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Последние 100 строк
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container logs --tail 100 some-mariadb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 16 Sep 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-whats-inside</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-whats-inside</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Linux - Secondary partition table overlaps the last partition by 33 blocks</title>
        <description>&lt;p&gt;В этой &lt;a href=&quot;https://www.tipoit.kz/linux-convert-mbr-to-gpt&quot;&gt;статье&lt;/a&gt; я описывал как изменить MBR на GPT. Но если у вас весь диск занят существующим разделом, то вы получите предупреждение:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Warning!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Secondary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlaps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blocks!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;You&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;will&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;need&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;resize&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;another&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;utility.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/DuzjUUElNyU?si=M_0celUUoXJxbmKS&amp;amp;start=185&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Если вкратце, то для создания &lt;strong&gt;GPT&lt;/strong&gt; в конце диcка необходимо около &lt;code class=&quot;highlighter-rouge&quot;&gt;1 MiB&lt;/code&gt; свободного дискового пространства, именно неразмеченного. Почему так можете почитать &lt;a href=&quot;https://www.tipoit.kz/linux-mbr-vs-gpt&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Если у вас виртуализация и можно изменить размер диска, то как правило особых проблем с этим нет. Просто увеличиваем диск в виртуализации, об этом я уже писал.  Но вот если увеличить размер диска не получится, то обойти предупреждение можно изменением размера раздела на диске, конечно же в меньшую сторону.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;размер-раздела-и-данные&quot;&gt;Размер раздела и данные&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Конечно же я рекомендую вам скопировать всё данные с диска или сделать резервную копию. Всегда что-то может пойти не так, будьте к этому готовы.&lt;/li&gt;
  &lt;li&gt;Не выставляйте размер раздела меньше чем весят данные на разделе. Т.е. если на &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sda1&lt;/code&gt; у вас лежит 10 Гб данных не уменьшайте размер раздела меньше чем на 11 Гб.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;тип-файловой-системы-xfs&quot;&gt;Тип файловой системы XFS&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;К сожалению, если у вас тип файловой системы на разделе &lt;strong&gt;XFS&lt;/strong&gt;, то уменьшить размер такого раздела у вас не получиться. Проще будет подключить новый диск, создав его как &lt;strong&gt;GPT&lt;/strong&gt; и скопировать туда данные.&lt;/p&gt;

&lt;p&gt;Для проверки типа файловой системы можно выполнить:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda p
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8999&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filesystem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;тип-файловой-системы-ext&quot;&gt;Тип файловой системы EXT&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если же тип файловой системы &lt;strong&gt;EXT4&lt;/strong&gt; или &lt;strong&gt;EXT3&lt;/strong&gt;, то тут уже можно поработать.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверяем что у нас действительно &lt;strong&gt;MBR (msdos)&lt;/strong&gt; и тип файловой системы &lt;strong&gt;EXT4&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda p
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sda:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Table:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msdos&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Дальше необходимо размонтировать устройство (обязательно)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo umount /dev/sda1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем целостность структуры файлов &lt;strong&gt;ext4&lt;/strong&gt;. Не должно быть никаких ошибок
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo e2fsck -f /dev/sda1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Уменьшаем файловую систему &lt;strong&gt;ext4&lt;/strong&gt;. Обратите внимание что я уменьшаю на целых 2 Гб. Дело в том, что сам размер раздела я собираюсь уменьшить на 1Гб, хотя можно и меньше. А вот размер файловой системы лучше указать меньше чем размер раздела. Размеры в &lt;code class=&quot;highlighter-rouge&quot;&gt;resize2fs&lt;/code&gt; (файловая система) и &lt;code class=&quot;highlighter-rouge&quot;&gt;resizepart&lt;/code&gt; (сам раздел) &lt;strong&gt;измеряются по-разному&lt;/strong&gt; и округляются в разных единицах. Поэтому, если указать одно и то же число (например, &lt;code class=&quot;highlighter-rouge&quot;&gt;9G&lt;/code&gt; в обоих случаях), на самом деле:
    &lt;ul&gt;
      &lt;li&gt;файловая система получится &lt;strong&gt;чуть больше&lt;/strong&gt; (так как &lt;code class=&quot;highlighter-rouge&quot;&gt;resize2fs&lt;/code&gt; считает в &lt;strong&gt;GiB&lt;/strong&gt; — 1024³ байта),&lt;/li&gt;
      &lt;li&gt;а раздел — &lt;strong&gt;чуть меньше&lt;/strong&gt; (потому что &lt;code class=&quot;highlighter-rouge&quot;&gt;parted&lt;/code&gt; считает в &lt;strong&gt;GB&lt;/strong&gt; — 1000³ байт).
        &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo resize2fs /dev/sda1 8G
&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Уменьшаем раздел до 9 GB
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda
print
resizepart 1 9G
quit
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Конвертируем &lt;strong&gt;MBR → GPT&lt;/strong&gt;, подробнее &lt;a href=&quot;https://www.tipoit.kz/linux-convert-mbr-to-gpt&quot;&gt;тут&lt;/a&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo gdisk /dev/sda
w
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем таблицу и ФС
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sda print
sudo e2fsck -f /dev/sda1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Монтируем и проверяем доступ
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount -a
sudo mount /dev/sda1 decrease/
ls decrease/
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 11 Sep 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/secondary-partition-table-overlaps-the-last-partition</link>
        <guid isPermaLink="true">http://www.tipoit.kz/secondary-partition-table-overlaps-the-last-partition</guid>
        
        <category>linux</category>
        
        
      </item>
    
      <item>
        <title>Как удалить logrotate и оставить сервер без логов</title>
        <description>&lt;p&gt;Сразу скажу, что эту операцию проделал не я (переустановка logrotate), я, лишь зайдя на сервер обнаружил что в &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/messages&lt;/code&gt; ничего не пишется уже какое-то время, ну и в другие лог файлы тоже.&lt;/p&gt;

&lt;p&gt;После небольшого гуглинга узнаю, что это может быть из-за выключенного &lt;strong&gt;rsyslog&lt;/strong&gt;. Проверяю статус сервиса и обнаруживаю что его нет. Теперь осталось понять почему его нет.&lt;/p&gt;

&lt;p&gt;Иду в &lt;code class=&quot;highlighter-rouge&quot;&gt;SIEM&lt;/code&gt; дабы проверить кто и что удалял вообще на этом сервере и обнаруживаю что в этот день когда были последние логи человек удалил &lt;strong&gt;logrotate&lt;/strong&gt;. Можно было конечно оставить этот момент, ведь он удалил &lt;strong&gt;logrotate&lt;/strong&gt;, но не &lt;strong&gt;rsyslog&lt;/strong&gt;. Да ещё при этом потом его установил заново.&lt;/p&gt;

&lt;p&gt;Но я решая проверить через &lt;code class=&quot;highlighter-rouge&quot;&gt;yum history&lt;/code&gt; что же всё-таки там удалилось. И вот я выполняю команду &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo yum history info 11&lt;/code&gt; где в выводе получаю:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Packages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Altered:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Erase&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logrotate&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;-3.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6-19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Erase&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rsyslog&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;-8.24&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-57&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;9.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Т.е. помимо &lt;strong&gt;logrotate&lt;/strong&gt; удалился и &lt;strong&gt;rsyslog&lt;/strong&gt;. Хорошо проверяю как был установлен &lt;strong&gt;logrotate&lt;/strong&gt;, для этого выполняю &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo yum history info 12&lt;/code&gt; где в выводе получаю:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Packages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Altered:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logrotate&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;-3.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6-19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге получается при удалении &lt;strong&gt;logrotate&lt;/strong&gt; удалился также и &lt;strong&gt;rsyslog&lt;/strong&gt;, но вот при установке &lt;strong&gt;logrotate&lt;/strong&gt; сам &lt;strong&gt;rsyslog&lt;/strong&gt; уже не устанавливался.&lt;/p&gt;
</description>
        <pubDate>Thu, 11 Sep 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/how-to-reinstall-logrotate-and-lost-logs</link>
        <guid isPermaLink="true">http://www.tipoit.kz/how-to-reinstall-logrotate-and-lost-logs</guid>
        
        <category>security</category>
        
        <category>logrotate</category>
        
        <category>linux</category>
        
        
      </item>
    
      <item>
        <title>Как мне пришлось искать логи сервера в стоге сена.</title>
        <description>&lt;p&gt;История собственно о том, как пришлось находить файлы логов приложения, которые были очень важными для нас.&lt;/p&gt;

&lt;p&gt;Сразу обозначим действующих лиц, так как описывать буду в стиле расследования:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Владимир - собственно я&lt;/li&gt;
  &lt;li&gt;Илья - разработчик, который написал приложение&lt;/li&gt;
  &lt;li&gt;Олег - администратор&lt;/li&gt;
  &lt;li&gt;Емельян - ещё один администратор&lt;/li&gt;
  &lt;li&gt;Эльдар - ещё один администратор&lt;/li&gt;
  &lt;li&gt;Пользователь – вскоре вы узнаете почему безымянный&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Так вот с чего началась вообще вся эта заварушка, некий Пользователь зашёл на наш веб-портал, где воспользовался некой услугой. Во время прохождения всех проверок выполнился запрос к сторонней организации (интеграция с гос бд) для проверки статуса человека. Через какое-то время этот Пользователь об этом узнал и накатал на нас заявление, мол как они могли и так далее. Да, пользовательское соглашение Пользователь конечно же подписал, но какое это имеет значение.&lt;/p&gt;

&lt;p&gt;Так вот государственные органы решили нас проверить, т.е. отработать заявление. Как только мы поняли в чем Пользователь нас обвиняет стало понятно, что мы и не запрашивали эту информацию, о которой Пользователь так беспокоился. Илья (разработчик) сказал, что с лёгкостью это докажет, так как полный ответ запроса сохраняется в виде log  файла на сервере. Осталось дело за малым, и он пришёл к Эльдару дабы тот нашёл этот файл и показал Илье, ну и проверяющей стороне.&lt;/p&gt;

&lt;p&gt;Вот тут всё и начинается. Эльдар, зайдя на сервер обнаруживает что файла то этого нет, нас интересует файл от 24.01.2025. На сервере же нет log  файлов (логов) в промежутке с 14.12.2024 до 15.03.2025, с учётом того что есть все файлы с 01.03.2023 по 14.12.2024 и после 15.03.2025, правда какая-то часть на другом сервере.&lt;/p&gt;

&lt;p&gt;Дело в том, что файлы эти весят очень много и время от времени мы переносим их на другой сервер. Так вот именно Эльдар не-так давно перенёс все файлы за 2023 и что-то за 2024 на другой сервер. Он обращается за помощью к Емельяну, который считает, что может быть просто этот файл в последнем архиве за 14.12.2024 или в архиве за 15.03.2025. И они его не находят ни там, ни там.&lt;/p&gt;

&lt;h3 id=&quot;теория-1️⃣&quot;&gt;Теория №1️⃣&lt;/h3&gt;

&lt;p&gt;Тут уже подключаюсь я (Владимир). Эльдар предполагает, что кто-то при переносе этих файлов на другой сервер мог их удалить и каким-то образом их не скопировать. Дело в том, что не только он один этим занимается. Дабы проверить эту теорию я захожу на SIEM  систему и штудирую логи на предмет удаления файлов (все команды на сервере записываются). Как и ожидалось никто ничего не удалял, в этом я и не сомневался.&lt;/p&gt;

&lt;h3 id=&quot;теория-2️⃣&quot;&gt;Теория №2️⃣&lt;/h3&gt;

&lt;p&gt;Появилась идея проверить каким образом эти файлы создаются и архивируются, дело в том, что каждый день создаётся архив с файлами. Мало ли как-то криво сработал cron или ещё что-то. Для этого мне нужно проверить логи системы в период с 14.12.2024 по 15.03.2025. Я захожу на сервер и пытаюсь прочитать содержимое /var/log/messages  и тут я в ужасе понимаю, что последняя запись от 21.09.2024. Я тогда конечно подумал, что это конец, у меня нет ничего чтобы понять, что произошло. Собрался с мыслями и решил понять почему нет логов в /var/log/messages. В итоге по тем же логам SIEM я увидел, что 21.09.2024 Емельян удалял пакет logrotate, точнее переустанавливал его. Не буду расписывать чем именно это закончилось, просто скажу, что причину я нашел и починил. Если интересно можно прочитать &lt;a href=&quot;https://tipoit.kz/how-to-reinstall-logrotate-and-lost-logs&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;теория-3️⃣&quot;&gt;Теория №3️⃣&lt;/h3&gt;

&lt;p&gt;Пока я разбирался с /var/log/messages я понял, что архивированием log  файлов занимается само приложение. Появилась мысль что может кто-то из разработчиков случайно выложил что-то коряво и отключил логирование запросов интеграций. Илья пошёл проверять и вернулся с новостью что никто ничего не менял.&lt;/p&gt;

&lt;p&gt;Тут я уже готов был сдаться, ведь самих файлов на сервере нет, логов всей системы на сервере нет с 21.09.2024 года. Чем мне собственно оперировать?&lt;/p&gt;

&lt;h3 id=&quot;теория-4️⃣&quot;&gt;Теория №4️⃣&lt;/h3&gt;

&lt;p&gt;Точнее сказать это и не теория в общем а просто я решил проверить делали ли что-то с этим сервером на виртуализации (это виртуальный сервер). Я захожу на SIEM и вижу, что Олег выключает виртуальную машину (сервер где приложение) 14.12.2024 после создаёт вторую. Для лучшего понимания назовём SRV1 (сервер, который есть у меня сейчас) и SRV1_NEW (сервер, который создал и включил Олег с тем же ip). Соответственно к Олегу возникает вопрос: Зачем ты это сделал? На что Олег отвечает: это был 2024 год, я уже не помню. И вот тут уже сама Теория №4: файлы с 14.12.2024 по 15.03.2025 на сервере SRV1_NEW, осталось только его включить и получить доступ к файлам.&lt;/p&gt;

&lt;p&gt;Но вот вопрос ведь сейчас запущен SRV1, почему? Захожу я на систему виртуализации и ищу SRV1_NEW и что вы думаете? Я его не нахожу (&lt;/p&gt;

&lt;h3 id=&quot;теория-5️⃣&quot;&gt;Теория №5️⃣&lt;/h3&gt;

&lt;p&gt;Сервер SRV1_NEW кто-то дропнул и не видать теперь нам этих файлов. Но надо же удостоверится что его удалили. Снова иду в SIEM проверять логи и вижу только, что SRV1 был включен 15.03.2025 и никаких записей больше про SRV1_NEW, кроме последней где его включили 14.12.2024 (было пару reconfigre позже). Начинаем думать почему включили SRV1 15.03.2025 года и находим запись о том, что в этот день помер сервер виртуализации (померла планка ОЗУ).&lt;/p&gt;

&lt;h3 id=&quot;теория-6️⃣&quot;&gt;Теория №6️⃣&lt;/h3&gt;

&lt;p&gt;Теперь, когда мы знаем, что помер сервер виртуализации и нет записи о том, что SRV1_NEW кто-то удалил логично предположить, что мы в тот день 15.03.2025 вручную регистрировали виртуальные машины с СХД на другом сервере виртуализации и так как про SRV1_NEW знали не все просто зарегистрировали только SRV1, ведь по сути это полностью рабочий сервер, зачем создали второй так и осталось тайной. Я полез на СХД искать SRV1_NEW и спустя какое-то время нашёл его. После чего я его зарегистрировал в виртуализации и включил, где и нашёл файлы с 14.12.2024 по 15.03.2025. В итоге наши жопы спасены и можно успокоить Пользователя что данные его наша система не получила, по крайней мере о которых он так переживал.&lt;/p&gt;

&lt;p&gt;Выводы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Старайтесь использовать SIEM, т.е. логируйте всё что можно. Логи очень пригодятся для доказательства вашей же невиновности&lt;/li&gt;
  &lt;li&gt;Конечно же нужно делать резервные копии и хранить как можно больше точек восстановления (но наш сервер весит около 5 ТБ).&lt;/li&gt;
  &lt;li&gt;Когда удаляешь какой-то пакет проверь что он унесёт вместе с собой&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 11 Sep 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/how-i-searched-for-logs</link>
        <guid isPermaLink="true">http://www.tipoit.kz/how-i-searched-for-logs</guid>
        
        <category>security</category>
        
        <category>linux</category>
        
        <category>read</category>
        
        <category>story</category>
        
        
      </item>
    
      <item>
        <title>Docker Swarm - Virtual IP сервиса</title>
        <description>&lt;p&gt;При создании сервиса в Docker Swarm ему по умолчанию присваивается виртуальный ip-адрес. И при этом не важно сколько контейнеров (task) внутри сервиса, у каждого контейнера также свой ip-адрес.&lt;/p&gt;

&lt;p&gt;Встаёт вопрос если у контейнера в сервисе итак есть ip-адрес зачем тогда еще присваивать ip-адрес самому сервису. Ответ очень банален, так как в сервисе может быть куча контейнеров, да и при пересоздании этих контейнеров их ip-адреса могут меняться логичнее будет обращаться к ip-адресу самого сервиса.&lt;/p&gt;

&lt;p&gt;Дело в том, что сервис в Docker Swarm сам занимается балансировкой нагрузки. Т.е. запрос, отправленный на ip-адрес или dns имя сервиса автоматически отправляется на один из контейнеров (task) сервиса. При этом каждый следующий запрос уже уходит на другой контейнер. Получается, что &lt;strong&gt;при использовании сервиса балансировка более точная чем у dns round robin&lt;/strong&gt;, который я рассматривал тут. При использовании &lt;strong&gt;dns round robin запросы зачастую могут обрабатываться одним и тем же контейнером несколько раз подряд&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для примера я создам сеть &lt;code class=&quot;highlighter-rouge&quot;&gt;backend_net&lt;/code&gt; и запущу в нём сервис web с тремя репликами. Контейнеры из образа &lt;code class=&quot;highlighter-rouge&quot;&gt;nginxdemos/hello&lt;/code&gt; при обращении на порт 80 выводят имя контейнера и его ip-адрес, как раз то что необходимо.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network create -d overlay backend_net
docker service create --name web --network backend_net nginxdemos/hello
docker service scale &lt;span class=&quot;nv&quot;&gt;replicas&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3 web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь когда у меня есть сервис я проверю его виртуальный ip-адрес, хотя в целом это можно и не делать ведь всё равно правильнее будет обращаться к сервису по его имени, а не ip-адресу. Но я выполню этот запрос для того, чтобы показать как получить ip-адрес сервиса.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service inspect web --format &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;NetworkID&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;vvapjnzz507fpgu0l463purkc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Addr&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;10.0.1.2/24&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-service-vip.svg&quot;&gt;swarm-service-vip.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;проверка-балансировки&quot;&gt;Проверка балансировки&lt;/h3&gt;

&lt;p&gt;Для того чтобы продемонстрировать работоспособность балансировки сервисом я буду использовать контейнер с образа &lt;code class=&quot;highlighter-rouge&quot;&gt;curlimages/curl&lt;/code&gt;. Обращаю внимание что этот контейнер должен быть в той же сети что и сам сервис web, иначе доступа у создаваемого контейнера к сервису не будет.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --rm --network backend_net curlimages/curl sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но тут я получу ошибку: &lt;code class=&quot;highlighter-rouge&quot;&gt;docker: Error response from daemon: failed to set up container networking: Could not attach to network backend_net: rpc error: code = PermissionDenied desc = network backend_net not manually attachable&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Дело в том что по умолчанию сеть создаваемая для swarm (-d overlay) по умолчанию защищена от добавления в неё контейнеров создаваемых пользователем в ручную. Если вдруг необходимо всё же создать сеть, в которую можно добавить и сервис и свои контейнеры используется опция &lt;code class=&quot;highlighter-rouge&quot;&gt;--attachable&lt;/code&gt;, например &lt;code class=&quot;highlighter-rouge&quot;&gt;docker network create -d overlay backend_net --attachable&lt;/code&gt;. Но я так делать не рекомендую, поэтому просто создам еще один сервис в сети &lt;code class=&quot;highlighter-rouge&quot;&gt;backend_net&lt;/code&gt;. Но я меняю образ &lt;code class=&quot;highlighter-rouge&quot;&gt;curlimages/curl&lt;/code&gt; на &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; так как в сервисе одноразовые контейнеры нельзя запустить.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create --name curl --network backend_net nginx
docker serivce ps curl
docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it curl.1.z00ox4hiojz7cd18nuc5bi0dn bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь находясь внутри контейнера я несколько раз запущу команду &lt;code class=&quot;highlighter-rouge&quot;&gt;curl -s http://web | grep Server&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;ed&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;97410&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2761&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;443&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1939&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cbd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ed&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода видно что каждый контейнер обработал по одному запросу, что доказывает работу балансировки сервисом.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/sswarm-vip-testing.svg&quot;&gt;swarm-vip-testing.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Важное замечание в отличии от простых контейнеров при использовании сервисов вы не сможете обращаться с физических узлов кластера напрямую к виртуальному ip-адресу сервиса или же самого контейнера (задачи) сервиса. Происходит это потому что для сервисов используется драйвер overlay, а для простых контейнеров bridge. Подробнее &lt;a href=&quot;https://www.tipoit.kz/docker-swarm-overlay-networks&quot;&gt;тут&lt;/a&gt; и &lt;a href=&quot;https://www.tipoit.kz/docker-networks&quot;&gt;тут&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 23 Aug 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-service</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-service</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker Swarm - Обновление сервисов</title>
        <description>&lt;p&gt;&lt;strong&gt;Не забывайте, что обновление без даун-тайма доступно только если вы сперва проверили все изменения на тестовой среде.&lt;/strong&gt; И только после того как убедились, что там всё работает можно обновлять приложение. Ну и конечно тестовая среда должна максимально соответствовать боевой среде, кроме данных в базе данных.&lt;/p&gt;

&lt;p&gt;Конечно же если обновляемый сервис представляет из себя простое веб-приложение или обычный статическую веб-страницу, то как правило проблем с обновлением такого сервиса не будет. Но вот обновление таких сервисов как база данных или любое хранилище, где есть важные данные требует особого внимания. &lt;strong&gt;Некоторые продукты имеют свои ограничения на обновление, например, с какой версии на какую можно обновиться.&lt;/strong&gt; Всегда проверяйте такие ограничения заранее, тот факт, что вы используете контейнеризацию, не освобождает вас от таких ограничений. И ещё раз повторюсь перед тем как делать обновление в боевой среде попробуйте сделать это на тестовой среде. Может так произойти что новый контейнер запустится, но работать будет неправильно, и что еще хуже повредит важные данные. Поэтому важно использовать правильный healthcheck.&lt;/p&gt;

&lt;p&gt;Отдельной команды для обновления стека в Docker Swarm нету, тут также используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack deploy&lt;/code&gt;, при выполнении которой демон Docker проверяет были ли изменения в файле конфигурации по сравнению с текущим состоянием сервиса. И если такие есть он их применяет.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-update-best-practices.svg&quot;&gt;swarm-update-best-practices.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;обновление-стека&quot;&gt;Обновление стека&lt;/h3&gt;

&lt;p&gt;Как я уже говорил при обновлении стека всё начинается с изменения файла конфигурации этого стека. После изменения конфигурации выполняется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack deploy -c conf.yml mystack&lt;/code&gt;. Docker используя разные API проверяет необходимо ли что-то обновить в стеке для актуализации стека.&lt;/p&gt;

&lt;p&gt;Допустим стек называется &lt;code class=&quot;highlighter-rouge&quot;&gt;full-app&lt;/code&gt;, файл &lt;a href=&quot;https://github.com/tipoitkz/docker-course/blob/main/swarm/stack/full-app.yml&quot;&gt;full-app.yml&lt;/a&gt; я поправил (новый image, env, ports, secrets и т.д.). Команда обновления стека будет выглядеть так: &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack deploy -c full-app.yml full-app&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack deploy -c full-app.yml full-app
docker service logs -f full-app_api
vim full-app.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;s&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;8080:8000&quot;&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;deploy&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;replicas&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack deploy --detach&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt; -c full-app.yml full-app
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Updating&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;full-app_api&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jkpbmz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;088&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nsgyvt&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fdhyueqhj)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==================================================&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==================================================&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;======================================&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Updating&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;full-app_db&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;veg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bbimuapyqpj&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;99&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://172.31.144.9:8080/items
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Fri, 19 Dec 2025 06:19:48 GMT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;adasdasd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Fri, 19 Dec 2025 06:19:50 GMT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fadsfasf&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-stack-update-process.svg&quot;&gt;swarm-stack-update-process.svg&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;пример-обновить-secret-правильно-secrets-immutable&quot;&gt;Пример: обновить secret “правильно” (secrets immutable)&lt;/h4&gt;

&lt;p&gt;Для этого примера я буду использовать этот файл конфигурации, где по сути тоже самое что и выше, но только с использованием переменных (&lt;code class=&quot;highlighter-rouge&quot;&gt;psql_user&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;psql_pwd&lt;/code&gt;). Моя задача тут поменять пароль, т.е. я создаю новый секрет &lt;code class=&quot;highlighter-rouge&quot;&gt;psql_pwd_v2&lt;/code&gt; и заменяю в файле старый &lt;code class=&quot;highlighter-rouge&quot;&gt;psql_pwd&lt;/code&gt;. После чего делаю снова &lt;code class=&quot;highlighter-rouge&quot;&gt;deploy&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;printf&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;NEWPASS&quot;&lt;/span&gt; | docker secret create psql_pwd_v2 -
docker secret ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;lbcx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yqjiuwcioorjbwjjdlyf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_pwd_v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack deploy --detach&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt; -c full-app.yml full-app-2
vim full-app.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
       &lt;span class=&quot;s&quot;&gt;DB_PASSWORD_FILE&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/run/secrets/psql_pwd_v2&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;secrets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;psql_pwd_v2&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;POSTGRES_PASSWORD_FILE&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/run/secrets/psql_pwd_v2&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;secrets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;psql_pwd_v2&lt;/span&gt;

&lt;span class=&quot;s&quot;&gt;secrets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;psql_pwd_v2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;external&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack deploy -c stack.yml full-app1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но нужно понимать что в самой &lt;strong&gt;базе данных postgresql пароль не поменяется&lt;/strong&gt; т поэтому в логах сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;full-app-2_db&lt;/code&gt; я буду видеть ошибки: &lt;code class=&quot;highlighter-rouge&quot;&gt;FATAL:  password authentication failed for user &quot;app&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Т.е. мне &lt;strong&gt;необходимо было сперва сменить пароль пользователю app&lt;/strong&gt;, ну или добавить другого пользователя и создать уже новый секрет для имени пользователя. Сейчас же я просто сменю пароль для пользователя app.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it full-app-3_db.1.vk23xvu50sy4fgdzrtq6ngvg2 bash
psql -d app -U app
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'NEWPASS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://172.31.144.9:8000/items
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Fri, 19 Dec 2025 10:24:46 GMT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;adsd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Fri, 19 Dec 2025 10:24:48 GMT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fadfsdf&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Fri, 19 Dec 2025 10:24:50 GMT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fsfsdf&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-secret-update-process.svg&quot;&gt;swarm-secret-update-process.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;обновление-сервиса&quot;&gt;Обновление сервиса&lt;/h3&gt;

&lt;p&gt;В отличии от стека у сервиса есть отдельная команда для обновления, которая выглядит так &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update&lt;/code&gt;. Этой команду в качестве параметров передаётся конфигурация сервиса, которую необходимо поменять. Параметров там немало, поэтому не лишним будет выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update --help&lt;/code&gt;, чтобы получить весь их список и почитать что для сего нужно.&lt;/p&gt;

&lt;p&gt;Ниже я рассмотрю пару наиболее часто используемых вариантов обновления сервиса.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-service-update.svg&quot;&gt;swarm-service-update.svg&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;обычное-обновление-образа-сервиса&quot;&gt;Обычное обновление образа сервиса&lt;/h4&gt;

&lt;p&gt;Если пользователь при создании сервиса указывает конкретную версию образа (так и нужно делать), то со временем образ контейнера устаревает и приходит пора обновить этот образ.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create --name web --replicas 4 -p 9090:80 nginx:1.28.0 
docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ffi&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;itlvqvgp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vsmrr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xqisjn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wo&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yat&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;er&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cag&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wk&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gni&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service update --image nginx:1.29.0 web
docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;isos&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;46&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pwz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.29&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ffi&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;itlvqvgp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shutdown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shutdown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;изменить-публикацию-портов&quot;&gt;Изменить публикацию портов&lt;/h4&gt;

&lt;p&gt;Также бывает необходимо изменить номер порта, который используется на самом хосте. Причины у каждого свои, например, образ, который должен работать на конкретном порте, который сейчас занят этим сервисом.&lt;/p&gt;

&lt;p&gt;Для этого придётся использовать два параметра:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--publish-rm&lt;/code&gt; - удаляет проброс порта&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--publish-add&lt;/code&gt; - добавляет проброс порта&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service update --publish-rm 9090:80 --publish-add 9091:80 web
docker service inspect -f &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; web | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Protocol&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tcp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;TargetPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishedPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9091&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishMode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ingress&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если нужно добавить дополнительный проброс порта, то просто используем &lt;code class=&quot;highlighter-rouge&quot;&gt;--publish-add&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service update --publish-add 9092:80 web
docker service inspect -f &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; web | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Protocol&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tcp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;TargetPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishedPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9091&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishMode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ingress&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Protocol&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tcp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;TargetPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishedPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9092&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishMode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ingress&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;порядок-замены-старых-контейнеров&quot;&gt;Порядок замены старых контейнеров&lt;/h4&gt;

&lt;p&gt;По умолчанию при обновление сервиса Docker запускает новые контейнеры (задачи), после чего проверяет их работоспособность (healthcheck). Если всё нормально только после этого останавливается старый контейнер. Таким образом можно избежать простоев (zero-downtime). Но это поведение можно изменить добавив параметр –update-order, который может принимать следующие значения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;start-first&lt;/strong&gt; - Сначала запускается новый контейнер. Только после того, как он перейдет в состояние &lt;code class=&quot;highlighter-rouge&quot;&gt;running&lt;/code&gt; и успешно пройдет проверку здоровья (healthcheck), Docker остановит и удалит старый контейнер.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;stop-first&lt;/strong&gt; - Сначала остановить старый, потом запустить новый. Используется, если нельзя запускать две копии приложения одновременно (например, из-за конфликта доступа к базе данных или портам).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-update-order.svg&quot;&gt;swarm-update-order.svg&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service update --update-order start-first  --update-parallelism 1  --update-delay 5s  web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если выполнить команду выше произойдёт следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Docker выбирает один старый контейнер.&lt;/li&gt;
  &lt;li&gt;Запускает рядом  &lt;strong&gt;новый&lt;/strong&gt;  контейнер с обновленным образом/конфигурацией (&lt;code class=&quot;highlighter-rouge&quot;&gt;start-first&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Ждет, пока новый контейнер станет «здоров» (healthcheck).&lt;/li&gt;
  &lt;li&gt;Удаляет  &lt;strong&gt;старый&lt;/strong&gt;  контейнер.&lt;/li&gt;
  &lt;li&gt;Выдерживает паузу в  &lt;strong&gt;5 секунд&lt;/strong&gt;  (&lt;code class=&quot;highlighter-rouge&quot;&gt;update-delay&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Переходит к следующему контейнеру и повторяет процесс, пока не обновит все реплики по одной (&lt;code class=&quot;highlighter-rouge&quot;&gt;update-parallelism 1&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;откат-обновления&quot;&gt;Откат обновления&lt;/h3&gt;

&lt;p&gt;Если вдруг после обновления что что-то пошло не так, есть шанс вернуть всё назад. Для этого используется команда docker service rollback, которая немедленно откатит сервис к его &lt;strong&gt;предыдущей конфигурации&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;В качестве параметров можно использовать все те же параметры что и для команды update выше. Но тут есть один хороший параметр –rollback-monitor, который задаёт время наблюдения за контейнером после отката, чтобы убедиться, что он не помер.&lt;/p&gt;

&lt;p&gt;Тут важно понимать что откат приведёт к отмене только последней операции обновления.&lt;/p&gt;

&lt;p&gt;Т.е. выполняя все обновления для сервиса web выше у меня в итоге получилось:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Состояние (1)&lt;/strong&gt;: Создание сервиса (nginx:1.28.0, порт 9090).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Состояние (2)&lt;/strong&gt;: Обновление образа на nginx:1.29.0.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Состояние (3)&lt;/strong&gt;: Изменение порта с 9090 на 9091.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Состояние (4)&lt;/strong&gt;: Добавление еще одного порта (9092).  &lt;strong&gt;Это текущее состояние.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Т.е. выполнив команду docker service rollback web сервис вернётся к Состоянию (3), т.е. отменится только проброс еще одного порта (9092).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service rollback web
docker service inspect -f &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; web | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Protocol&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tcp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;TargetPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishedPort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9091&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;PublishMode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ingress&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-service-rollback.svg&quot;&gt;swarm-service-rollback.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;docker-service-update-force&quot;&gt;docker service update –force&lt;/h3&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update --force web&lt;/code&gt; сделает принудительное обновление сервиса web, даже если нет никаких обновлений. Да, кажется, что выполнении этой команды бессмысленно, но бывают всё же ситуации, когда это необходимо.  Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update --force&lt;/code&gt; нужна для &lt;strong&gt;принудительно пересоздания всех тасков (контейнеров) сервиса&lt;/strong&gt;, это “rolling restart” сервиса.
Что это даёт на практике:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;По очереди &lt;strong&gt;останавливает старые контейнеры и поднимает новые&lt;/strong&gt; (по правилам update_config).&lt;/li&gt;
  &lt;li&gt;VIP/имя сервиса остаются теми же.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;И вот несколько примеров для чего это реально можно использовать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;“Перезапуск” сервиса без простоя&lt;/strong&gt;. В Swarm нет команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service restart&lt;/code&gt;, поэтому используется &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update --force&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Подтянуть новый образ&lt;/strong&gt;. Если вы в качестве тэга образа указали latest (что не есть хорошо), то при пересоздании контейнера ноды кластера могут заново стянуть образ (если он изменился)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Обновить конфиги, которые менялись&lt;/strong&gt;. Если вдруг вы что-то изменили снаружи сервиса (файлы/конфиги) &lt;code class=&quot;highlighter-rouge&quot;&gt;--force&lt;/code&gt; гарантирует пересоздание контейнеров, чтобы они заново прочитали состояние на старте. Контейнеры могут видеть новый файл, но &lt;strong&gt;процесс внутри не перечитает&lt;/strong&gt;, пока не перезапустишь/не сделаешь &lt;code class=&quot;highlighter-rouge&quot;&gt;reload&lt;/code&gt;. Самый, наверное, распространенный пример это когда необходимо обновить &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS сертификаты&lt;/code&gt;, в идеале это происходит минимум раз в год.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Убить “залипшие” приложения&lt;/strong&gt;. Утечка памяти, зависшие коннекты, забитый пул, deadlock — проще сделать rolling restart. &lt;strong&gt;Семь бед - один ресет&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Переместить задачи (контейнеры)&lt;/strong&gt;. Если вдруг узлы кластера стали недоступны и задачи (контейнеры) пересоздались на других узлах может помочь вернуть нормальную балансировку.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Но не переживайте команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update --force&lt;/code&gt; не удаляет volume (данные в томах остаются).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-service-update-force.svg&quot;&gt;swarm-service-update-force.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;тут надо показать что с 2 репликами всё отвалится из-за файлов&lt;/p&gt;

&lt;p&gt;Для примера я создам сервис с образа &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:1.28.0&lt;/code&gt; с одной репликой и прокину туда файлы &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;hello.conf&lt;/code&gt;, также проброшу порт 80.&lt;/p&gt;

&lt;p&gt;Все файлы можно получить тут.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create   --name hello-service   --publish &lt;span class=&quot;nv&quot;&gt;published&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;80,target&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;80 -  --mount &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;bind&lt;/span&gt;,source&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/index.html,target&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/share/nginx/html/index.html,readonly   --mount &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;bind&lt;/span&gt;,source&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;/hello.conf,target&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/etc/nginx/conf.d/default.conf,readonly   nginx:1.28.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь я проверю что находится внутри файла &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; в самом контейнере (задачи) сервиса, логично что тоже самое что и внутри файла на самом хосте.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;hello-service.1.ov4e9s1k54w156zcm23nr1ies cat /usr/share/nginx/html/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;Hello&amp;lt;/h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Поменяю строку &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;&lt;/code&gt; на &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;h1&amp;gt;Hello Again&amp;lt;/h1&amp;gt;&lt;/code&gt; и проверю подтянулись ли изменения в сам контейнер сервиса.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;Hello&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Again&amp;lt;/h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;hello-service.1.ov4e9s1k54w156zcm23nr1ies cat /usr/share/nginx/html/index.html
&lt;span class=&quot;sb&quot;&gt;```&lt;/span&gt;json
&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Оказалось, что нет, и выходом здесь для меня будет выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update --force&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service update --force hello-service
docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;hello-service.1.qmcb2mqu3mnvvf2siu9ubenna cat /usr/share/nginx/html/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;Hello&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Again&amp;lt;/h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же говорить про секреты самого Swarm то тут по сути обновления нет, их нельзя нельзя “поменять на месте”. Единственный путь — это создать новый секрет прокинуть его в контейнер, но придётся и приложение переписывать для использования нового секрета.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-force-update-example.svg&quot;&gt;swarm-force-update-example.svg&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 23 Aug 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-service-update</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-service-update</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Хранилище образов</title>
        <description>&lt;p&gt;Как мы уже знаем любой контейнер при создании использует какой-то образ. И образы эти где-то нужно хранить, по умолчанию образы хранятся в &lt;strong&gt;DockerHub&lt;/strong&gt;. Но рано или поздно вы всё равно столкнётесь с тем что придётся использовать локальный репозиторий образов &lt;strong&gt;Docker&lt;/strong&gt;, т.е. репозиторий размещённый только в вашей локальной сети. На то много причин начиная с банальной безопасности заканчивая простой экономией трафика и скоростью создания контейнеров.&lt;/p&gt;

&lt;p&gt;На что стоит обратить внимание при создании своего локального репозитория:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Всегда используйте ssl для прода&lt;/strong&gt;. По умолчанию Docker всегда будет пытаться скачать образы с репозитория используя протокол &lt;code class=&quot;highlighter-rouge&quot;&gt;https&lt;/code&gt;. Но эта статья носит характер лишь ознакомления с локальным репозиторием, поэтому здесь я буду использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;http&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Удаление старых неиспользуемых образов. Если у вас бывают ситуации что в день происходит сборка или скачивание образов не один раз, то через какое-то время образы могут занимать очень много дискового пространства. Поэтому если эти образы более не используются рекомендуется их удалять.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;вариант-1️⃣-используем-образ-registry&quot;&gt;Вариант 1️⃣: Используем образ registry&lt;/h3&gt;

&lt;p&gt;Суть идеи в том, что создаётся контейнер, внутри которого репозиторий. Далее вы выкачиваете (&lt;code class=&quot;highlighter-rouge&quot;&gt;pull&lt;/code&gt;) образ с &lt;strong&gt;DockerHub&lt;/strong&gt; или любого другого репозитория себе на локальное устройство, можно даже импортировать образ из архива локально. Главное, чтобы локально у вас был тот самый образ, который вы хотите разместить в своём репозитории. После того как образ скачан можно его отправить (&lt;code class=&quot;highlighter-rouge&quot;&gt;push&lt;/code&gt;) в локальный репозиторий.&lt;/p&gt;

&lt;h4 id=&quot;1️⃣-разворачиваем-сам-контейнер&quot;&gt;1️⃣ Разворачиваем сам контейнер&lt;/h4&gt;

&lt;p&gt;Для создания локального репозитория будем использовать образ &lt;strong&gt;registry&lt;/strong&gt;. Но так как это пример я не буду сейчас тонко настраивать этот репозиторий. Я лишь покажу что можно использовать для хранения образов локально и поэтому сейчас не буду настраивать &lt;code class=&quot;highlighter-rouge&quot;&gt;https&lt;/code&gt;. Если вдруг это вам необходимо напишите об этом в комментарии.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /opt/docker-registry
docker run -d -p 5000:5000 -v /opt/docker-registry:/var/lib/registry --name my-registry registry:2
docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;73&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;registry&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/entrypoint.sh /etc…&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-registry&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;2️⃣скачиваем-образ&quot;&gt;2️⃣Скачиваем образ&lt;/h4&gt;

&lt;p&gt;Для примера я загружу образ &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:1.29.4&lt;/code&gt;, и после загрузки проверю что локально на моём устройстве он присутствует.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull nginx:1.29.4
docker image ls nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.29&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;af&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;177&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;024&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;161&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;3️⃣тэгируем-скачанный-образ&quot;&gt;3️⃣Тэгируем скачанный образ&lt;/h4&gt;

&lt;p&gt;Добавляем новый тэг для загруженного образа. Дело в том, что если вы используете любой другой репозиторий, не &lt;strong&gt;DockerHub&lt;/strong&gt; то и наименование вашего образа должно содержать dns имя этого репозитория, ну или &lt;strong&gt;ip-адресс если нет dns имени&lt;/strong&gt;. Для примера у того же &lt;strong&gt;Microsoft&lt;/strong&gt; есть свой публичный репозиторий и если мы хотим скачать что-то оттуда то имя образа уже будет содержать не только привычное нам имя приложения (nginx) а еще и полный путь образа (&lt;code class=&quot;highlighter-rouge&quot;&gt;mcr.microsoft.com/dotnet/framework/runtime&lt;/code&gt;), т.е. при тэгировании образа для репозитория вы должны придерживаться следующему наименованию &lt;strong&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;[HOST[:PORT]/][NAMESPACE/]REPOSITORY[:TAG]&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker tag nginx:1.29.4 172.31.144.9:5000/nginx:1.29.4
docker image ls | grep nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.29&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;af&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;177&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;024&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;161&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Во многих примерах вы можете встретить записи &lt;code class=&quot;highlighter-rouge&quot;&gt;localhost/127.0.0.1&lt;/code&gt; но я &lt;strong&gt;рекомендую прописывать сразу локальный ip-адресс хоста&lt;/strong&gt;, тем более если репозиторий вы развернул на другом устройстве в сети, а &lt;code class=&quot;highlighter-rouge&quot;&gt;push/pull&lt;/code&gt; делаете с другого.&lt;/p&gt;

&lt;h4 id=&quot;4️⃣загрузка-образа-в-локальный-репозиторий&quot;&gt;4️⃣Загрузка образа в локальный репозиторий&lt;/h4&gt;

&lt;p&gt;Теперь самое простое, так как по умолчанию нет никакой авторизации для загрузки образа в репозиторий созданный из образа &lt;strong&gt;registry&lt;/strong&gt; мы просто прописываем &lt;code class=&quot;highlighter-rouge&quot;&gt;push&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker push 172.31.144.9:5000/nginx:1.29.4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://172.31.144.9:5000/v2/&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gave&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HTTPS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но при попытке сделать push я получаю ошибку, потому что &lt;strong&gt;по умолчанию Docker пытается использовать https&lt;/strong&gt;. Для того чтобы он не пытался это делать при обращении к &lt;code class=&quot;highlighter-rouge&quot;&gt;172.31.144.9&lt;/code&gt;, нужно прописать этот ip-адресс в файле /etc/docker/daemon.json.&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Внимание:&lt;/strong&gt; Перезапуск Docker daemon остановит все запущенные контейнеры, включая my-registry. После перезапуска нужно запустить контейнер заново.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/docker/daemon.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;insecure-registries&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;172.31.144.9:5000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart docker
docker info
docker start my-registry
docker push 172.31.144.9:5000/nginx:1.29.4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;1.29&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;digest:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;519&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;69&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ddfedee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12976&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;289&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;421804&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1778&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Так как я использовал volume при создании контейнера, то и все файлы загружаемые в репозиторий теперь должны быть в локальной директории хоста.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo tree /opt/docker-registry/docker/registry/v2/repositories/nginx/_manifests
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/opt/docker-registry/docker/registry/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/repositories/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;├──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_manifests&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;├──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;revisions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;519&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;69&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ddfedee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12976&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;289&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;421804&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.29&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;├──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;519&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;69&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ddfedee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12976&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;289&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;421804&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;│&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;└──&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ну или можно просто перейти по ссылке http://172.31.144.9:5000/v2/_catalog дял того, чтобы проверить какие образы находятся в репозитории.&lt;/p&gt;

&lt;h4 id=&quot;5️⃣скачиваем-образ-уже-с-локального-репозитория&quot;&gt;5️⃣Скачиваем образ уже с локального репозитория&lt;/h4&gt;

&lt;p&gt;Теперь, когда я захочу загрузить образ не с репозитория &lt;strong&gt;DockerHub&lt;/strong&gt; а с локального репозитория я также выполняя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker pull&lt;/code&gt; указываю полный путь образа. Но опять же не забываем добавить исключение в &lt;code class=&quot;highlighter-rouge&quot;&gt;daemon.json&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull 172.31.144.9:5000/nginx:1.29.4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-registry-setup.svg&quot;&gt;docker-registry-setup.svg&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;6️⃣создаём-кэширующий-репозиторий&quot;&gt;6️⃣Создаём кэширующий репозиторий&lt;/h4&gt;

&lt;p&gt;И теперь представим ситуацию что вдень нужно загрузить около 5-10 образов и каждый раз так выкачивать образы с &lt;strong&gt;DockerHub&lt;/strong&gt; в локальный репозиторий делать вручную проблематично. Поэтому проще сделать кэширующий registry.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /opt/docker-registry/config.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;log:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;level:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;storage:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filesystem:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rootdirectory:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/registry&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;addr:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;proxy:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;remoteurl:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://registry&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.docker.io&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker rm -f my-registry
docker run -d &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--name registry-mirror &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-p 5000:5000 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-v /opt/docker-registry/config.yml:/etc/docker/registry/config.yml &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-v /opt/docker-registry:/var/lib/registry &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
registry:2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь можно делать pull напрямую через registry, он сам перенаправит запрос на https://registry-1.docker.io и выкачает образ себе, после чего отдаст нам. И если при другой компьютер в сети сделает тот же самый pull то registry сперва проверит есть ли какие-то обновления в образе на самом DockerHub и если их нет он отдаст образ, который есть у него локально. Т.е. не будет постоянно заново выкачивать образы при каждом обращении.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull 172.31.144.9:5000/library/nginx:1.28.1-alpine-otel
sudo find /opt/docker-registry/ -name 1.28.1-alpine-otel
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/opt/docker-registry/docker/registry/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/repositories/library/nginx/_manifests/tags/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-alpine-otel&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также чтобы постоянно не писать полный путь до репозитория (172.31.144.9:5000/library/) при выполнении команды docker pull можно прописать зеркало в файле /etc/docker/daemon.json.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/docker/daemon.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;registry-mirrors&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://172.31.144.9:5000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart docker
docker pull library/nginx:1.28-alpine3.23
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-registry-caching.svg&quot;&gt;docker-registry-caching.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;вариант-2️⃣-используем-nexus-sonatype&quot;&gt;Вариант 2️⃣: Используем nexus sonatype&lt;/h3&gt;

&lt;p&gt;Я рекомендую использовать именно этот вариант, только держите в уме что здесь я просто обозреваю продукт и настраиваю именно для демонстрации, а не продакшена. Опять же если будет интересно подробная настройка пишите в комментариях.&lt;/p&gt;

&lt;p&gt;Для начала создаём контейнер из образа &lt;code class=&quot;highlighter-rouge&quot;&gt;sonatype/nexus3&lt;/code&gt;. После того как контейнер поднимется можно переходить в браузере по ссылке http://172.31.144.9:8081/.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d -p 8081:8081 -v nexus-data:/nexus-data --name nexus sonatype/nexus3 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При первом входе необходимо вбить автоматически сгенерированный пароль и после поменять его на свой. имя пользователя &lt;strong&gt;admin&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker exec -it nexus bash
cat /nexus-data/admin.password
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;25689260&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;833-4193&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-adf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;210&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Далее переходим к настройке, наша основная цель - это создание прокси репозитория для &lt;strong&gt;DockerHub&lt;/strong&gt; и включение возможности анонимного &lt;code class=&quot;highlighter-rouge&quot;&gt;docker pull&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим по &lt;a href=&quot;http://172.31.144.9:8081/#admin/repository/repositories&quot;&gt;ссылке&lt;/a&gt; и создаём прокси репозиторий для &lt;strong&gt;Docker&lt;/strong&gt;.
&lt;img src=&quot;/static/img/k8s/2026-01-27_15-23.png&quot; alt=&quot;enter image description here&quot; /&gt;
&lt;img src=&quot;/static/img/k8s/2026-01-27_15-23_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Не забываем включить &lt;code class=&quot;highlighter-rouge&quot;&gt;Enable anonymous access&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Дальше идём http://172.31.144.9:8081/#admin/security/realms и делаем так.
&lt;img src=&quot;/static/img/k8s/2026-01-27_15-03.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Теперь всё готово для использования только что созданного локального репозитория и магия тут в том, что не нужно ничего выкачивать с &lt;strong&gt;DockerHub&lt;/strong&gt; я напрямую обращусь к локальному репозиторию дальше &lt;strong&gt;сам Nexus пойдёт на DockerHub и скачает образ&lt;/strong&gt;, разместит его у себя и уже после отдаст мне образ с локального репозитория. Т.е. вместо 3 запросов как в примере ранее тут достаточно выполнить один запрос. При этом если образ на &lt;strong&gt;DockerHub&lt;/strong&gt; не менялся, то и при последующем запросе сам Nexus не будет его скачивать заново.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull 172.31.144.9:8081/dockerhub-proxy/nginx:1.28.1-alpine
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же вам нужно загружать свои образы в репозиторий то необходимо создай другой docker репозиторий (hosted).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/nexus-sonatype-setup.svg&quot;&gt;nexus-sonatype-setup.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;сравнительная-таблица-registry-vs-nexus&quot;&gt;Сравнительная таблица: Registry vs Nexus&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-registry-vs-nexus.svg&quot; alt=&quot;docker-registry-vs-nexus&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 23 Aug 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-private-repository</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-private-repository</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Healthchecks</title>
        <description>&lt;p&gt;Если используется контейнеризация Docker в боевой среде, настоятельно рекомендуется использовать Healthcheck для сервисов, контейнеров и т.д. Особенно если используется Docker Swarm.&lt;/p&gt;

&lt;p&gt;Напомню, что основная цель Docker Swarm это работа приложения без простоя zero-downtime. Если просто запуск сервиса еще можно пережить без Healthcheck, то вот обновление уже сложнее. Дело в том, что при обновлении сервиса Docker Swarm считает контейнер рабочим только если получил от него ответ, по умолчанию ответ - это просто уведомление о том что приложение (nginx, postgresql, custom app) внутри контейнера запустилось и работает.&lt;/p&gt;

&lt;p&gt;Согласитесь, тот факт, что приложение внутри контейнера запустилось еще не говорит о том, что это полностью рабочий контейнер. Например, есть контейнер с Nginx, который должен отобразить страницу с тестом Hello. По умолчанию Docker посчитает контейнер рабочим просто потому что внутри стартанул Nginx, при этом он понятия не имеет что получит пользователь при обращении к контейнеру. В идеале я хочу, чтобы пользователь 100% получил страницу с текстом Hello. Вот тут я и могу использовать Healthcheck, настроить его так чтобы видеть действительно ли контейнер отдаёт пользователю то что необходимо.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-healthcheck-comprehensive.svg&quot;&gt;docker-healthcheck-comprehensive.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;как-это-работает&quot;&gt;Как это работает&lt;/h3&gt;

&lt;p&gt;При создании контейнера Docker выполняет внутри него команду, которую указываю я. И если эта команда возвращает &lt;strong&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%B0&quot;&gt;Код выхода&lt;/a&gt; (Exit Codes)&lt;/strong&gt; 0, то контейнер считается рабочим и запускается.&lt;/p&gt;

&lt;p&gt;Коды выхода могут быть следующими:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;0 (Успех): Контейнер исправен&lt;/li&gt;
  &lt;li&gt;1 (Сбой): Контейнер неисправен&lt;/li&gt;
  &lt;li&gt;2 (Резерв): Этот код зарезервирован для Docker и не рекомендуется для использования&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В зависимости от ответа контейнер может иметь следующий из статусов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;healthy&lt;/strong&gt; — всё ок (0)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;unhealthy&lt;/strong&gt; — проверка не проходит (1)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;starting&lt;/strong&gt; — контейнер запущен, но ещё идёт проверка работоспособности (Healthcheck)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;При этом важно понимать, что сам Docker не пытается ничего исправить он просто выполняет проверку работоспособности и выставляет статус. Максимум что он может сделать это попытаться перезапустить контейнер, если вы это настроили. А вот Docker Swarm автоматически пересоздаёт unhealthy задачи и исключает их из load balancer.&lt;/p&gt;

&lt;h3 id=&quot;основные-параметры&quot;&gt;Основные параметры&lt;/h3&gt;

&lt;p&gt;Сам Healthcheck можно использовать и в Dockerfile, сервисах, стеках, в docker compose и даже docker run. Вот некоторые самые распространённые параметры для Healthcheck:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;interval&lt;/strong&gt;: Время между попытками проверки (по умолчанию: 30 с). Т.е. если первая проверка прошла неудачно (нет ответа 0), то следующая попытка проверки через этот интервал времени&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;timeout&lt;/strong&gt;: Максимально допустимое время для выполнения одной проверки (по умолчанию: 30 секунд). Т.е. ждём ответа от контейнера в течении этого интервала времени.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;retries&lt;/strong&gt;: Количество последовательных сбоев, необходимых для того, чтобы пометить контейнер как неисправный (по умолчанию: 3).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;start-period&lt;/strong&gt;: Льготный период после запуска, в течение которого сбои не учитываются в лимите повторных попыток (по умолчанию: 0 с). Это как ожидание перед первой проверкой. Обратите внимание что если в течении 30 с (interval) контейнер не ответил 0 на Healthcheck, то он будет считаться неисправным. Отсюда вывод что если приложение в контейнере стартует очень долго (дольше 30 с), то этот параметр нужно выставить больше чем 30 секунд. Т.е. если ваше приложение стартует дольше 30 секунд, то вы получите ложное срабатывание неисправного контейнера.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для примера если контейнер не вернул значение Hello, точнее не вернул код 0 в течении, времени которое занимает на проверку (interval + retries) то статус такого контейнера становится unhealthy и он отключается.&lt;/p&gt;

&lt;h3 id=&quot;пример-с-docker-run&quot;&gt;Пример с docker run&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-healthcheck.svg&quot;&gt;docker-healthcheck.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Для начала я создам образ c index.html, который выведет текст Hello при обращении к Nginx (nginx.conf). Саму команду HEALTHCHECK я помещу в Dockerfile, чтобы проверка происходила при каждом создании контейнера:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-Dockerfile&quot;&gt;dockerfileFROM nginx:alpine

# Копируем HTML файл
COPY index.html /usr/share/nginx/html/index.html

# Устанавливаем curl для healthcheck
RUN apk add --no-cache curl

# Настраиваем healthcheck
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost/ | grep -q &quot;Hello&quot; || exit 1

EXPOSE 80
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Для создания образа я выполню команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build -t nginx-health:1.1 .&lt;/code&gt;. Заметьте, что тут есть CMD, не путайте это с простым CMD, который выполняет собственно команду внутри контейнера при старте. CMD в файле Dockerfile работает в связке с HEALTHCHECK, т.е. &lt;code class=&quot;highlighter-rouge&quot;&gt;HEALTHCHECK ... CMD ...&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Параметры HEALTHCHECK:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--interval=30s&lt;/code&gt; - проверка каждые 30 секунд&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--timeout=3s&lt;/code&gt; - таймаут ответа 3 секунды&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--start-period=5s&lt;/code&gt; - задержка перед первой проверкой&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--retries=3&lt;/code&gt; - количество неудачных попыток до пометки как unhealthy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Сама команда CMD для HEALTHCHECK:
&lt;strong&gt;1. &lt;code class=&quot;highlighter-rouge&quot;&gt;curl -f http://localhost/&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;curl&lt;/code&gt; - утилита для HTTP запросов&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-f&lt;/code&gt; (–fail) - если сервер вернёт ошибку (404, 500 и т.д.), curl завершится с ненулевым кодом&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost/&lt;/code&gt; - адрес для проверки&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. &lt;code class=&quot;highlighter-rouge&quot;&gt;|&lt;/code&gt; (pipe)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Передаёт вывод curl в следующую команду (grep)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. &lt;code class=&quot;highlighter-rouge&quot;&gt;grep -q &quot;Hello&quot;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;grep&lt;/code&gt; - поиск текста&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-q&lt;/code&gt; (–quiet) - тихий режим, ничего не выводит, только возвращает код результата&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;Hello&quot;&lt;/code&gt; - искомый текст&lt;/li&gt;
  &lt;li&gt;Если найдено → код возврата 0 (успех)&lt;/li&gt;
  &lt;li&gt;Если НЕ найдено → код возврата 1 (ошибка)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. &lt;code class=&quot;highlighter-rouge&quot;&gt;||&lt;/code&gt; (логическое ИЛИ)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Выполняет команду справа, &lt;strong&gt;ТОЛЬКО&lt;/strong&gt; если команда слева провалилась (код ≠ 0)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. &lt;code class=&quot;highlighter-rouge&quot;&gt;exit 1&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Завершает скрипт с кодом ошибки 1&lt;/li&gt;
  &lt;li&gt;Для Docker это означает &lt;strong&gt;unhealthy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;После сборки образа запускаю контейнер и проверяю его статус:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d -p 8080:80 --name nginx-healthcheck nginx-health:1.1
docker ps
&lt;span class=&quot;sb&quot;&gt;```&lt;/span&gt;json
c1a33dd3ee25   nginx-health:1.1  Up 7 seconds &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;healthy&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; nginx-healthcheck
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl  http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;Hello&amp;lt;/h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь я изменю файл index.html чтобы валидация HEALTHCHECK завершилась с кодом 1.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim html/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;Hell&amp;lt;/h&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t nginx-health:1.2 .
docker rm -f nginx-healthcheck
docker run -d -p 8080:80 --name nginx-healthcheck nginx-health:1.2
docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx-health:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(unhealthy)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx-healthcheck&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;пример-с-docker-compose&quot;&gt;Пример с docker compose&lt;/h3&gt;

&lt;p&gt;Тут делается тоже самое, поэтому не буду прописывать всё один в один просто приведу пример файла docker-compose.yml.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker rm -f nginx-healthcheck
docker compose up -d 
docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;nginx-healthcheck&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(unhealthy)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker compose down
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;пример-с-docker-stack&quot;&gt;Пример с docker stack&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-stack-healthcheck.svg&quot;&gt;docker-stack-healthcheck.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Для примера буду использовать всё тот же подход с образом nginx и ответом Hello. Но то как ведут себя контейнеры при использовании Healthcheck в docker stack отличается. Как я уже говорил в docker stack самым главным является добиться необходимого статуса REPLICAS, и если статус контейнера не healthy то и контейнер не стартанёт. Особенно полезно использовать этот механизм при обновлении сервисов docker stack.&lt;/p&gt;

&lt;p&gt;Для примера представим себе ситуацию:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Я выкладываю сервис, который работает (отдаёт пользователю Hello)&lt;/li&gt;
  &lt;li&gt;Я вношу правки в сервис и делаю ошибку (меняю на Hell)&lt;/li&gt;
  &lt;li&gt;Перевыкладываю сервис (снова docker stack deploy)&lt;/li&gt;
  &lt;li&gt;Проверяю что же произошло (спойлер обновления не будет)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack deploy -c docker-stack.yml nginx-stack
docker stack services nginx-stack
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;REPLICAS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jo&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;itz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lou&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx-stack_web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack ps nginx-stack
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;djvpuz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ls&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx-stack_web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ltcr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vfwz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx-stack_web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Да и тут есть одно, но, сейчас, когда контейнеры работают статус task самого сервиса Running, т.е. статус Healthy или Unhealthy выставляется только контейнерам (docker container ls). Это особенность Swarm - healthcheck статус скрыт в выводе задач, но активно используется внутри для управления репликами и load balancing.&lt;/p&gt;

&lt;p&gt;Теперь я поменяю значение Hello на Hell в файле index.html и сделаю деплой используя файл docker-stack-unhealthy.yml, потому что удалять конфиг docker нельзя если его кто-то использует.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim html/index.html
docker stack deploy -c docker-stack-unhealthy.yml nginx-stack
docker stack ps nginx-stack
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ID             NAME                    IMAGE          NODE             DESIRED STATE   CURRENT STATE             
860d4wee98by   nginx-stack_web.1       nginx:alpine   c-stream-9-vm4   Shutdown        Complete 15 hours ago
djvpuz2ls9f3    \_ nginx-stack_web.1   nginx:alpine   c-stream-9-vm4   Shutdown        Shutdown 15 hours ago
ltcr3vfwz5jm   nginx-stack_web.2       nginx:alpine   c-stream-9-vm9   Running         Running 15 hours ago
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack services nginx-stack
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;jo&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;itz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lou&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx-stack_web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Как видно из вывода выше обновить Docker попытался только один task и его контейнер. Но так как статус контейнера этого task не Healthy он бросил это дело и оставил один task без изменений, т.е. со старой версией. И это хорошо ведь в итоге сервис всё же работает и отдаёт нормальную страницу с текстом Hello. Но можно сделать еще лучше, используя failure_action: rollback в update_config (файл docker-stack-rollback.yml).&lt;/p&gt;

&lt;p&gt;Но сейчас есть одна проблема: у меня теперь живой только один task и мне перед обновлением с rollback нужно оживить второй иначе я просто добьюсь того что оба task будут выключены. Поэтому сперва оживляю существующее:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack deploy -c docker-stack.yml nginx-stack
docker stack ps nginx-stack
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;55mpr1kzdwm4   nginx-stack_web.1       nginx:alpine   c-stream-9-vm4   Running         Starting 5 seconds ago
wzhycp0w3878    \_ nginx-stack_web.1   nginx:alpine   c-stream-9-vm4   Shutdown        Shutdown 5 seconds ago
0vmpokkln8xi   nginx-stack_web.2       nginx:alpine   c-stream-9-vm9   Running         Running 20 seconds ago
bss08mcndzwa    \_ nginx-stack_web.2   nginx:alpine   c-stream-9-vm9   Shutdown        Complete 40 seconds ago
vn08vas0y1ic    \_ nginx-stack_web.2   nginx:alpine   c-stream-9-vm9   Shutdown        Complete about a minute ago
n0c84gcrvzbi    \_ nginx-stack_web.2   nginx:alpine   c-stream-9-vm9   Shutdown        Complete 3 minutes ago
1io00g1zp6ms    \_ nginx-stack_web.2   nginx:alpine   c-stream-9-vm9   Shutdown        Shutdown 3 minutes ago
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь, когда у меня два task работают я могу использовать файл с rollback.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim html/index.html
docker stack deploy -c docker-stack-rollback.yml --detach&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false &lt;/span&gt;nginx-stack
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Updating service nginx-stack_web (id: 3h9a3wj2p1iigwud3ahb62wbr)
overall progress: rolling back update: 2 out of 2 tasks
1/2: running   [==================================================&amp;gt;]
2/2: running   [==================================================&amp;gt;]
verify: Service 3h9a3wj2p1iigwud3ahb62wbr converged
rollback: rollback completed
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;различия&quot;&gt;Различия&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-healthcheck-comparison.svg&quot;&gt;docker-healthcheck-comparison.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Я рассмотрел три варианта использования Healthcheck, теперь давайте рассмотрим ключевые отличия.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Функция&lt;/th&gt;
      &lt;th&gt;docker run&lt;/th&gt;
      &lt;th&gt;docker-compose&lt;/th&gt;
      &lt;th&gt;docker stack&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Автоматический restart при unhealthy&lt;/td&gt;
      &lt;td&gt;❌ Нет&lt;/td&gt;
      &lt;td&gt;❌ Нет&lt;/td&gt;
      &lt;td&gt;✅ &lt;strong&gt;Да&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Load balancing исключает unhealthy&lt;/td&gt;
      &lt;td&gt;❌ Нет LB&lt;/td&gt;
      &lt;td&gt;❌ Нет LB&lt;/td&gt;
      &lt;td&gt;✅ &lt;strong&gt;Да&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Rolling updates учитывают health&lt;/td&gt;
      &lt;td&gt;❌ Нет&lt;/td&gt;
      &lt;td&gt;❌ Нет&lt;/td&gt;
      &lt;td&gt;✅ &lt;strong&gt;Да&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Видимость статуса (healthy/unhealthy)&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose ps&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt; на нодах&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Production-ready&lt;/td&gt;
      &lt;td&gt;❌ Нет&lt;/td&gt;
      &lt;td&gt;❌ Нет&lt;/td&gt;
      &lt;td&gt;✅ &lt;strong&gt;Да&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Sat, 23 Aug 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-healthcheck</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-healthcheck</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Немного теории про сети</title>
        <description>&lt;p&gt;Когда вы устанавливаете Docker по умолчанию создаётся виртуальный сетевой мост docker0. Этот виртуальный сетевой мост объединяет все контейнеры, работающие в режиме &lt;code class=&quot;highlighter-rouge&quot;&gt;bridge&lt;/code&gt; (по умолчанию), в одну внутреннюю сеть, и подключает их к хосту через этот мост.&lt;/p&gt;

&lt;p&gt;Т.е. по умолчанию все запущенные контейнеры имеют доступ к остальным контейнерам по виртуальной сети, если даже контейнер создавался без флага -p. Отсюда возникает вопрос что преимущества контейнеризации в изоляции а тут общая сеть. Всё так, но только если делать всё по умолчанию. Если же нужно изолировать контейнеры в виртуальной сети, то необходимо просто создать отдельную виртуальную сеть для этих контейнеров. Лучшей практикой считается создавать отдельную виртуальную сеть для каждого приложения.&lt;/p&gt;

&lt;p&gt;Конечно тех, кто следует такой практике очень мало и  в целом использование сети bridge по умолчанию не приносит никаких видимых проблем а наоборот только упрощает работу. Но при использовании Docker  в K8s об этом обязательно нужно знать.&lt;/p&gt;

&lt;p&gt;Для начала я создам контейнер с nginx (&lt;a href=&quot;https://www.tipoit.kz/docker-first-nginx-inside-container&quot;&gt;если не понятно что происходит&lt;/a&gt;).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d --name some-nginx -p 80:80 nginx:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;ip-адрес-контейнера&quot;&gt;ip-адрес контейнера&lt;/h3&gt;

&lt;p&gt;Если у каждого контейнера по умолчанию активна виртуальная сеть стало быть должен быть и ip-адрес отличающийся от ip-адреса самого устройства на котором установлен Docker? Да, всё верно и чтобы получить этот виртуальный ip-адрес используется &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container inspect&lt;/code&gt;, подробнее &lt;a href=&quot;https://www.tipoit.kz/docker-whats-inside&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .NetworkSettings.IPAddress }}'&lt;/span&gt; some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И да по умолчанию само устройство на котором установлен Docker может обращаться к этому ip-адресу контейнера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;telnet 172.17.0.3 80
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;обмен-трафиком&quot;&gt;Обмен трафиком&lt;/h3&gt;

&lt;p&gt;Теперь когда я знаю что у меня ip-адрес контейнера 172.17.0.3 а локальный ip-адрес устройства на котором установлен Docker 172.31.144.9 встаёт вопрос почему разные подсети и как вообще если подсети разные локальное устройство имеет доступ к контейнеру по сети. По умолчанию при создании виртуальный сетевой мост docker0 получает IP-адрес из подсети &lt;code class=&quot;highlighter-rouge&quot;&gt;172.17.0.0/16&lt;/code&gt;. И DHCP-сервер Docker автоматически выделяет IP контейнерам из этого диапазона.&lt;/p&gt;

&lt;p&gt;Самому же виртуальному сетевому мосту docker0 присваивается IP-адрес 172.17.0.1/16. Все сетевые обращения между контейнерами и локальным хостом происходит через этот docker0.&lt;/p&gt;

&lt;p&gt;При старте контейнера Docker делает следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаёт виртуальную пару интерфейсов &lt;strong&gt;veth-pair&lt;/strong&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;eth0&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;vethXXXX&lt;/code&gt;). Оба этих интерфейса принадлежат контейнеру.&lt;/li&gt;
  &lt;li&gt;Конец на хосте (&lt;code class=&quot;highlighter-rouge&quot;&gt;vethXXXX&lt;/code&gt;) подключается к мосту &lt;code class=&quot;highlighter-rouge&quot;&gt;docker0&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Контейнер получает IP-адрес (&lt;code class=&quot;highlighter-rouge&quot;&gt;172.17.0.3&lt;/code&gt;) &lt;code class=&quot;highlighter-rouge&quot;&gt;eth0&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Теперь контейнер может общаться с другими контейнерами в той же сети &lt;code class=&quot;highlighter-rouge&quot;&gt;docker0&lt;/code&gt; и с самим хостом (&lt;code class=&quot;highlighter-rouge&quot;&gt;172.17.0.1&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Когда вы пытаетесь подключиться к контейнеру с локального сервера используется docker0 и в качестве исходящего ip-адреса будет использоваться 172.17.0.1 вместо 172.31.144.9.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container logs -f some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://172.17.0.3
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Oct/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GET / HTTP/1.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;615&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;curl/7.76.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Oct/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GET / HTTP/1.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;615&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;curl/7.76.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При обращении контейнера к другому контейнеру трафик идёт напрямую через &lt;code class=&quot;highlighter-rouge&quot;&gt;docker0&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker start -ai some-alpine
ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://172.17.0.3
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Oct/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GET / HTTP/1.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;615&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;curl/8.14.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При обращении же контейнера к внешней сети и наоборот Docker настраивает NAT-правила через &lt;code class=&quot;highlighter-rouge&quot;&gt;iptables&lt;/code&gt; , чтобы пакеты маршрутизировались наружу через хостовый интерфейс (обычно &lt;code class=&quot;highlighter-rouge&quot;&gt;eth0&lt;/code&gt;). Т.е. для того чтобы обратится к контейнеру с другого сервера в сети (172.31.144.10) к контейнеру с nginx (172.17.0.3) нужно обращаться на 172.31.144.9.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-bridge-network.svg&quot;&gt;docker-bridge-network.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;docker-container-port&quot;&gt;docker container port&lt;/h3&gt;

&lt;p&gt;Команда docker container port показывает какие порты контейнера проброшены на хост — то есть какие порты доступны снаружи.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container port some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Расшифровка того что вывела команда сверху:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;80/tcp&lt;/code&gt; — внутренний порт внутри контейнера (Nginx).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;0.0.0.0:80&lt;/code&gt; — порт хоста, к которому можно обращаться извне (например, в браузере &lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Нижний вариант это то же самое только по ipv6&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;не-использовать-виртуальную-сеть-nethost&quot;&gt;Не использовать виртуальную сеть (–net=host)&lt;/h3&gt;

&lt;p&gt;Но есть возможность не использовать вообще виртуальную сеть, а вместо этого использовать сеть хоста, т.е. использовать ip-адрес хоста (172.31.144.9). Но такой режим работает только на Linux.&lt;/p&gt;

&lt;p&gt;Встречается такое очень редко, на моей памяти это делалось для мониторинга. Например для отправки агентами на систему мониторинга метрик нужно передавать реальный ip-адрес хоста. Т.е. в контейнере стоит агент мониторинга, который отправляет метрики на систему мониторинга. И если сделать всё по умолчанию то в метриках будет стоять ip-адрес контейнера а не хоста.&lt;/p&gt;

&lt;p&gt;Также может использоваться в ситуациях когда необходимо убрать все лишние прослойки для лучшей производительности.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-host-network.svg&quot;&gt;docker-host-network.svg&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo iptables -t nat -L -n -v --line-numbers
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 17 Aug 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-networks</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-networks</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Пробираемся внутрь контейнера</title>
        <description>&lt;p&gt;Каждый уважающий себя админ Linux рано или поздно задумывается о том, как получить shell в контейнере ну или как запустить там команду.&lt;/p&gt;

&lt;p&gt;Скажу сразу что это конечно возможно, но не всегда получится выполнить ту или иную команду, которую можно выполнить в самой ОС. Так как образ контейнера обычно содержит только минимум необходимого для работы приложения многие пакеты там не установлены. Например, не удивляйтесь если внутри контейнера не будет telnet.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONTAINER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bdc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2440&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/docker-entrypoint.…&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;abaa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadb:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;docker-entrypoint.s…&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3306&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-mariadb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;docker-container-run--it-docker-run&quot;&gt;docker container run -it (docker run)&lt;/h3&gt;

&lt;p&gt;Если вы ещё не знаете за что отвечает команда docker container run, то рекомендую к прочтению &lt;a href=&quot;https://www.tipoit.kz/docker-first-nginx-inside-container&quot;&gt;эту статью&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container run -it&lt;/code&gt; — это один из самых часто используемых способов &lt;strong&gt;запуска контейнера в интерактивном режиме&lt;/strong&gt; (то есть “с живым терминалом”). Флаги -it расшифровываются как:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-i&lt;/code&gt; - Оставляет стандартный ввод (&lt;code class=&quot;highlighter-rouge&quot;&gt;stdin&lt;/code&gt;) открытым, чтобы можно было вводить команды (interactive)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-t&lt;/code&gt; - Создаёт псевдотерминал (teletype terminal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Т.е. если я сейчас запущу команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker run -it --name some-nginx-2 nginx:latest bash&lt;/code&gt; то команду выполняемая при старте контейнера по умолчанию сменится на команду &lt;code class=&quot;highlighter-rouge&quot;&gt;bash&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --name some-nginx-2 nginx:latest bash
&lt;span class=&quot;gp&quot;&gt;root@57e565dc144f:/# &lt;/span&gt;ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;bin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dev&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker-entrypoint.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;home&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mnt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;proc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;srv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь сравним команды, которые выполнились при старте обычно созданного контейнера some-nginx и some-nginx-2.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .Path }} {{ .Args }}'&lt;/span&gt; some-nginx
docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .Path }} {{ .Args }}'&lt;/span&gt; some-nginx-2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/docker-entrypoint.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-g&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;daemon&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;off;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/docker-entrypoint.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Понятное дело, что во втором случаем сам nginx не запустился, а вместо него запустился bash. На это стоит обратить внимание. И так как контейнер работает только пока сама выполняемая команда внутри запущена после выхода из контейнера с bash происходит выход из bash и сам контейнер останавливается.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --name some-ubuntu ubuntu:latest bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;root@faf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;026693&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:/#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;faf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;026693&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bash&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Exited&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-ubuntu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Поэтому если вам нужно просто запустить временный контейнер лучше воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker run --rm -it --name some-ubuntu ubuntu:latest bash&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ubuntu:latest&lt;/code&gt; - в качестве образа для контейнера используем ubuntu&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--rm&lt;/code&gt; - удаляет автоматически контейнер после выхода из него&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;### docker container start -ai&lt;/p&gt;

&lt;p&gt;Для того чтобы запустить остановленный контейнер с командой bash и сразу попасть в псевдотерминал контейнера можно использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container start -ai some-ubuntu&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Даже если контейнер уже запущен также можно использовать эту команду, но лучше будет использовать команду ниже. Дело в том, что тут запускается команда по умолчанию, т.е. если выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container start -ai some-nginx&lt;/code&gt; то вы прост попадёте в консоль с запущенным nginx и при выходе из сессии просто выключите контейнер.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container start some-nginx -ai
CTRL+C
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;notice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;worker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exited&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;notice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;### docker container exec&lt;/p&gt;

&lt;p&gt;Если контейнер у вас уже запущен и команда там по умолчанию не bash, то используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container exec -it&lt;/code&gt;. Для примера я выполню эту команду для контейнера с nginx и получу доступ к отдельному псевдотерминалу, который никак не повлияет на работу самого nginx внутри контейнера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it some-nginx bash
&lt;span class=&quot;gp&quot;&gt;root@bdc2d2440db9:/# &lt;/span&gt;ls /etc/nginx/conf.d/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;default.conf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же необходимо просто выполнить команду внутри контейнера, при этом не входя, а него можно выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;docker exec some-nginx cat /etc/nginx/nginx.conf&lt;/code&gt;, т.е. вместо флагов &lt;code class=&quot;highlighter-rouge&quot;&gt;-it&lt;/code&gt; прописываем саму команду.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;some-nginx cat /etc/nginx/nginx.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/nginx/mime.types;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default_type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/octet-stream;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;unable-to-start-container-process-exec-bash&quot;&gt;unable to start container process: exec: “bash”&lt;/h3&gt;

&lt;p&gt;Я уже говорил, что не всё что вы пытаетесь выполнить внутри контейнера будет работать потому что образ контейнера всегда пытаются уменьшить в размерах, ведь это как истина контейнеризации. Получается в некоторых образах нет многих бинарных файлов, которые вы привыкли видеть у себя в ОС.&lt;/p&gt;

&lt;p&gt;Решением тут будет устанавливать эти пакеты либо вручную через менеджера пакетов, опять-таки если этот менеджер пакетов присутствует в контейнере.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --name some-alpine alpine:latest sh
/ &lt;span class=&quot;c&quot;&gt;# curl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;sh:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;curl:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/ &lt;span class=&quot;c&quot;&gt;# apk add curl&lt;/span&gt;
/ &lt;span class=&quot;c&quot;&gt;# curl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--help'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--manual'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;more&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;information&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но если вы столкнулись с &lt;code class=&quot;highlighter-rouge&quot;&gt;unable to start container process: exec: &quot;bash&quot;&lt;/code&gt; то просто попробуйте сменить &lt;code class=&quot;highlighter-rouge&quot;&gt;bash&lt;/code&gt; на &lt;code class=&quot;highlighter-rouge&quot;&gt;sh&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --name some-alpine alpine:latest bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;docker:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;daemon:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;task&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;shim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;task:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OCI&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;runtime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;runc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exec:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bash&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;executable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$PATH:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unknown.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --name some-alpine alpine:latest sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 16 Jun 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-run-bash-inside-container</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-run-bash-inside-container</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Как работает dns</title>
        <description>&lt;p&gt;Если вдруг вы не знаете что такое &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Domain_Name_System&quot;&gt;DNS&lt;/a&gt;&lt;/strong&gt;, то в двух словах это &lt;strong&gt;сервис&lt;/strong&gt;, благодаря которому происходит &lt;strong&gt;преобразование доменных имён в IP-адреса&lt;/strong&gt; и обратно. Т.е. вместо того чтобы обращаться к &lt;strong&gt;серверу&lt;/strong&gt; по &lt;strong&gt;IP-адресу&lt;/strong&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;172.19.0.3&lt;/code&gt;, можно обратиться по имени &lt;code class=&quot;highlighter-rouge&quot;&gt;some-nginx&lt;/code&gt;. Человеческий мозг так устроен, что проще запоминать &lt;strong&gt;имена серверов&lt;/strong&gt;, чем &lt;strong&gt;IP-адреса&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-13.svg&quot; alt=&quot;how dns works&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Например, я зайду в контейнер и попытаюсь пропинговать другой контейнер по ip-адресу 172.19.0.3 и по имени контейнера some-nginx.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it my-network1-nginx1 ping 172.19.0.3
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.089&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.109&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it my-network1-nginx1 ping some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.089&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.109&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. благодаря Docker DNS контейнеры могут обращаться друг к другу по именам контейнеров.&lt;/p&gt;

&lt;h3 id=&quot;dns-псевдоним-alias&quot;&gt;DNS псевдоним (alias)&lt;/h3&gt;

&lt;p&gt;Если вдруг есть необходимость обращения к &lt;strong&gt;контейнеру&lt;/strong&gt; помимо основного &lt;strong&gt;имени&lt;/strong&gt; по какому-то другому, можно воспользоваться &lt;strong&gt;псевдонимами&lt;/strong&gt;. Т.е. если &lt;strong&gt;имя контейнера&lt;/strong&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;some-nginx&lt;/code&gt; и я добавляю &lt;strong&gt;псевдоним&lt;/strong&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;mynginx&lt;/code&gt;, то обращаться к контейнеру можно по обоим именам.&lt;/p&gt;

&lt;p&gt;Для того чтобы добавить псевдоним для созданного контейнера:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Отключаем контейнер от сети
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network disconnect my-network1 some-nginx
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Подключаем контейнер к сети и задаём псевдоним
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network connect --alias mynginx my-network1 some-nginx
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем что псевдоним есть
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container inspect -f &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; some-nginx
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my-network1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPAMConfig&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{},&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Links&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Aliases&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mynginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;15efdb23bd4c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;DNSNames&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;some-nginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mynginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;15efdb23bd4c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если контейнер еще не создан, то можно указать псевдоним во время его создания.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d --name web --network my-net -network-alias my-nginx-alias nginx:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И да важное замечание в сети, которая создаётся (docker0) по умолчанию DNS не работает.&lt;/p&gt;

&lt;h3 id=&quot;dns-round-robin&quot;&gt;DNS round robin&lt;/h3&gt;

&lt;p&gt;С версии 1.11 Docker engine позволяет назначать нескольким контейнерам одни и те же dns имена (псевдонимы). Использовать это можно для балансировки нагрузки. Т.е. при обращении, например, а страницу http://some-nginx трафик поочерёдно будет уходить то но один контейнер то на другой, стало быть оба контейнера обслуживают запросы клиента.&lt;/p&gt;

&lt;p&gt;Обратите внимание на то что мы говорим про псевдонимы dns имён, а не про имена контейнеров. Создать несколько контейнеров с одним именем не получится.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаём отдельную сеть
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network create rr-net
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём 2 контейнера с образа nginxdemos/hello с псевдонимом web
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d --name web1 --network rr-net --network-alias web nginxdemos/hello
docker run -d --name web2 --network rr-net --network-alias web nginxdemos/hello
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Стартуем контейнер с alpine и проверяем работу DNS&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it --rm --network rr-net alpine sh
/ &lt;span class=&quot;c&quot;&gt;# nslookup web&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Non-authoritative&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;answer:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/ &lt;span class=&quot;c&quot;&gt;# apk add curl&lt;/span&gt;
/ &lt;span class=&quot;c&quot;&gt;# for i in $(seq 1 6); do curl -s web | grep &quot;Server&quot;; done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;ffc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51538&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;ffc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51538&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;ffc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51538&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;727674&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9865&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;727674&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9865&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;address:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Server&amp;amp;nbsp;name:&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;727674&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9865&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;зачем-dns&quot;&gt;Зачем DNS&lt;/h3&gt;

&lt;p&gt;Во-первых, как я уже говорил, &lt;strong&gt;имена серверов&lt;/strong&gt; проще запоминать, чем &lt;strong&gt;IP-адреса&lt;/strong&gt;. Но если в вашем случае это не так, то тогда еще один повод, к которому претензий не будет ни у кого: &lt;strong&gt;IP-адреса контейнеров&lt;/strong&gt; могут меняться, и в таком случае, обращаясь по &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Domain_Name_System&quot;&gt;DNS&lt;/a&gt;&lt;/strong&gt; имени, вам не нужно узнавать новый &lt;strong&gt;IP-адрес контейнера&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-14.svg&quot; alt=&quot;how dns works&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Бонсуом скрипт, который выведет все псевдонимы для всех контейнеров.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker ps -q | xargs docker inspect &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  | jq -r &lt;span class=&quot;s1&quot;&gt;'
    .[] |
    .Name as $n |
    .NetworkSettings.Networks? |
    if type==&quot;object&quot; then
      to_entries[] |
      &quot;\($n) → \(.key): \(.value.IPAddress) | Aliases: \((.value.Aliases // []) | join(&quot;, &quot;))&quot;
    else
      &quot;\($n) → no networks&quot;
    end
  '&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  | sed -E &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    -e &lt;span class=&quot;s2&quot;&gt;&quot;s/(→)/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1b[36m&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\1\x&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1b[0m/&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    -e &lt;span class=&quot;s2&quot;&gt;&quot;s/([0-9]+&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\.&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;[0-9]+&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\.&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;[0-9]+&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\.&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;[0-9]+)/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1b[32m&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\1\x&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1b[0m/g&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    -e &lt;span class=&quot;s2&quot;&gt;&quot;s/(Aliases: )/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1b[33m&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\1\x&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1b[0m/&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/my-network&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-nginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-network&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Aliases:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05186&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ff&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/some-nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-network&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Aliases:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mynginx,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;efdb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/some-nginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bridge:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Aliases:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 16 May 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-how-dns-works</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-how-dns-works</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>dns</category>
        
        
      </item>
    
      <item>
        <title>Docker - Администрирование сетей</title>
        <description>&lt;p&gt;В этой статье я описал теорию которую необходимо знать для дальнейшей работы с сетью в Docker.&lt;/p&gt;

&lt;p&gt;Для начала я создам контейнер с nginx (&lt;a href=&quot;https://www.tipoit.kz/docker-first-nginx-inside-container&quot;&gt;если не понятно что происходит&lt;/a&gt;).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d --name some-nginx -p 80:80 nginx:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь выведу &lt;code class=&quot;highlighter-rouge&quot;&gt;ip-адрес&lt;/code&gt; контейнера и &lt;code class=&quot;highlighter-rouge&quot;&gt;ip-адрес&lt;/code&gt; хоста где установлен Docker.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{ .NetworkSettings.IPAddress }}'&lt;/span&gt; some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;вывести-список-всех-сетей-docker-в-docker-docker--network-ls&quot;&gt;Вывести список всех сетей docker в Docker (docker  network ls)&lt;/h3&gt;

&lt;p&gt;В прошлой статье я упоминал что виртуальной сетей в Docker может быть намного больше чем одной, которая создаётся по умолчанию.&lt;/p&gt;

&lt;p&gt;Для того, чтобы проверить какие вообще виртуальные сети есть в системе используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker network ls&lt;/code&gt;, которая выведет список всех виртуальных сетей.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;NETWORK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DRIVER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SCOPE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;af&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bridge&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bridge&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0368276&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ff&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyper&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bridge&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;581357&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;de&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;291&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;просмотр-информации-о-сети-в-docker--docker-network-inspect&quot;&gt;Просмотр информации о сети в Docker  (docker network inspect)&lt;/h3&gt;

&lt;p&gt;Отлично команда выше выдала список всех сетей, но как понять какой контейнер использует ту или иную сеть. Для этого используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker network inspect&lt;/code&gt;, где в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;Containers&lt;/code&gt; перечисляются контейнеры, которые используют эту сеть.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network inspect 6d18af512d4d
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;			&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Containers&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;15efdb23bd4ca96be08cd6e4845a941508b231392bc2f3d0ebc57f0facd1e8f0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;some-nginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;EndpointID&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;07b21011ab8e497beabf228c3208c8a77f684ee4725d8ee734fdb9a92806c53a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;MacAddress&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;02:42:ac:11:00:03&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPv4Address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;172.17.0.3/16&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPv6Address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;как-создать-сеть-в-docker--docker-network-create&quot;&gt;Как создать сеть в Docker  (docker network create)&lt;/h3&gt;

&lt;p&gt;И вот пришло время создать свою собственную виртуальную сеть в Docker используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker network create&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network create my-network1
docker network ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;672&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-network&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bridge&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При создании сети я не указывал никаких настроек кроме как название этой сети. Подсеть для этой новой сети Docker задал сам автоматически. Т.е. контейнеры использующие эту сеть (&lt;code class=&quot;highlighter-rouge&quot;&gt;my-network1&lt;/code&gt;) будут иметь &lt;code class=&quot;highlighter-rouge&quot;&gt;ip-адреса&lt;/code&gt; вида &lt;code class=&quot;highlighter-rouge&quot;&gt;172.19.0.2&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network inspect my-network1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;				&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;IPAM&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Driver&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Config&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Subnet&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;172.19.0.0/16&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Gateway&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;172.19.0.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же необходимо задать какие-то конкретные значения при создании сети можно использовать следующие опции:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--driver&lt;/code&gt; - Тип сети (&lt;code class=&quot;highlighter-rouge&quot;&gt;bridge&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;overlay&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;macvlan&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;host&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;none&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--subnet&lt;/code&gt; - Указать подсеть вручную (&lt;code class=&quot;highlighter-rouge&quot;&gt;--subnet 172.28.0.0/16&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--gateway&lt;/code&gt; - Указать шлюз вручную (&lt;code class=&quot;highlighter-rouge&quot;&gt;--gateway 172.28.0.1&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;--ip-range&lt;/code&gt; - Задать диапазон IP для контейнеров (&lt;code class=&quot;highlighter-rouge&quot;&gt;--ip-range 172.28.5.0/24&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если вдруг необходимо запретить контейнерам выход в интернет, то необходимо задать опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--internal&lt;/code&gt; при создании новой сети.&lt;/p&gt;

&lt;h3 id=&quot;назначить-сеть-контейнеру&quot;&gt;Назначить сеть контейнеру&lt;/h3&gt;

&lt;p&gt;Для того чтобы назначить только что создаю сеть новому контейнеру при выполнении команды создания docker container run необходимо указать сеть при помощи параметра &lt;code class=&quot;highlighter-rouge&quot;&gt;--network&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d --name my-network1-nginx1 --network my-network1 nginx:alpine
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы подключить уже запущенный контейнер к другой сети используется &lt;code class=&quot;highlighter-rouge&quot;&gt;docker network connect&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network connect my-network1 some-nginx
docker network inspect my-network1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;					&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Containers&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;05186ff32ca1fa4f9dd01eede5293f0e7aa8676700155ffc05b7cf3b577bda54&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-network1-nginx1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;EndpointID&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4eec0b82203370114a7e3d6724f9cedf5e3629996849459b5e8e0801d331df59&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;MacAddress&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;02:42:ac:13:00:02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPv4Address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;172.19.0.2/16&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPv6Address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;15efdb23bd4ca96be08cd6e4845a941508b231392bc2f3d0ebc57f0facd1e8f0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;some-nginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;EndpointID&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;08702a00bff2d1b6381720216cd365434e97160e002677dbd91b9f6b579309d9&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;MacAddress&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;02:42:ac:13:00:03&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPv4Address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;172.19.0.3/16&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;IPv6Address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь, когда в сети &lt;code class=&quot;highlighter-rouge&quot;&gt;my-network1&lt;/code&gt; два контейнера они должны обращаться друг к другу по сети без проблем, но не иметь возможность обратиться к контейнерам из в другой сети.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it my-network1-nginx1 sh
ping some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.105&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.110&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.131&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ping 172.17.0.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.112&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.101&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seq=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttl=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.125&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;почему-контейнеры-из-разных-сетей-видят-друг-друга&quot;&gt;Почему контейнеры из разных сетей видят друг друга&lt;/h3&gt;

&lt;p&gt;Но как видно из вывода контейнер &lt;code class=&quot;highlighter-rouge&quot;&gt;some-nginx-2&lt;/code&gt;, который в сети &lt;code class=&quot;highlighter-rouge&quot;&gt;bridge&lt;/code&gt; тоже пингуется. Произошло это потому что я использую ОС CentOS, в которой по умолчанию включен &lt;code class=&quot;highlighter-rouge&quot;&gt;firewalld&lt;/code&gt;, который перехватывает управление. А точнее две сети Docker находятся в одной зоне (&lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;) в firewalld. Поэтому трафик между всеми сетями в одной зоне разрешён. Даже если Docker добавил правила, изолирующие обе сети в &lt;code class=&quot;highlighter-rouge&quot;&gt;iptables&lt;/code&gt; приоритет выше у &lt;code class=&quot;highlighter-rouge&quot;&gt;firewalld&lt;/code&gt;, который пропускает весь трафик.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-12.svg&quot; alt=&quot;Почему контейнеры из разных сетей видят друг друга&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Самым простым решением конечно будет просто отключить &lt;strong&gt;firewalld&lt;/strong&gt; в самой системе (не рекомендуется в проде).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl stop firewalld
sudo systemctl disable --now firewalld
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И другой вариант если вы хотите сохранить работающий &lt;strong&gt;firewalld&lt;/strong&gt; это исключить Docker-интерфейсы из управления &lt;strong&gt;firewall&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Получаем активные зоны
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --get-active-zones
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;interfaces:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;br-e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ff&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;br&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;672&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Удалить все Docker-интерфейсы
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent --remove-interface&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;docker0
sudo firewall-cmd --permanent --remove-interface&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;br-e4ee21b03ff4
sudo firewall-cmd --permanent --remove-interface&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;br-3dd65f38f672
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перечитываем правила
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем Docker
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;отключить-сеть-контейнера&quot;&gt;Отключить сеть контейнера&lt;/h3&gt;

&lt;p&gt;Если нужно отключить сеть у контейнера выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker network disconnect&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network disconnect bridge some-nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 16 May 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-network-administration</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-network-administration</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>TrueNAS - There are 2 disks available that have non-unique serial numbers</title>
        <description>&lt;p&gt;Решил попробовать TrueNAS, так как физического сервера не было создал на виртуализации ESXI. При создании pool получил предупреждение There are 2 disks available that have non-unique serial numbers.&lt;/p&gt;

&lt;h3 id=&quot;причина&quot;&gt;Причина&lt;/h3&gt;

&lt;p&gt;Причина собственно в том, что ESXI не выдаёт уникальные серийные номера при добавлении дисков.&lt;/p&gt;

&lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;

&lt;p&gt;Выключем вм и на датасторе в ESXI находим директорию с нашей виртуальной машиной, откуда скачиваем файл .vmx. Добавляем туда следующее:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;disk.enableUUID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TRUE&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scsi&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.serialNumber&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unique-disk-id-1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scsi&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.serialNumber&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unique-disk-id-2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После заменяем файл на датасторе.&lt;/p&gt;

&lt;p&gt;Внимание scsi0:1 и scsi0:2 должны совпадать с Virtual Device Node в свойствах виртуальной машины.&lt;/p&gt;
</description>
        <pubDate>Thu, 24 Apr 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/truenas-non-unique-serial-numbers</link>
        <guid isPermaLink="true">http://www.tipoit.kz/truenas-non-unique-serial-numbers</guid>
        
        <category>truenas</category>
        
        <category>storage</category>
        
        <category>esxi</category>
        
        
      </item>
    
      <item>
        <title>Jetty - KeyStores with multiple certificates are not supported</title>
        <description>&lt;p&gt;При замене сертификата в хранилище ключей для Geoserver получил следующую ошибку: ERROR [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - Failed to start java.lang.IllegalStateException: KeyStores with multiple certificates are not supported on the base class org.eclipse.jetty.util.ssl.SslContextFactory.&lt;/p&gt;

&lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;

&lt;p&gt;В моём случае всё просто я решил при создании сертификата добавить несколько DNS имён для сертификата, что собственно и не понравилось Jetty.&lt;/p&gt;

&lt;p&gt;Решением будет просто перевыпустить сертификат с одним DNS именем.&lt;/p&gt;
</description>
        <pubDate>Thu, 17 Apr 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/jetty-keystore-multiple-certificates-not-suport</link>
        <guid isPermaLink="true">http://www.tipoit.kz/jetty-keystore-multiple-certificates-not-suport</guid>
        
        <category>security</category>
        
        <category>linux</category>
        
        <category>jetty</category>
        
        
      </item>
    
      <item>
        <title>Docker - Слои образа и кэш слоёв</title>
        <description>&lt;p&gt;Как уже известно каждый &lt;strong&gt;Docker&lt;/strong&gt; образ состоит из слоёв. Чем больше команд (инструкций) в &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; тем больше слоёв, но не все команды создают слои.&lt;/p&gt;

&lt;p&gt;Для примера возьмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; который использует &lt;code class=&quot;highlighter-rouge&quot;&gt;ubuntu&lt;/code&gt; и ставит &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;, при этом копируя файлы внутрь образа.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;22.04&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index.html&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/nginx/html/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-g&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;daemon off;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если не понимаете что происходит:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;№&lt;/th&gt;
      &lt;th&gt;Инструкция&lt;/th&gt;
      &lt;th&gt;Что делает&lt;/th&gt;
      &lt;th&gt;Создаёт слой?&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;FROM ubuntu:22.04&lt;/td&gt;
      &lt;td&gt;скачивает базовый слой (родительский образ)&lt;/td&gt;
      &lt;td&gt;да&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;RUN apt-get install -y nginx&lt;/td&gt;
      &lt;td&gt;установка nginx&lt;/td&gt;
      &lt;td&gt;да&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;COPY&lt;/td&gt;
      &lt;td&gt;копирование файла&lt;/td&gt;
      &lt;td&gt;да&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;CMD&lt;/td&gt;
      &lt;td&gt;команда запуска&lt;/td&gt;
      &lt;td&gt;нет (метаданные)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Получается, что &lt;strong&gt;при сборке образа будет создано 3 слоя&lt;/strong&gt; и сейчас я это проверю, выполнив команду сборки образа.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-14.svg&quot; alt=&quot;docker image layers&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build . -t mybuild:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/library/ubuntu:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;22.04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09506232&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8004&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;47&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;68&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;307&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;648&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fdd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eaa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aaf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;87914100&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index.html&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/nginx/html/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;writing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;92&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8073184&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;570&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;69167&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3862&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;633&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;69&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;90&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fbb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;745&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;870&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Каждая инструкция (&lt;code class=&quot;highlighter-rouge&quot;&gt;RUN&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;COPY&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;ADD&lt;/code&gt;, и т.д.) в &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; создаёт слой.&lt;/p&gt;

&lt;h3 id=&quot;как-хранятся-слои-в-docker&quot;&gt;Как хранятся слои в Docker&lt;/h3&gt;

&lt;p&gt;Каждый слой представляет из себя директорию со сжатыми данными в ОС, где стоит Docker. Путь к этой директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/docker/overlay2/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-15.svg&quot; alt=&quot;docker image folders in os&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Но если заглянуть в эту директорию, не зная, что и где искать ничего особенно там не найти. Ну а для того чтобы понять в какой директории какой слой необходимо:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вывести слои образа
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect --format&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; mybuild:1.0 | jq
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:767e56ba346ae714b6e6b816baa839051145ed78cfa0e4524a86cc287b0c4b00&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:b3e9f88953eff8bf59b0042d340cbc16daf139665697ebf2ee741edd3c8b3b18&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:a04b6207eb080660102f534250f1e473474068e2f41baa0f2624279036ee75b5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выполняем поиск по хэшу слоя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;udo grep -rnw /var/lib/docker/image/overlay2/layerdb/sha256/ -e b3e9f88953eff8bf59b0042d340cbc16daf139665697ebf2ee741edd3c8b3b18
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/docker/image/overlay&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/layerdb/sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;112&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ebdd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;08&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;279&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;54&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ae&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;101&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ccae&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;78493293&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5862640&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/diff:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Скорее всего необходимости лезть вручную в эти директории и не будет, но знать где лежат слои физически лишним не будет.&lt;/p&gt;

&lt;h3 id=&quot;как-работает-кэш-в-docker&quot;&gt;Как работает кэш в Docker&lt;/h3&gt;

&lt;p&gt;При сборке Docker образа (&lt;code class=&quot;highlighter-rouge&quot;&gt;docker build&lt;/code&gt;) Docker &lt;strong&gt;сравнивает каждую инструкцию с ранее построенными образами, точнее с их слоями&lt;/strong&gt;. Если слой не изменился, то используется кэш, т.е. уже существующий слой. Так как у каждого слоя есть хэш, Docker при сборке вычисляет хэш всех изменений инструкции (SHA256) и сравнивает с существующими слоями. Т.е. если другой образ использует &lt;strong&gt;тот же слой (т.е. ту же комбинацию базового слоя + команды + контента) **, Docker **возьмёт этот слой из кэша&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Docker считает, что два слоя &lt;strong&gt;эквивалентны&lt;/strong&gt;, если совпадают:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;хэш предыдущего слоя (родителя);&lt;/li&gt;
  &lt;li&gt;команда (&lt;code class=&quot;highlighter-rouge&quot;&gt;RUN&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;COPY&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;ADD&lt;/code&gt; и её аргументы);&lt;/li&gt;
  &lt;li&gt;содержимое добавляемых файлов (если есть).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если всё это совпадает — Docker &lt;strong&gt;просто переиспользует существующий слой&lt;/strong&gt; из другого образа. Т.е. благодаря кэшированию происходит оптимизация использования дискового пространства. Также при наличии кэша нет необходимости скачивать одни и и те же слои с &lt;strong&gt;Docker hub&lt;/strong&gt; или создавать их заново что ускоряет процесс сборки образа.&lt;/p&gt;

&lt;p&gt;Для примера я создам два &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; с парочкой одинаковых инструкций и соберу два разных образа.&lt;/p&gt;

&lt;p&gt;📜 Dockerfile.1&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flask==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;📜 Dockerfile.2&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flask==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;точно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;та&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;же&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команда&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;python&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/app/main.py&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Выполню сборку первого образа с именем &lt;code class=&quot;highlighter-rouge&quot;&gt;cache1:1.0&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build --progress&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;plain -f Dockerfile.1 -t cache1:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/library/python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim@sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;663972&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;871&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;528&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fef&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eaa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4539&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5316&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;133771214&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;61&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DONE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;6.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flask==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DONE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;5.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Выполню сборку второго образа с именем &lt;code class=&quot;highlighter-rouge&quot;&gt;cache2:1.0&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build --progress&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;plain -f Dockerfile.2 -t cache2:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/library/python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim@sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;663972&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;871&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;528&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fef&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eaa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4539&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5316&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;133771214&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;617&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DONE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flask==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CACHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DONE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из команды выше уже видно, что для &lt;strong&gt;сборки использовались 2 слоя из кэша&lt;/strong&gt;, хотя в первом слое об этом и не написано. Также выполню docker inspect чтобы сравнить слои образа &lt;code class=&quot;highlighter-rouge&quot;&gt;cache2&lt;/code&gt; с &lt;code class=&quot;highlighter-rouge&quot;&gt;cache1&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect --format&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; cache1:1.0 | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:d7c97cb6f1fe7cae982649e9f55efe201212e8acaa64bd668c083b204e4efd4c&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:15eb6aec49b38357916ea069cb57c890841f4e40588c54ebba117f6314911d37&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:9ba402f61141e835fb247b8592f61ea2a885de652bbb368fe9cea93cbc8c324a&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:235e8192987624c55713750efe67254a8dbfe540c7a59c1d33353f928e42d80d&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:556dcdfbcdbc51dab4c5310208f5b09b7a03e7d9a627cd0defc8d2f5052e78d8&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect --format&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; cache2:1.0 | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:d7c97cb6f1fe7cae982649e9f55efe201212e8acaa64bd668c083b204e4efd4c&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:15eb6aec49b38357916ea069cb57c890841f4e40588c54ebba117f6314911d37&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:9ba402f61141e835fb247b8592f61ea2a885de652bbb368fe9cea93cbc8c324a&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:235e8192987624c55713750efe67254a8dbfe540c7a59c1d33353f928e42d80d&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:556dcdfbcdbc51dab4c5310208f5b09b7a03e7d9a627cd0defc8d2f5052e78d8&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sha256:0b636ec1d5fad65a1c6d8512c0ce7535824bab1c7700fb0b1c9b473ae54ea594&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода выше можно отметить что:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;При сборке &lt;code class=&quot;highlighter-rouge&quot;&gt;cache1:1.0&lt;/code&gt; все 5 слоёв были созданы с нуля.&lt;/li&gt;
  &lt;li&gt;При сборке &lt;code class=&quot;highlighter-rouge&quot;&gt;cache2:1.0&lt;/code&gt; Docker проверил каждый шаг сверху вниз:&lt;/li&gt;
&lt;/ol&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Слой (sha256)&lt;/th&gt;
      &lt;th&gt;Новый слой?&lt;/th&gt;
      &lt;th&gt;Комментарий&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;d7c97cb6&lt;/td&gt;
      &lt;td&gt;нет (беру из кэша)&lt;/td&gt;
      &lt;td&gt;базовый образ &lt;code class=&quot;highlighter-rouge&quot;&gt;python:3.11-slim&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;15eb6aec&lt;/td&gt;
      &lt;td&gt;нет (беру из кэша)&lt;/td&gt;
      &lt;td&gt;слой из Python базового образа&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;9ba402f6&lt;/td&gt;
      &lt;td&gt;нет (беру из кэша)&lt;/td&gt;
      &lt;td&gt;слой из Python базового образа&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;235e8192&lt;/td&gt;
      &lt;td&gt;нет (беру из кэша)&lt;/td&gt;
      &lt;td&gt;слой из Python базового образа&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;556dcdfb&lt;/td&gt;
      &lt;td&gt;нет (беру из кэша)&lt;/td&gt;
      &lt;td&gt;слой &lt;code class=&quot;highlighter-rouge&quot;&gt;RUN pip install flask==3.0.0&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0b636ec1&lt;/td&gt;
      &lt;td&gt;да (создаю новый)&lt;/td&gt;
      &lt;td&gt;слой &lt;code class=&quot;highlighter-rouge&quot;&gt;COPY app/ /app/&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-16.svg&quot; alt=&quot;docker layer's cache&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;порядок-слоёв-и-кэш&quot;&gt;Порядок слоёв и кэш&lt;/h3&gt;

&lt;p&gt;При сборке образа &lt;strong&gt;проверка слоёв идёт сверху вниз&lt;/strong&gt; и если вдруг инструкция какого-либо слоя меняется в &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; после его сборки, то при последующей сборке все следующие слой также будут пересозданы даже если ничего не менялось.&lt;/p&gt;

&lt;p&gt;📜 Dockerfile.2&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flask==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;python&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/app/main.py&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь если я соберу снова образ, то из кэша будет использован только один слой (&lt;code class=&quot;highlighter-rouge&quot;&gt;FROM python:3.11-slim&lt;/code&gt;).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ocker build -f Dockerfile.2 -t cache2:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CACHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/library/python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim@sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flask==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                               &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                            &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Поэтому рекомендуется при написании &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; инструкции, которые могут меняться прописывать максимально низко в файле.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-17.svg&quot; alt=&quot;ИНВАЛИДАЦИЯ КЭША DOCKER&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;как-собрать-образ-docker-без-использования-кэша&quot;&gt;Как собрать образ Docker без использования кэша&lt;/h3&gt;

&lt;p&gt;Если вдруг необходимо провести сборку образа без использования кэша нужно использовать флаг &lt;code class=&quot;highlighter-rouge&quot;&gt;--no-cache&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build --no-cache -f Dockerfile.2 -t cache2:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Когда бывает необходимо не использовать кэш:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Когда необходимо обновить пакеты, т.е. получить &lt;strong&gt;актуальные версии из репозиториев&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Если базовый образ был обновлён и необходимо получить свежий базовый образ&lt;/li&gt;
  &lt;li&gt;Когда сборка всегда строиться с нуля, независимо от предыдущего состояния (CI/CD)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Но если необходимо просто получить свежий базовый образ лучше использовать флаг &lt;code class=&quot;highlighter-rouge&quot;&gt;--pull&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;слой-контейнера&quot;&gt;Слой контейнера&lt;/h3&gt;

&lt;p&gt;При создании контейнера поверх слоёв с образом создаётся &lt;strong&gt;новый слой в статусе read/write&lt;/strong&gt;, т.е. слой перезаписываемый, в отличии от &lt;strong&gt;слоёв образа, которые в статусе read-only&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Т.е. если я создам контейнер, то произойдёт примерно следующее:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;layer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(базовый&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;слой)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;layer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;layer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;------------------------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;layer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(read-write)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Этот &lt;strong&gt;верхний слой контейнера&lt;/strong&gt; хранится отдельно в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/docker/overlay2/&lt;/code&gt;. Все манипуляции внутри контейнера сохраняются в слое самого контейнера, а не в слоях образа.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-18.svg&quot; alt=&quot;Слой контейнера в DOCKER&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect some-alpnginx | jq &lt;span class=&quot;s1&quot;&gt;'.[0].GraphDriver.Data'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;LowerDir&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/docker/overlay2/b76e86ac1387c177bb70ef2f1c0cdc58b86c228af2b890f474e76d13daf9c803-init/diff:/var/lib/docker/overlay2/a2168b993b381f985089daddef7bfc32fa15eae64575e3661b0e028c7ddf8bcc/diff:/var/lib/docker/overlay2/69e1478c7781777eaec105040d2ee9b8397882ddb8e1f320e399f3a7fbd1230c/diff:/var/lib/docker/overlay2/abb7d7bf0ad7f1b823f223652ccd1dc0f9aecdb5e6a3903a77e3832e1d0342d1/diff:/var/lib/docker/overlay2/2b96faabbd98c4847e4ff63598d11d551eddf829b0902f2fb74153247e95f927/diff:/var/lib/docker/overlay2/5d939a6cb84023566cb2513327474b7f029d69016f57ea4fec8d4f174646dc63/diff:/var/lib/docker/overlay2/d305392fcd4d3f4fa441e7cdb71b7dd41b0b77f767293735b393b9c54404312c/diff:/var/lib/docker/overlay2/c5865d2ecfa2c81b42ffeb09755886e9b907c1ac0b48aa9cd57d4cd2afb07263/diff:/var/lib/docker/overlay2/654377eb111af010abfab1e8293f37b7729584d041fe5e79007fb91293d9a75e/diff&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MergedDir&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/docker/overlay2/b76e86ac1387c177bb70ef2f1c0cdc58b86c228af2b890f474e76d13daf9c803/merged&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;UpperDir&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/docker/overlay2/b76e86ac1387c177bb70ef2f1c0cdc58b86c228af2b890f474e76d13daf9c803/diff&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;WorkDir&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/docker/overlay2/b76e86ac1387c177bb70ef2f1c0cdc58b86c228af2b890f474e76d13daf9c803/work&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Этот &lt;strong&gt;верхний слой контейнера&lt;/strong&gt; хранится отдельно в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/docker/overlay2/&lt;/code&gt;. Все манипуляции внутри контейнера сохраняются в слое самого контейнера, а не в слоях образа. Тут у контейнера 4 пути:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;LowerDir&lt;/strong&gt; - Слои образа (read-only)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;UpperDir&lt;/strong&gt; - Слой контейнера (read-write). Всё, что ты изменяешь внутри контейнера, записывается именно сюда.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MergedDir&lt;/strong&gt; - Смонтированное объединение всех слоёв&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;WorkDir&lt;/strong&gt; - Техническая папка OverlayFS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для того чтобы понять, что в какой директории лежит создам в контейнере новый файл:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;some-alpnginx sh -c &lt;span class=&quot;s2&quot;&gt;&quot;echo test &amp;gt;&amp;gt; /etc/nginx/1.txt&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Этот файл будет сохранён в директории &lt;strong&gt;UpperDir&lt;/strong&gt; контейнера, проверю что он там:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /var/lib/docker/overlay2/b76e86ac1387c177bb70ef2f1c0cdc58b86c228af2b890f474e76d13daf9c803/diff/etc/nginx/1.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 16 Apr 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-layers-and-cahce</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-layers-and-cahce</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>dns</category>
        
        
      </item>
    
      <item>
        <title>Linux - No suitable authentication method found</title>
        <description>&lt;p&gt;В общем на сервере есть приложение, которое подключается к другому серверу по sftp (22) и выкачивает оттуда файлы. Так вот при попытке подключения выходила ошибка: &lt;strong&gt;Renci.SshNet.Common.SshAuthenticationException: No suitable authentication method found to complete authentication (publickey,gssapi-keyex,gssapi-with-mic,keyboard-interactive)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;причина&quot;&gt;Причина&lt;/h3&gt;

&lt;p&gt;Дело в том, что скорее всего отключена возможность авторизации по паролю, именно &lt;strong&gt;password autentification&lt;/strong&gt;. Когда вы заходите на сервер по ssh вбивая при этом пароль с клавиатуры используется метод &lt;strong&gt;keyboard-interactive&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;

&lt;p&gt;Для начала рекомендую поискать где вообще упоминается параметр &lt;strong&gt;PasswordAuthentication&lt;/strong&gt;. Обращаем внимание на файл где значение равно &lt;strong&gt;no&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo grep -rnw /etc/ssh/ -e PasswordAuthentication
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/etc/ssh/sshd_config.d/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-cloud-init.conf:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:PasswordAuthentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;no&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Просто меняем значение в этом файле на &lt;strong&gt;yes&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/ssh/sshd_config.d/50-cloud-init.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PasswordAuthentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если вдруг есть что-то что постоянно меняет значение в &lt;code class=&quot;highlighter-rouge&quot;&gt;50-cloud-init.conf&lt;/code&gt;, то проще будет создать новый файл &lt;code class=&quot;highlighter-rouge&quot;&gt;00-pwd-auth.conf&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/ssh/sshd_config.d/00-pwd-auth.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PasswordAuthentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;проверка-изменений&quot;&gt;Проверка изменений&lt;/h3&gt;

&lt;p&gt;Для того, чтобы проверить что &lt;strong&gt;PasswordAuthentication&lt;/strong&gt; работает пытаемся подключиться к хосту по ssh с выводом всех логов.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh -vvv hostip
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выводе должна быть запись &lt;code class=&quot;highlighter-rouge&quot;&gt;Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,**password**,keyboard-interactive&lt;/code&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 28 Mar 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-no-suitable-authentication-method-found</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-no-suitable-authentication-method-found</guid>
        
        <category>security</category>
        
        <category>linux</category>
        
        <category>ssh</category>
        
        
      </item>
    
      <item>
        <title>Linux - shell request failed on channel 0</title>
        <description>&lt;p&gt;В какой-то момент пользователь перестал заходить на сервер по &lt;code class=&quot;highlighter-rouge&quot;&gt;SSH&lt;/code&gt;. После ввода пароля просто получал &lt;strong&gt;shell request failed on channel 0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;В логах самого сервера нашёл строчку: &lt;strong&gt;fork failed: Resource temporarily unavailable&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;причина&quot;&gt;Причина&lt;/h3&gt;

&lt;p&gt;В моём случае причина оказалось в том, что &lt;strong&gt;пользователь превысил лимит по запущенным процессам&lt;/strong&gt;, значение которого равно 4096. Да и такой лимит можно превысить если отдать сервер разработчикам ПО.&lt;/p&gt;

&lt;h3 id=&quot;проверка&quot;&gt;Проверка&lt;/h3&gt;

&lt;p&gt;Чтобы проверить сколько процессов запущено от пользователя:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo bash -c &lt;span class=&quot;s2&quot;&gt;&quot;pstree -up username | grep -o '([0-9]&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\+&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)' | wc -l&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;

&lt;p&gt;Конечно в идеале нужно решить всё-таки почему разрабатываемое ПО создаёт столько процессов и возможно переписать ПО. Но мы то знаем, что заставить разработчика переписать что работает сродни подвигу железного человека в войне бесконечности.&lt;/p&gt;

&lt;p&gt;Так вот самым простым решением будет просто увеличить этот лимит:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Открываем файл 20-nproc.conf или 90-nproc.conf
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo vim /etc/security/limits.d/20-nproc.conf 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Вносим правки и увеличиваем лимит на процессы
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;конкретного&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;пользователя&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;soft&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8096&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;всех&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;soft&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6096&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 20 Mar 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-shell-request-failed-on-channel-o</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-shell-request-failed-on-channel-o</guid>
        
        <category>security</category>
        
        <category>linux</category>
        
        
      </item>
    
      <item>
        <title>Docker - Имя образа и его тэги</title>
        <description>&lt;p&gt;Начнём сначала с наименования образа. По умолчанию наименование Docker образа имеет формат &lt;code class=&quot;highlighter-rouge&quot;&gt;[REGISTRY_HOST[:PORT]/][NAMESPACE/]REPOSITORY[:TAG]&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;REPOSITORY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;df&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cdcd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4918&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;78576&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;36&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;52.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но в выводе выше нет никакого имени репозитория или пользователя.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Дело в том что по умолчанию всё что скачано с Docker hub (&lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:alpine&lt;/code&gt;) или создано локально (&lt;code class=&quot;highlighter-rouge&quot;&gt;cache2:1.0&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;cache1:1.0&lt;/code&gt;) не имеет названия репозитория в имени образа.&lt;/li&gt;
  &lt;li&gt;Также если образ скачан с Docker hub и при этом это официальный образ имени пользователя также не будет в наименовании (&lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:alpine&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Для примера я скачаю другой неофициальный образ &lt;code class=&quot;highlighter-rouge&quot;&gt;okteto/nginx:alpine&lt;/code&gt; с Docker hub и при просмотре образа увижу в наименовании и имя пользователя (&lt;code class=&quot;highlighter-rouge&quot;&gt;okteto&lt;/code&gt;), который загрузил этот образ на Docker hub.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull okteto/nginx:alpine
docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;REPOSITORY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;okteto/nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;alpine&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;009330&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;860&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;years&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;17.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же образ скачивается с приватного репозитория то к логическому имени образа также ещё добавляется этот репозиторий.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull mcr.microsoft.com/mcr/hello-world:latest
docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;REPOSITORY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mcr.microsoft.com/mcr/hello-world&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fce&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;289&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;99&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;years&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.84&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;mcr.microsoft.com&lt;/strong&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;REGISTRY_HOST&lt;/code&gt;, т.е. URL репозитория (порт &lt;code class=&quot;highlighter-rouge&quot;&gt;443&lt;/code&gt; опускается)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;mcr&lt;/strong&gt; - пространство пользователя или организации&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;hello-world&lt;/strong&gt; - логическое имя образа&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-19.svg&quot; alt=&quot;ФОРМАТ НАИМЕНОВАНИЯ DOCKER ОБРАЗОВ&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;тэги&quot;&gt;Тэги&lt;/h3&gt;

&lt;p&gt;Теперь, когда понятно каким образом строится наименование образа, перейдём к тэгам. Тэг добавляется к наименованию контейнера, зачастую просто указывает версию образа. Например, человек создаёт образ &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;. На следующий день он добавляет супер функцию, которая нужна не всем пользователям. Отсюда встаёт вопрос как справится с этой ситуацией ведь если он загрузит образ с тем же именем он также обновится у всех пользователей при следующей загрузке образа.&lt;/p&gt;

&lt;p&gt;Чтобы таких ситуаций не было как раз и используются тэги. С тэгами эта ситуация решается довольно просто человек создаёт образ &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:1.0&lt;/code&gt; и на следующий день загружает новый образ, допустим с тэгом 1.1 (&lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:1.1&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Дело в том, что при создании образа без тэга он всё равно добавляется, по умолчанию это тэг &lt;code class=&quot;highlighter-rouge&quot;&gt;latest&lt;/code&gt;, который кстати не всегда говорит, что будет скачан самый свежий образ. Всё зависит от того, кто выкладывает образ и как, например, создатель образа может выложить конкретную версию и не добавить новый функционал в &lt;code class=&quot;highlighter-rouge&quot;&gt;latest&lt;/code&gt;. Но как правило это касается только неофициальных образов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-20.svg&quot; alt=&quot;DOCKER TAGS: УПРАВЛЕНИЕ ВЕРСИЯМИ&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t mybuild .
docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;REPOSITORY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mybuild&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bfe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;124&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы задать тэг для образа можно использовать 2 варианта:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;При создании самого образа, используя флаг &lt;code class=&quot;highlighter-rouge&quot;&gt;-t&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t mybuild:1.0 .
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Используя &lt;code class=&quot;highlighter-rouge&quot;&gt;docker tag&lt;/code&gt; для уже созданного образа
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker tag mybuild:1.0 mybuild:2.0
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Но важное замечание, когда вы задаёте тэг используя второй вариант вы не заменяете существующий образ, а по сути создаёте еще один, но с использованием конечно же &lt;a href=&quot;https://www.tipoit.kz/docker-layers-and-cahce&quot;&gt;кэша для слоёв образа&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-21.svg&quot; alt=&quot;НЕСКОЛЬКО ТЭГОВ = ОБЩИЕ СЛОИ&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;REPOSITORY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mybuild&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                             &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bfe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;124&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mybuild&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                             &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bfe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;124&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В качестве тэга можно также использовать буквы не только цифры, например &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:alpine&lt;/code&gt;. Т.е. скачивая образ &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:alpine&lt;/code&gt; я всегда буду получать последний свежий образ &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; на &lt;code class=&quot;highlighter-rouge&quot;&gt;alpine&lt;/code&gt;. Но если мне нужен конкретная версия &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; также на &lt;code class=&quot;highlighter-rouge&quot;&gt;alpine&lt;/code&gt; я могу использовать тэг вида &lt;a href=&quot;https://github.com/nginx/docker-nginx/blob/e4d5453581d9d3618f77c4aeccf2e6171a1cd6ff/mainline/alpine/Dockerfile&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;1.29-alpine&lt;/code&gt;&lt;/a&gt; или &lt;a href=&quot;https://github.com/nginx/docker-nginx/blob/e4d5453581d9d3618f77c4aeccf2e6171a1cd6ff/mainline/alpine/Dockerfile&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;1.29.3-alpine3.22&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-22.svg&quot; alt=&quot;ВАРИАНТЫ DOCKER ТЭГОВ&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Из примера выше где одному и тому же образу я выдал два тэга, при этом не меняя ничего в самом образе можно догадаться что разные тэги могут указывать на один и тот же образ.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker pull nginx:latest
docker pull nginx:mainline
docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;REPOSITORY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6199&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;152&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mainline&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6199&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;152&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. оба образа &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:latest&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:mainline&lt;/code&gt; идентичны и имеют один размер и дату обновления и также &lt;code class=&quot;highlighter-rouge&quot;&gt;IMAGE ID&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Mar 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-image-name-and-tag</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-image-name-and-tag</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>dns</category>
        
        
      </item>
    
      <item>
        <title>Docker Swarm - Хранилище секретов</title>
        <description>&lt;p&gt;Под секретами подразумеваются: логины, пароли, сертификаты, api ключи, ssh ключи и другие секретные данные. В основном конечно это данные необходимые для подключения к тому или иному сервису.&lt;/p&gt;

&lt;p&gt;Конечно на данный момент уже существует куча сервисов сторонних компаний для хранения секретов, например, Hashicorp Vault. Но минус таких сервисов в том, что их еще нужно развернуть и настроить.&lt;/p&gt;

&lt;p&gt;С версии Docker 1.13.0 база, которую использует Swarm лежит на диске в зашифрованном виде по умолчанию, которая находится на менеджерах кластера. По умолчанию именно тут хранится вся информация необходимая для коммуникации узлов кластера между собой. Например, tls сертификаты для узлов.&lt;/p&gt;

&lt;p&gt;В самом начале необходимо конечно же поместить секреты в саму базу и уже потом передать эти секреты сервисам и соответственно их контейнерам/задачам. Только контейнеры в сервисе могут получить доступ к этим секретам, т.е. контейнеры вне сервиса не смогут получить доступ к ним. Все эти секреты помещаются в оперативную память и доступны внутри контейнера по пути &lt;code class=&quot;highlighter-rouge&quot;&gt;/run/secrets/&amp;lt;имя&amp;gt;&lt;/code&gt;. Хранится всё в виде ключ: значение.&lt;/p&gt;

&lt;p&gt;В этом конфиг-файле для стека swarm я поместил все пароли в открытом виде. И понятное дело, что это может привести к утечке и последующему взлому, поэтому использовать такой вариант в боевой среде не рекомендуется.&lt;/p&gt;

&lt;p&gt;Также если передавать пароли через переменные при создании сервиса или контейнера, то при выполнении команды docker container inspect эти пароли будут выведены.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-secrets-concept.svg&quot;&gt;swarm-secrets-concept.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;создание-секрета&quot;&gt;Создание секрета&lt;/h3&gt;

&lt;p&gt;Для того, чтобы добавить новый секрет в кластер Swarm используется команда  &lt;code class=&quot;highlighter-rouge&quot;&gt;docker secreat create&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;вариант-1️⃣&quot;&gt;Вариант 1️⃣&lt;/h4&gt;

&lt;p&gt;Для начала создаётся файл, в который помещается секрет. После используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker secreat create&lt;/code&gt; для создания секрета со значением из файла.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim psql_user.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker secret create psql_user psql_user.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jqu&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jivxje&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;br&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После добавления секрета необходимо удалить файл.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;rm psql_user.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;вариант-2️⃣&quot;&gt;Вариант 2️⃣&lt;/h4&gt;

&lt;p&gt;Этот вариант не рекомендуется использовать потому что при использовании мониторинга с записью всех команд пользователя в консоли пароль может быть записан в систему мониторинга.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; +o &lt;span class=&quot;nb&quot;&gt;history
echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;secret&quot;&lt;/span&gt; | docker secreat create psql_pwd
&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; -o &lt;span class=&quot;nb&quot;&gt;history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-secret-creation.svg&quot;&gt;swarm-secret-creation.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;просмотр-секретов&quot;&gt;Просмотр секретов&lt;/h3&gt;

&lt;p&gt;Для того чтобы просмотреть какие секреты есть в базе используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker secret ls&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker secret ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DRIVER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UPDATED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jqu&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jivxje&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;br&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;op&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После того как секрет был создан я сам уже не смогу получить его содержимое, только сервис (контейнер) может получить к нему доступ.&lt;/p&gt;

&lt;h3 id=&quot;передача-секретов-контейнерам&quot;&gt;Передача секретов контейнерам&lt;/h3&gt;

&lt;p&gt;Для примера я создам сервис с образа postgresql и передам ему секрет &lt;code class=&quot;highlighter-rouge&quot;&gt;psql_user&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;psql_pwd&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  --name db-key &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  --secret psql_user &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  --secret psql_pwd &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  -e &lt;span class=&quot;nv&quot;&gt;POSTGRES_DB&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;app &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  -e &lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD_FILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/run/secrets/psql_pwd &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  -e &lt;span class=&quot;nv&quot;&gt;POSTGRES_USER_FILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/run/secrets/psql_user &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  postgres:16
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Проверю что контейнер сервиса запущен и работает:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps db-key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sxe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rbeew&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db-key.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В конфиг файле сервиса это передаётся как:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;3.8&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;services:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;environment:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTGRES_DB:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTGRES_USER_FILE:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/run/secrets/psql_user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTGRES_PASSWORD_FILE:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/run/secrets/psql_pwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secrets:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_pwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volumes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db_data:/var/lib/postgresql/data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secrets:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_pwd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;external:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;уже&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;создан&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;командой&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_user:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;external:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;уже&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;создан&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;командой&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;driver:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volumes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db_data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Обратите внимание если секреты уже созданы еще до создания самого сервиса необходимо указать параметр &lt;code class=&quot;highlighter-rouge&quot;&gt;external: true&lt;/code&gt;, если же секреты еще не созданы, то передаём путь к файлу со значением.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;secrets:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_pwd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;./psql_pwd.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_user:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;./psql_user.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;проверка-что-секреты-проброшены&quot;&gt;Проверка что секреты проброшены&lt;/h3&gt;

&lt;p&gt;Для проверки я переходу в псевдотерминал контейнера сервиса db и проверяю там файлы в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/run/secrets&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it db-key.1.sxe1t1rbeew0v3yml18zkgfzr bash
ls /run/secrets/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;psql_pwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;psql_user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /run/secrets/psql_pwd  
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь если я выполню команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker container inspect&lt;/code&gt; в выводе я не увижу само имя пользователя или пароль в открытом виде.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container inspect db-key.1.sxe1t1rbeew0v3yml18zkgfzr
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;			&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Env&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POSTGRES_DB=app&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POSTGRES_PASSWORD_FILE=/run/secrets/psql_pwd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POSTGRES_USER_FILE=/run/secrets/psql_user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/16/bin&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GOSU_VERSION=1.19&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;LANG=en_US.utf8&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PG_MAJOR=16&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PG_VERSION=16.11-1.pgdg13+1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PGDATA=/var/lib/postgresql/data&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 16 Mar 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-secrets</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-secrets</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Docker Swarm - Stacks</title>
        <description>&lt;p&gt;Настало время рассмотреть стеки в Docker Swarm. Благодаря стекам можно создавать группы сервисов, пописывая всю конфигурацию в compose-файле.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt; — это “пакет” (группа) из нескольких сервисов, сетей, томов, описанных в одном compose-файле.&lt;/p&gt;

&lt;h3 id=&quot;1️⃣-самый-простой-compose-файл-для-docker-swarm-stack&quot;&gt;1️⃣ Самый простой compose-файл для Docker Swarm Stack&lt;/h3&gt;

&lt;p&gt;Ниже самый банальный пример compose-файла для создания “пакета” (группы) сервисов web, api. У каждого сервиса по одной реплике задачи/контейнера.&lt;/p&gt;

&lt;p&gt;🗃️ stack1.yml&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;3.8&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;services:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ports:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;8080:80&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;api:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tipoit/py-hostname:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;driver:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы создать сервисы из файла выше использую команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack deploy -c stack1.yml mystack1&lt;/code&gt;. В итоге при выполнении этой команды Swarm создаёт:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;сервис &lt;code class=&quot;highlighter-rouge&quot;&gt;mystack_web&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;сервис &lt;code class=&quot;highlighter-rouge&quot;&gt;mystack_api&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;сеть &lt;code class=&quot;highlighter-rouge&quot;&gt;mystack1_backend&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Данная команда на вид выполнится довольно быстро, но выполнение всех необходимых задач происходит в фоном режиме.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-stack-basics.svg&quot;&gt;swarm-stack-basics.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;2️⃣-просмотр-стеков&quot;&gt;2️⃣ Просмотр стеков&lt;/h3&gt;

&lt;p&gt;Когда стек создан можно и проверить что там внутри него. Первым делом выведу список всех стеков в кластере.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SERVICES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;3️⃣-просмотр-сервисов-стека&quot;&gt;3️⃣ Просмотр сервисов стека&lt;/h3&gt;

&lt;p&gt;Для того чтобы получить список сервисов определённого стека используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack services&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack services mystack1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;REPLICAS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;itm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_api&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tipoit/py-hostname:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pz&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uz&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;4️⃣-просмотр-задачконтейнеров-стека&quot;&gt;4️⃣ Просмотр задач/контейнеров стека&lt;/h3&gt;

&lt;p&gt;Да для этого можно использовать и обычную команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service ps&lt;/code&gt;, но можно заменить её и на &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack ps&lt;/code&gt; и получить вообще все задачи всех сервисов в стеке.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack ps mystack1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sutyb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hy&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;irr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_api.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tipoit/py-hostname:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dnd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kdyct&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;qa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5️⃣-как-связаны-stack-и-service&quot;&gt;5️⃣ Как связаны &lt;code class=&quot;highlighter-rouge&quot;&gt;stack&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;service&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Как уже стало понятно из текста выше стек состоит из сервисов, стало быть сервисы из одного стека как-то связанны с ним. Во-первых, все сервисы связанны между собой, так как в примере выше используется только одна сеть &lt;code class=&quot;highlighter-rouge&quot;&gt;mystack1_backend&lt;/code&gt;, которая принадлежит стеку &lt;code class=&quot;highlighter-rouge&quot;&gt;mystack1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Каждый сервис стека после создания имеет следующую структуру имени: &lt;stack&gt;_&lt;service&gt;, например, `mystack1_api`.&lt;/service&gt;&lt;/stack&gt;&lt;/p&gt;

&lt;p&gt;Также можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service inspect&lt;/code&gt; для того чтобы узнать к какому стеку принадлежит сервис.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service inspect mystack1_web --format &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;com.docker.stack.image&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx:latest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;com.docker.stack.namespace&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mystack1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ls --filter &lt;span class=&quot;nv&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;com.docker.stack.namespace&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;mystack1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;REPLICAS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;krlkybxksuvk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_api&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tipoit/py-hostname:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mkdr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mt&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;164&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mystack&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-stack-service-linking.svg&quot;&gt;swarm-stack-service-linking.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;6️⃣-удаление-стека&quot;&gt;6️⃣ Удаление стека&lt;/h3&gt;

&lt;p&gt;Как и в случае с удалением других компонентов кластера используется опция rm, т.е. команда удаления стека выглядит так: &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack rm&lt;/code&gt;. Причём тут не надо задавать никакого подтверждения после выполнения этой команды весь стек сервисов будет удалён без единого запроса подтверждения на это, будьте осторожны.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker stack rm mystack1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Удаление стека также проходит в фоновом режиме. Так что пока стек полностью не удалится не создавайте новый с таким же именем, либо можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;--detach=false&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;6️⃣-build-не-работает&quot;&gt;6️⃣ Build не работает&lt;/h3&gt;

&lt;p&gt;При использовании docker compose в файле можно использовать параметр build, для того чтобы собрать образ для контейнера при создании контейнеров. Но в файле конфигурации для стека build использовать нельзя. При попытке это сделать вы просто получите ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;services.api.build Additional property build is not allowed&lt;/code&gt; выполняя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker stack build&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Причина на самом деле проста. Swarm — это кластер. Он может запускать сервисы на любом узле кластера, а build происходит только локально.  Значит, собирать образ внутри stack нельзя.&lt;/p&gt;

&lt;p&gt;Дело в том, что Docker не может гарантировать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;что образ соберётся одинаково на каждой ноде;&lt;/li&gt;
  &lt;li&gt;что нода, на которую Swarm поставит сервис, имеет исходники;&lt;/li&gt;
  &lt;li&gt;что билд-окружение одинаковое.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Поэтому правильнее всего будет сделать так:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Собираешь образ локально или в CI (docker build)&lt;/li&gt;
  &lt;li&gt;Загрузить его в репозиторий (docker push)&lt;/li&gt;
  &lt;li&gt;В файле stack.yml указать образ с репозитория&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Помимо build в файле конфигурации стека нельзя указывать следующее:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;depends_on&lt;/li&gt;
  &lt;li&gt;container_name&lt;/li&gt;
  &lt;li&gt;restart&lt;/li&gt;
  &lt;li&gt;links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-stack-build-forbidden.svg&quot;&gt;swarm-stack-build-forbidden.svg&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Mar 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-stack</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-stack</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Grafana - Просмотр Dashboard без авторизации</title>
        <description>&lt;p&gt;По умолчанию если вы включили авторизацию в Grafana, то только зарегистрированные пользователи могут просмотреть Dashboard. Но можно это изменить.&lt;/p&gt;

&lt;h3 id=&quot;вариант-1&quot;&gt;Вариант 1&lt;/h3&gt;

&lt;p&gt;В первом варианте мы включим анонимный доступ к Grafana и зададим роль по умолчанию для анонимных пользователей.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В файле конфигурации grafana.ini включаем анонимный доступ в целом
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/grafana/grafana.ini
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auth.anonymous&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Там же задаем роль для анонимных пользователей
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auth.anonymous&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;org_role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Viewer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем сервис grafana-server
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart grafana-server
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Переходим в настройки Dashboard и проверяем какие права у роли Viewer во вкладке Permissions
&lt;img src=&quot;/static/img/all/2025-03-12_12-17.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Открываем ссылку Dashboard в новом окне браузера инкогнито&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;вариант-2&quot;&gt;Вариант 2&lt;/h3&gt;

&lt;p&gt;Пользователь со стажем сразу заметит, что вариант выше по умолчанию даст доступ анонимным пользователем ко всем Dashboard, хоть и только на чтение. Дело в том, что роль Viewer по умолчанию имеет доступ ко всем Dashboard.&lt;/p&gt;

&lt;p&gt;Это можно решить либо отбиранием прав у роли Viewer к Dashboard, либо создать свою собственную роль и выдать права на Dashboard этой роли. Но создание своей роли к сожалению, доступно только в&lt;a href=&quot;https://grafana.com/docs/grafana/latest/introduction/grafana-enterprise/&quot;&gt;Grafana Enterprise&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Так как у меня нет лицензии на &lt;a href=&quot;https://grafana.com/docs/grafana/latest/introduction/grafana-enterprise/&quot;&gt;Grafana Enterprise&lt;/a&gt; я просто оставлю ссылку на &lt;a href=&quot;https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/#custom-roles&quot;&gt;оф документации по созданию роли.&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 12 Mar 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/grafana-anonymous-dashboard-access</link>
        <guid isPermaLink="true">http://www.tipoit.kz/grafana-anonymous-dashboard-access</guid>
        
        <category>security</category>
        
        <category>grafana</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Политика хранения инкрементных резервных копий (Retention Policy)</title>
        <description>&lt;p&gt;Для того чтобы восстановить виртуальную машину из резервной копии вам необходимо иметь полную цепочку резервных копий. Например, если удалить файл полной резервной копии, то восстановить виртуальную машину вы уже не сможете, так как нарушена цепочка резервных копий. Тоже самое касается и инкрементных резервных копий. Если вы удаляете инкрементную резервную копию, то вы сможете восстановиться только на предыдущие резервные копии. Например, у вас одна полная резервная копия и пять инкрементных, и вы решили удалить файл четвёртой инкрементной резервной копии. В таком случае вы максимум сможете восстановить состояние виртуальной машины, которое находится в третьей инкрементной резервной копии.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-FI-DP.drawio.png&quot; alt=&quot;veeam restore points chain&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Поэтому при использовании метода Forward incremental (FI) в какой-то момент вы можете заметить, что у вас больше резервных копий, чем указано в политике хранения. Дело в том, что Veeam Backup &amp;amp; Replication удалит полную цепочку, только когда последняя резервная копия в ней не устареет.&lt;/p&gt;

&lt;h3 id=&quot;почему-может-быть-больше-точек-восстановления-чем-указано-в-политике&quot;&gt;Почему может быть больше точек восстановления, чем указано в политике&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Пример:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В политике указано: хранить 4 точки восстановления.&lt;/li&gt;
  &lt;li&gt;После создания 1 VBK + 3 VIB = 4 точки.&lt;/li&gt;
  &lt;li&gt;Veeam ещё не может удалить эту цепочку — она единственная.&lt;/li&gt;
  &lt;li&gt;Создаётся 2-я полная копия, и начинается новая цепочка.&lt;/li&gt;
  &lt;li&gt;Пока новая цепочка не достигнет 4 точек восстановления, &lt;strong&gt;первая цепочка не удаляется&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;В этот момент в системе будет &lt;strong&gt;8 точек восстановления&lt;/strong&gt; (2 цепочки по 4).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟡 Это &lt;strong&gt;нормальное поведение&lt;/strong&gt;, обеспечивающее &lt;strong&gt;гарантированную возможность восстановления&lt;/strong&gt;, пока новая цепочка не станет полной.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-FI-RP.drawio.png&quot; alt=&quot;veeam retention policy&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;вывод&quot;&gt;Вывод:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Для восстановления требуется &lt;strong&gt;непрерывная цепочка&lt;/strong&gt; (VBK + все нужные VIB).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Удалять бэкапы вручную нельзя&lt;/strong&gt; — используйте правила хранения.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 30 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-fi-retention-policy</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-fi-retention-policy</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Вечное пошаговое инкрементное резервное копирование (FFI)</title>
        <description>&lt;p&gt;При использовании &lt;strong&gt;вечного пошагового инкрементного резервного копирования (Forever forward incremental)&lt;/strong&gt; вы получаете цепочку резервных копий, состоящую из полной резервной копии (&lt;code class=&quot;highlighter-rouge&quot;&gt;VBK&lt;/code&gt;) и группы инкрементальных (&lt;code class=&quot;highlighter-rouge&quot;&gt;VIB&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Процесс создания резервной копии выглядит так:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;При первом запуске создания резервной копии Veeam Backup &amp;amp; Replication создаёт &lt;strong&gt;полную резервную копию&lt;/strong&gt; и сохраняет файл в репозитории.&lt;/li&gt;
  &lt;li&gt;При каждом последующем запуске Veeam Backup &amp;amp; Replication &lt;strong&gt;копирует только те данные в VM, которые были изменены после создания последней резервной копии (полной либо инкрементной)&lt;/strong&gt;. Далее эти данные сохраняются в файле инкрементной резервной копии.&lt;/li&gt;
  &lt;li&gt;И последним шагом Veeam Backup &amp;amp; Replication проверяет все ли инкрементные резервные копии соответствуют политике хранения (retention policy) и если находит резервные копии старше политики хранения, то &lt;strong&gt;перемещает их в полную резервную копию&lt;/strong&gt;. О политике хранения (retention policy) для FFI можно почитать тут.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Подобные преобразования могут привести к фрагментации файла полной резервной копии, и вам придется запланировать &lt;a href=&quot;https://tipoit.kz/veeam-compact-full-backup&quot;&gt;операцию сжатия файла полной резервной копии&lt;/a&gt;, что добавит дополнительную нагрузку ввода-вывода на резервное хранилище.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://tipoit.kz/static/img/veeam/FFI.png&quot; alt=&quot;Вечное пошаговое инкрементное продвижение (FFI) / Forever forward incremental (FFI)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Для того чтобы создать задачу создания резервной копии используя метод постоянного инкрементного резервного копирования выполняем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В верхнем левом углу выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Backup Job &amp;gt; Virtual machine&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Во вкладке &lt;code class=&quot;highlighter-rouge&quot;&gt;Virtual machines&lt;/code&gt; добавляем виртуальные машины&lt;/li&gt;
  &lt;li&gt;Во вкладке &lt;code class=&quot;highlighter-rouge&quot;&gt;Storage&lt;/code&gt; нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Advanced&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Incremental&lt;/code&gt; и снимаем галочку &lt;code class=&quot;highlighter-rouge&quot;&gt;Create syntetic full backups&lt;/code&gt;
&lt;img src=&quot;/static/img/veeam/2025-01-25_19-41.png&quot; alt=&quot;Вечное пошаговое инкрементное продвижение (FFI) / Forever forward incremental (FFI)&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Wed, 29 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-forever-forward-incremental</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-forever-forward-incremental</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Сжатие файла полной резервной копии</title>
        <description>&lt;p&gt;Некоторые методы создания резервных копий в &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; приводят к постоянным изменениям полных резервных копий. И это может привести к неприятным последствиям. Со временем файл полной резервной копии становится слишком большим и фрагментированным. В результате чего мы получаем долгие операции записи и чтения.&lt;/p&gt;

&lt;p&gt;Для решения этой проблемы можно воспользоваться встроенной функцией для дефрагментации и сжатия полной резервной копии. В процессе выполнения сжатия Veeam Backup &amp;amp; Replication создаёт новый файл полной резервной копии и копирует все данные со старого файла, переупорядочивает их и сохраняет близко друг к другу. В результате файл дефрагментируется, уменьшается размер и увеличивается скорость записи и чтения.&lt;/p&gt;

&lt;p&gt;Чтобы включить эту функцию нужно активировать опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;Дефрагментация и сжатие полного файла резервной копии (Defragment and compact full backup file)&lt;/code&gt; в настройках задачи создания резервной копии.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-01-24_11-16.png&quot; alt=&quot;veeam Defragment and compact full backup file&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ограничения&quot;&gt;Ограничения&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Параметр «Дефрагментация и сжатие полного файла резервной копии» работает для &lt;a href=&quot;https://tipoit.kz/veeam-backup-tepes#ffi-id&quot;&gt;FFI&lt;/a&gt; или &lt;a href=&quot;https://tipoit.kz/veeam-backup-tepes#ri-id&quot;&gt;RI&lt;/a&gt; резервного копирования. По этой причине вы не должны планировать активные или синтетические полные резервные копии.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Вы можете создать вручную полную резервную копию, другая задача создания резервной копии.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Так как при сжатии создаётся новый файл резервной копии репозиторий резервных копий должен иметь достаточно свободного места на диске.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;удаление-данных-удаленных-виртуальных-машин&quot;&gt;Удаление данных удаленных виртуальных машин&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При сжатии полной резервной копии Veeam Backup &amp;amp; Replication обращает внимание на то удалялись ли какие-то виртуальные машины с задачи создания резервной копии. И если такие виртуальные машины есть, то их данные не будут копироваться в сжатую версию полной резервной копии.&lt;/p&gt;
</description>
        <pubDate>Fri, 24 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-compact-full-backup</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-compact-full-backup</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Методы (типы) резервных копий</title>
        <description>&lt;p&gt;Для создания резервной копии в &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; вы можете использовать следующие методы создания резервных копии (бэкапов):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;ffi-id&quot;&gt;&lt;strong&gt;Вечное пошаговое инкрементное продвижение (FFI) / Forever forward incremental (FFI)&lt;/strong&gt;&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/FFI.png&quot; alt=&quot;Forever forward incremental (FFI)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При использовании &lt;code class=&quot;highlighter-rouge&quot;&gt;Forever forward incremental (FFI)&lt;/code&gt; создаётся цепочка резервных копий, состоящая из первой полной резервной копии (VBK) и группы инкрементных резервных копий (VIBs).&lt;/p&gt;

&lt;p&gt;Такой метод считается максимально подходящим, когда нужно сэкономить дисковое пространство, так как вы сохраняете только одну полную резервную копию и только актуальные инкрементные резервные копии. Дело в том, что вы можете настроить срок хранения инкрементных резервных копий, всё что старше определённого периода будет удаленно автоматически. Но перед тем как удалить все старые инкрементные резервные копии Veeam Backup &amp;amp; Replication вставляет все данные с этих резервных копий в файл полной резервной копии. Подобные преобразования могут привести к фрагментации файла полной резервной копии, и вам придется запланировать &lt;a href=&quot;https://tipoit.kz/veeam-compact-full-backup&quot;&gt;операцию сжатия файла полной резервной копии&lt;/a&gt;, что добавит дополнительную нагрузку ввода-вывода на резервное хранилище.&lt;/p&gt;

&lt;p&gt;Восстановление резервной копии происходит быстрее остальных, так как всегда имеется полная резервная копия. Хотя по скорости восстановления можно сопоставить и с Forward incremental (FI).&lt;/p&gt;

&lt;p&gt;О том, как создать резервную копию используя метод &lt;code class=&quot;highlighter-rouge&quot;&gt;Forever forward incremental (FFI)&lt;/code&gt; можно почитать &lt;a href=&quot;https://tipoit.kz/veeam-forever-forward-incremental&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Подробнее о том, как происходит процесс слияния бэкапов можно прочитать &lt;a href=&quot;https://tipoit.kz/veeam-ffi-retention-policy&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/ffi-1.png&quot; alt=&quot;Forever forward incremental (FFI)&quot; /&gt;
&lt;img src=&quot;/static/img/veeam/ri-1.png&quot; alt=&quot;Forever forward incremental (FFI)&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;fi-id&quot;&gt;&lt;strong&gt;Инкрементный / Forward incremental (FI)&lt;/strong&gt;&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/FI.png&quot; alt=&quot;Forward incremental (FI)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При использовании метода &lt;code class=&quot;highlighter-rouge&quot;&gt;Forward incremental (FI)&lt;/code&gt; создаётся цепочка резервных копий, которая состоит из нескольких полных резервных копий (VBKs) и группы инкрементных (VIBs) после каждой полной резервной копии. Полные резервные копии можно создавать с помощью методов синтетического полного и активного полного резервного копирования. Благодаря нескольким полным резервным копиям этот метод считается наиболее надёжным, так как снижает вероятность полной потери цепочки резервных копий. Хотя, как по мне если всё лежит на одном жёстком диске, то его потеря приведёт к полной потери всего.&lt;/p&gt;

&lt;p&gt;Понятное дело, что такой метод требует больше дискового пространства по сравнению с другими. Также Veeam Backup &amp;amp; Replication может хранить больше точек восстановления, чем указано в политике (&lt;strong&gt;retention policy&lt;/strong&gt;) из-за специфики политики хранения &lt;code class=&quot;highlighter-rouge&quot;&gt;FI&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Метод резервного копирования &lt;code class=&quot;highlighter-rouge&quot;&gt;FI&lt;/code&gt; обеспечивает наименьшее влияние ввода-вывода на хранилище резервных копий. Однако только не в те дни, когда запланированы активные или синтетические полные резервные копии, что в принципе логично.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/ri-2.png&quot; alt=&quot;Forward incremental (FI)&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;ri-id&quot;&gt;&lt;strong&gt;Обратный инкрементный / Reverse incremental (RI)&lt;/strong&gt;&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/RI.png&quot; alt=&quot;Reverse incremental (RI)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При использовании метода &lt;code class=&quot;highlighter-rouge&quot;&gt;Reverse incremental (RI)&lt;/code&gt; создаётся цепочка резервных копий, состоящая из полной резервной копии (VBK) и группы обратных инкрементных резервных копий (VRBs).&lt;/p&gt;

&lt;p&gt;При этом полная резервная копия будет всегда одна (только если вы сами периодически не делаете полную рез копию) и также будет являться последней резервной копией. Так как тут используется всего одна полная резервная копия - это приводит к рациональному использованию дискового пространства, т.е. занимает меньше места на диске. Также, как и со всеми остальными типами инкрементные резервные копии периодически удаляются (&lt;strong&gt;retention policy&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;При использовании этого типа происходит самая большая нагрузка на операции ввода-вывода. Происходит это потому что Veeam Backup &amp;amp; Replication добавляет изменённые данные в полную резервную копию и также создаёт обратные инкрементные резервные копии. Подобные преобразования могут привести к фрагментации файла полной резервной копии, и вам придется запланировать &lt;a href=&quot;https://tipoit.kz/veeam-compact-full-backup&quot;&gt;операцию сжатия файла полной резервной копии&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Если вам необходимо восстановится на последнюю точку восстановления, то восстановление из резервной копии созданной таким образом будет самое быстрое. Но вот если вам необходимо восстановиться на более раннюю точку восстановления, то этот процесс будет самым долгим по сравнению с другими типами резервных копий.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/ri-3.png&quot; alt=&quot;Reverse incremental (RI)&quot; /&gt;
&lt;img src=&quot;/static/img/veeam/ri-4.png&quot; alt=&quot;Reverse incremental (RI)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#ffi-id&quot;&gt;Forever forward incremental&lt;/a&gt; /
&lt;a href=&quot;#fi-id&quot;&gt;Forward incremental&lt;/a&gt; /
&lt;a href=&quot;#ri-id&quot;&gt;Reverse incremental&lt;/a&gt; /&lt;/p&gt;
</description>
        <pubDate>Fri, 24 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-backup-types</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-backup-types</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Политика хранения инкрементных резервных копий (Forever Forward)</title>
        <description>&lt;p&gt;Если количество дней или количество точек восстановления файлов резервных копий, созданных с использованием типа вечное инкрементное резервное копирование превышает лимит, заданный в политике хранения, то &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; преобразует цепочку резервного копирования, чтобы освободить место для последней точки восстановления. Для этого используется следующий процесс:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; создаёт инкрементальную резервную копию и помещает её в цепочку резервных копий и замечает, что количество дней или количество точек восстановления превышает порог, заданный в политике хранения.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; повторно использует пустые блоки данных в файле полной резервной копии, чтобы включить изменения с файла инкрементальной резервной копии, который следует сразу за полной резервной копией (первый инкрементный после полного). Для этого &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; внедряет блоки данных из первого инкрементального файла резервной копии в цепочке в файл полной резервной копии. Т.е. по сути происходит слияние двух файлов.&lt;/li&gt;
  &lt;li&gt;Теперь, когда данные с инкрементной резервной копии продублированы в полной резервной копии &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; удаляет эту резервную копию (инкрементную).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://tipoit.kz/static/img/veeam/FFI.png&quot; alt=&quot;Forever forward incremental&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 20 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-ffi-retention-policy</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-ffi-retention-policy</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Как узнать таблицу раздела gpt или mbr</title>
        <description>&lt;p&gt;&lt;a href=&quot;#parted-id&quot;&gt;parted-linux&lt;/a&gt; /
&lt;a href=&quot;#gdisk-id&quot;&gt;gdisk-linux&lt;/a&gt; /
&lt;a href=&quot;#diskpart-id&quot;&gt;diskpart-windows&lt;/a&gt; /
&lt;a href=&quot;#powershell-id&quot;&gt;powershell-windows&lt;/a&gt; /&lt;/p&gt;

&lt;p&gt;Чтобы узнать какая таблица раздела используется можно использовать:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;parted-id&quot;&gt;Используя parted (Linux)&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем команду:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted -l
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;В выводе ищем наш диск и получаем таблицу раздела
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sdb:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;21.5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Table:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;gdisk-id&quot;&gt;Используя gdisk (Linux)&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем команду, указывая конкретный диск (/dev/sdb):
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo gdisk -l /dv/sdb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;В выводе получаем таблицу раздела
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fdisk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(gdisk)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;diskpart-id&quot;&gt;Используя DISKPART (Windows)&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Запускаем diskpart через командную строку:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;diskpart
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выводим список всех дисков
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;list disk
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если под GPT у диска стоит * значит используется GPT, если нет - то MBR
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Диск&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;###&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Состояние&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Размер&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Свободно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Дин&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Диск&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;В&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;465&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gбайт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kбайт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Диск&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;В&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;465&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gбайт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3072&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kбайт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Диск&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;В&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1862&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gбайт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kбайт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;powershell-id&quot;&gt;Используя PowerShell (Windows)&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем команду:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-Disk
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;В выводе получаем таблицу раздела (Partition Style)
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Friendly&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HealthStatus&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Style&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AMD-RAID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;			              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Healthy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.82&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 			&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Samsung&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SS...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;				              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Healthy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;465.76&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Samsung&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SS...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0025&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3854&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;			              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Healthy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;465.76&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Fri, 17 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/gpt-or-mbr-how-to-know</link>
        <guid isPermaLink="true">http://www.tipoit.kz/gpt-or-mbr-how-to-know</guid>
        
        <category>windows</category>
        
        <category>linux</category>
        
        <category>gpt</category>
        
        <category>mbr</category>
        
        
      </item>
    
      <item>
        <title>Docker - Загрузка образа в репозиторий</title>
        <description>&lt;p&gt;Для того чтобы загрузить свой образ в репозиторий необходимо иметь логин и пароль на репозиторий. В этой статье я буду рассматривать &lt;strong&gt;Docker Hub&lt;/strong&gt; в качестве репозитория. Первым делом необходимо зарегистрироваться на &lt;a href=&quot;https://app.docker.com/signup&quot;&gt;сайте Docker Hub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;После регистрации необходимо залогиниться на &lt;strong&gt;Docker Hub&lt;/strong&gt; со своего устройства, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;docker login&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker login
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jadqvmirmitclcmwwm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Login&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Succeeded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Выполняя команду выше, я не указывал web-адрес репозитория, потому что по умолчанию используется Docker Hub. Если вдруг нужно залогиниться на другом репозитории к самой команде добавляем url репозитория, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;docker login registry.example.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После удачной авторизации в системе создаётся файл с вашим логином и токеном для доступа к репозиторию.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /home/admin/.docker/config.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;auths&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://index.docker.io/v1/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;auth&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;amFkcXZtaXJtaXRjbGNtd3dtOmphZHbUBrdmhydy5jb20=&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Поэтому после того как вы выполнили загрузки образа в репозиторий лучше выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;docker logout&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-24.svg&quot; alt=&quot;ЗАГРУЗКА ОБРАЗА В DOCKER HUB&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;одинаковый-namespace&quot;&gt;Одинаковый NAMESPACE&lt;/h3&gt;

&lt;p&gt;В &lt;a href=&quot;https://www.tipoit.kz/docker-image-name-and-tag&quot;&gt;этой статье&lt;/a&gt; я расписывал как происходит наименование образов в Docker. И очень важно знать, что образ, который вы собираетесь отправить в репозиторий &lt;strong&gt;должен иметь такой же NAMESPACE, как и ваше имя пользователя&lt;/strong&gt; в репозитории. Но это не всегда так, некоторые репозитории не привязаны к этому, но Docker Hub требует именно этого.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ynwasg/build&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                      &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;235&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;124&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker push ynwasg/build12
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;refers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/ynwasg/build&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;does&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exist:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ynwasg/build&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь же я добавлю новый тэг для этого образа и &lt;code class=&quot;highlighter-rouge&quot;&gt;NAMESPACE&lt;/code&gt; задам такой же как имя моего пользователя на Docker Hub, после чего попробую еще раз сделать &lt;code class=&quot;highlighter-rouge&quot;&gt;docker push&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image tag ynwasg/build12:1.2 jadqvmirmitclcmwwm/build12:1.1
docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;jadqvmirmitclcmwwm/build&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;235&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hours&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;124&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker push jadqvmirmitclcmwwm/build12:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;refers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/jadqvmirmitclcmwwm/build&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pushed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;755&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;870&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pushed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;235&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;81929876&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mounted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;library/python&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ba&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;402&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;61141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mounted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;library/python&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aec&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mounted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;library/python&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;97&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fe:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mounted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;library/python&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;digest:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;768&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2220&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4934577&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;192776&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3728&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5824&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1979&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1573&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь, когда &lt;strong&gt;имя моего пользователя на Docker Hub и NAMESPACE образа совпадают&lt;/strong&gt; образ удачно загрузился в репозиторий.&lt;/p&gt;

&lt;h3 id=&quot;как-работает-docker-push&quot;&gt;Как работает docker push&lt;/h3&gt;

&lt;p&gt;При вызове команды docker push происходит следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверка залогинен ли пользователь в репозитории&lt;/li&gt;
  &lt;li&gt;Проверка существующих слоёв в репозитории&lt;/li&gt;
  &lt;li&gt;Отправка только новых слоёв в репозиторий&lt;/li&gt;
  &lt;li&gt;Добавление или обновление тэга образа&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-23.svg&quot; alt=&quot;ПРОЦЕСС DOCKER PUSH&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-push</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-push</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>dns</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Активное полное резервное копирование</title>
        <description>&lt;p&gt;Если вам нужно создавать полные резервные копии по расписанию, например, каждое воскресенье, то можно воспользоваться &lt;strong&gt;активным полным резервным копированием&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Активное полное резервное копирование&lt;/strong&gt; создаёт полную резервную копию виртуальной машины, таже как при первом запуске задачи создания резервной копии.&lt;/p&gt;

&lt;p&gt;При создании полной резервной копии цепочка резервных копий сбрасывается. Т.е. все последующие инкрементные резервные копии будут использовать файл активной полной резервной копии как отправную точку. Предыдущий файл полной резервной копии будет хранится в репозитории пока соответствует политике хранения.&lt;/p&gt;

&lt;p&gt;Для того чтобы включить &lt;strong&gt;активное полное резервное копирование&lt;/strong&gt; активируем одноименную галочку в расширенных настройках задачи создания резервной копии. Там же можно настроить расписание.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-01-29_23-27.png&quot; alt=&quot;Active Full Backup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Наверное, вы заметили, что в расписании нет времени, когда запускать &lt;strong&gt;активное полное резервное копирование&lt;/strong&gt;. Дело в том, что время запуска берётся из самой задачи создания резервной копии. Если же сама задача создания резервной копии отключена, то и &lt;strong&gt;активное полное резервное копирование запущенно не будет&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Если на время запуска &lt;strong&gt;активного полного резервного копирования&lt;/strong&gt; назначен запуск создания инкрементной резервной копии, то будет запущен только процесс создания активного полного резервного копирования.&lt;/p&gt;

&lt;p&gt;Важное замечание если расписание вашей основной задачи создания резервной копии не совпадает с &lt;strong&gt;активным полным резервным копированием,&lt;/strong&gt; то активное полное резервное копирование запущенно не будет. Например, сама задача запускается каждый понедельник, а активное полное резервное копирование вы настроили на вторник.&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-active-full-backup</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-active-full-backup</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Синтетическое полное резервное копирование</title>
        <description>&lt;p&gt;Если вы читали мои предыдущие статьи про Veeam, то вы скорее всего знакомы со словами синтетическое полное резервное копирование. Может так произойти что вы хотите создать полную резервную копию, но так как этот процесс занимает много времени вы отказываетесь от этой идеи. В качестве альтернативы можно создавать синтетические полные резервные копии.&lt;/p&gt;

&lt;p&gt;Синтетическая полная резервная копия идентична простой полной резервной копии. При выполнении задачи создания синтетической полной резервной копии также создаётся файл VBK, в котором содержится все данные виртуальной машины. Разница заключается лишь в способе извлечения данных с виртуальной машины:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Когда создается полная резервная копия Veeam Backup &amp;amp; Replication извлекает данные с самого хранилища данных (datastore), далее сжимает и дедуплицирует ее, а затем записывает всё в файл VBK в репозитории резервных копий.&lt;/li&gt;
  &lt;li&gt;Когда создается синтетическая полная резервная копия Veeam Backup &amp;amp; Replication не извлекает данные с самого хранилища данных (datastore). Вместо этого он обращается к цепочке существующих резервных копий, ведь по сути там те же данные. Первым делом он получает все данные с последней полной резервной копии и дальше из цепочки последующих инкрементных файлов резервных копий в репозитории. После происходит процесс объединения этих данных в новый файл полной резервной копии. В результате вы получаете те же данные что при создании полной резервной копии.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Процесс создания синтетической полной резервной копии имеет некоторые преимущества:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Не используется сеть, что и не приводит к нагрузке на сеть&lt;/li&gt;
  &lt;li&gt;Не происходит нагрузка на боевую среду, так как все файлы лежат в репозитории резервный копий&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Важно понимать, что при создании синтетической полной резервной копии цепочка резервных копий сбрасывается. Т.е. все последующие инкрементные резервные копии будут использовать файл синтетической полной резервной копии как отправную точку. Предыдущий файл полной резервной копии будет хранится в репозитории пока соответствует политике хранения.&lt;/p&gt;

&lt;p&gt;Чтобы включить создание синтетической полной резервной копии вам необходимо в задачи создания резервной копии активировать галочку &lt;strong&gt;Периодически создавайте синтетические полные резервные копии (Create synthetic full backups periodically)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-01-29_23-15.png&quot; alt=&quot;Create synthetic full backups periodically&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 11 Jan 2025 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-synthetic-full-backup</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-synthetic-full-backup</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Variable MINIO_VOLUMES not set in /etc/default/minio</title>
        <description>&lt;p&gt;Ошибка может появится даже если вы всё сделали правильно, а именно:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Добавили MINIO_VOLUMES в файл /etc/default/minio&lt;/li&gt;
  &lt;li&gt;Дали полные права пользователю minio-user на /etc/default/minio и на директории с данными&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;настраиваем-selinux&quot;&gt;Настраиваем selinux&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала просто проверим что если отключить selinux, то сервис запустится.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setenforce 0
sudo systemctl start minio
sudo systemctl status minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Active:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(running)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setenforce 1
sudo systemctl stop minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь собственно настроим selinux, чтобы этот всемогущий демон дал доступ нашему сервису к файлу /etc/default/minio.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверим что у нас есть на minio
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /var/log/audit/audit.log | grep minio
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;type=AVC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg=audit(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1735194495.552&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4448&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;avc:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;comm=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;systemd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/etc/default/minio&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dev=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sdb1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ino=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;457586&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scontext=system_u:system_r:init_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tcontext=unconfined_u:object_r:user_tmp_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tclass=file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;permissive=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверим какое правила можно создать
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install policycoreutils-python-utils
sudo audit2allow -a
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;init_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user_tmp_t:file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём правило и применяем его
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo grep init_t /var/log/audit/audit.log | sudo audit2allow -M init_t
sudo semodule -i init_t.pp
sudo systemctl start minio
sudo systemctl status minio
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Active:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(running)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 26 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-var-MINIO-VOLUMES-not-set</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-var-MINIO-VOLUMES-not-set</guid>
        
        <category>minio</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Docker warm - Что будет если хост в кластере отключился?</title>
        <description>&lt;p&gt;Я конечно надеюсь, что вы набрели на эту статью случайно, а не по необходимости. Лично я пишу эту статью просто для тестирования что произойдёт.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/swarm-failover-01-initial.svg&quot; alt=&quot;swarm-failover-01-initial&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Для теста я просто &lt;strong&gt;выключу хост c-stream-9-vm9&lt;/strong&gt; и посмотрю, что произойдёт.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker node ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ojbmchzvipwmlwsssx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ctrxyq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Leader&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sho&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;740&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bdze&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xcspm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mzv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reachable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hrgh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jdlqlzijvhjdig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Unreachable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker node ls&lt;/code&gt; ожидаемо показала, что &lt;strong&gt;хост c-stream-9-vm9 недоступен&lt;/strong&gt;. Теперь я проверю что там с контейнерами сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-failover-02-node-down.svg&quot;&gt;swarm-failover-02-node-down.svg&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uwvqk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yhysu&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vqh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;oqv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;koox&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pe&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fjbiaqc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shutdown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;А вот тут возможно для кого-то неожиданный исход. Так как контейнер стал недоступным вместе с хостом &lt;strong&gt;Swarm это обнаружил и понял, что сейчас активны только две реплики из трёх, и понял, что нужно создать недостающую третью&lt;/strong&gt;. В итоге на хосте &lt;code class=&quot;highlighter-rouge&quot;&gt;c-stream-9-vm4&lt;/code&gt; теперь размещаются 2 контейнера.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-failover-03-auto-recovery.svg&quot;&gt;swarm-failover-03-auto-recovery.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Теперь я включу хост &lt;code class=&quot;highlighter-rouge&quot;&gt;c-stream-9-vm9&lt;/code&gt; и проверю что произойдёт.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker node ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ojbmchzvipwmlwsssx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ctrxyq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Leader&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sho&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;740&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bdze&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xcspm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mzv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reachable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;28.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hrgh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jdlqlzijvhjdig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reachable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Тут ничего необычного, &lt;strong&gt;хост стал доступен&lt;/strong&gt;. Теперь проверю что там с контейнерами.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uwvqk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yhysu&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vqh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;oqv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;koox&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pe&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fjbiaqc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shutdown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;А вот тут не совсем очевидный вывод. Да хост стал доступен, &lt;strong&gt;но вот контейнер не переехал на восстановленный хост&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-failover-04-node-recovered.svg&quot;&gt;swarm-failover-04-node-recovered.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;почему-контейнер-не-вернулся-на-восстановленный-хост&quot;&gt;Почему контейнер не вернулся на восстановленный хост?&lt;/h3&gt;

&lt;p&gt;Разберём подробно, &lt;strong&gt;почему контейнер (“task”) не “переехал” обратно&lt;/strong&gt; на восстановившийся хост, и почему это — нормальное, осознанное поведение Swarm.&lt;/p&gt;

&lt;p&gt;Сам &lt;strong&gt;Swarm&lt;/strong&gt; работает немного по-другому. &lt;strong&gt;Swarm не хранит “привязку” контейнера к конкретному хосту как обязательную&lt;/strong&gt;. Его главная задача — это поддержание реплики. Когда я отключил хост &lt;code class=&quot;highlighter-rouge&quot;&gt;c-stream-9-vm9&lt;/code&gt; он понял, что реплика 2/3 после чего создал недостающую реплику, статус теперь 3/3. После этого ситуация считается решенной и даже после включения хоста реплика остаётся 3/3, соответственно ничего делать и не нужно.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-failover-05-explanation.svg&quot;&gt;swarm-failover-05-explanation.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;можно-ли-заставить-swarm-переселить-контейнеры-обратно&quot;&gt;Можно ли заставить Swarm “переселить” контейнеры обратно?&lt;/h3&gt;

&lt;p&gt;Да, но &lt;strong&gt;только вручную&lt;/strong&gt; или при обновлении сервиса:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Способ 1 — форсировать обновление
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service update --force web
docker service ps web
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kvxwxglflhd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bxcmp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;qbkd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Способ 2 — удалить старый контейнер вручную, Swarm создаст новый — возможно уже на свободной vm9
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker rm &amp;lt;container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 21 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-what-would-happen-host-disconnected</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-what-would-happen-host-disconnected</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Docker Swarm - overlay-сети</title>
        <description>&lt;p&gt;&lt;strong&gt;Overlay-сеть&lt;/strong&gt; — это виртуальная распределённая сеть (VXLAN), которая соединяет контейнеры между &lt;strong&gt;разными хостами Swarm&lt;/strong&gt;. Как и в обычном Docker по умолчанию создаётся сеть ingress для Swarm, является сетью по умолчанию для всех сервисов. Также создаётся мост docker_gwbridge для Swarm.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker_gwbridge&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bridge&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kj&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mqhyy&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nji&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ingress&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-network-01-default.svg&quot;&gt;swarm-network-01-default.svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;То есть контейнеры на хостах &lt;code class=&quot;highlighter-rouge&quot;&gt;vm4&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;vm8&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;vm9&lt;/code&gt; могут видеть друг друга по внутренним IP,&lt;br /&gt;
как будто находятся в одной LAN.&lt;/p&gt;

&lt;p&gt;Для детального рассмотрения overlay-сетей я создам &lt;strong&gt;два сервиса (backend и frontend)&lt;/strong&gt;, подключу их к &lt;strong&gt;разным overlay-сетям&lt;/strong&gt;, и покажу, как между ними происходит взаимодействие.&lt;/p&gt;

&lt;h3 id=&quot;1️⃣создание-двух-overlay-сетей&quot;&gt;1️⃣Создание двух overlay-сетей&lt;/h3&gt;

&lt;p&gt;Для этого используется уже знакомая команда docker network create, только с опцией –driver.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network create -d overlay frontend_net
docker network create -d overlay backend_net
docker network ls | grep net
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;85&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;twu&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uuvm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend_net&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;qtgx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;frontend_net&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;2️⃣docker-образ-приложения-api&quot;&gt;2️⃣Docker образ приложения api&lt;/h3&gt;

&lt;p&gt;Пример будет состоять из двух сервисов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt; — простой backend на Python Flask&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; — Nginx, который обращается к backend_net через внутреннюю сеть&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📜 &lt;code class=&quot;highlighter-rouge&quot;&gt;api.py&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-py highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;flask&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Flask&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Flask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__name__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;@app.route&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;hello&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Hello from backend via overlay network!&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;0.0.0.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;📜 &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile.api&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;FROM python:3.12-alpine&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;WORKDIR /app&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;COPY api.py .&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;RUN pip install flask&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;CMD [&quot;python&quot;, &quot;api.py&quot;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь имея необходимые файлы для сервиса api нужно собрать образ, из которого в дальнейшем будут созданы контейнеры для сервиса. Если непонятно что за сборка образа почитайте &lt;a href=&quot;https://www.tipoit.kz/docker-dockerignore-file&quot;&gt;это&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t myapi:1.0 -f Dockerfile.api .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;3️⃣docker-образ-web&quot;&gt;3️⃣Docker образ web&lt;/h3&gt;

&lt;p&gt;📜 &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;listen&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;80;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;proxy_pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http://api:5000;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;имя&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервиса&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DNS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;📜 &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile.web&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;FROM nginx:alpine&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;COPY nginx.conf /etc/nginx/nginx.conf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь имея необходимые файлы для сервиса web нужно собрать образ, из которого в дальнейшем будут созданы контейнеры для сервиса. Если непонятно что за сборка образа почитайте &lt;a href=&quot;https://www.tipoit.kz/docker-dockerignore-file&quot;&gt;это&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t mynginx:1.0 -f Dockerfile.web .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;4️⃣развёртывание-сервиса-api&quot;&gt;4️⃣Развёртывание сервиса api&lt;/h3&gt;

&lt;p&gt;Теперь разверну сервис api из образа myapi:1.0 с двумя репликами, где также укажу созданную ранее сеть backend_net.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create --name api --network backend_net --replicas 2 myapi:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но тут я получу ошибку 2/2: No such image: myapi:1.0, потому что так как у меня три узла в кластере образ этот должен быть на всех узлах. Поэтому если вы используете в боевой среде Swarm, то заливайте свои образы в репозиторий и скачивайте их оттуда.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-registry-01-problem.svg&quot;&gt;swarm-registry-01-problem.svg&lt;/a&gt;
&lt;a href=&quot;/static/img/k8s/swarm-registry-02-solution.svg&quot;&gt;swarm-registry-02-solution.svg&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps api
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;zre&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;glm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;api.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myapi:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pgloedqlhxoa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;api.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myapi:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;5️⃣развёртывание-сервиса-web&quot;&gt;5️⃣Развёртывание сервиса web&lt;/h3&gt;

&lt;p&gt;Теперь разверну сервис api из образа mynginx:1.0 с двумя репликами, где также укажу созданную ранее сеть backend_net и frontend_net. Почему сразу две сети? Потому что по умолчанию сеть frontend_net не имеет доступ к сети backend_net. Поэтому если я создам сервис только с сетью frontend_net он не получить доступ к контейнерам сервиса api.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-multinetwork-01-problem.svg&quot;&gt;swarm-multinetwork-01-problem.svg&lt;/a&gt;
&lt;a href=&quot;/static/img/k8s/swarm-multinetwork-02-solution.svg&quot;&gt;swarm-multinetwork-02-solution.svg&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create --name web --network frontend_net --network backend_net -p 8080:80 mynginx:1.0
docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;669&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iabwy&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mynginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Hello&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backend&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;via&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;network!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;6️⃣проверка-dns-внутри-сетей&quot;&gt;6️⃣Проверка DNS внутри сетей&lt;/h3&gt;

&lt;p&gt;Можно проверить что контейнер сервиса web имеет доступ к контейнеру сервиса api.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;docker ps | grep web | head -1 | awk &lt;span class=&quot;s1&quot;&gt;'{print $1}'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; ping api
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;7️⃣проверка-сети-внутри-контейнера&quot;&gt;7️⃣Проверка сети внутри контейнера&lt;/h3&gt;

&lt;p&gt;Теперь я проверю какая подсеть у каждой &lt;strong&gt;overlay сети&lt;/strong&gt;, которую я создал и как она привязана внутри контейнера.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/docker-swarm-overlay-networks.svg&quot;&gt;docker-swarm-overlay-networks.svg&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker network inspect -f &lt;span class=&quot;s2&quot;&gt;&quot;{{.IPAM.Config}}&quot;&lt;/span&gt; frontend_net
docker network inspect -f &lt;span class=&quot;s2&quot;&gt;&quot;{{.IPAM.Config}}&quot;&lt;/span&gt; backend_net
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;10.0.3.0/24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;10.0.3.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;map[]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;10.0.4.0/24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;10.0.4.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;map[]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если вывести список всех интерфейсов контейнера для сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt; у него будет три интерфейса, конкретно сейчас меня интересует интерфейс с ip-адресом в диапазоне &lt;code class=&quot;highlighter-rouge&quot;&gt;10.0.4.0/24&lt;/code&gt;, так как это диапазон сети &lt;code class=&quot;highlighter-rouge&quot;&gt;backend_net&lt;/code&gt; и именно это сеть используется для сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;api.1.pmo73in1u8ik4lky6xtjtcsqv ifconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;encap:Ethernet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HWaddr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;addr:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.40&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bcast:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.255&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mask:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;api.2.nsmhjy7akum2w5qkrwkmhfub2 ifconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;encap:Ethernet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HWaddr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;addr:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.41&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bcast:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.255&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mask:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Получается, что благодаря тому, что сеть &lt;code class=&quot;highlighter-rouge&quot;&gt;backend_net&lt;/code&gt; была создана на всех хостах кластера при этом еще и добавлена в каждый контейнер сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt; все контейнеры внутри этой сети могут общаться друг с другом.&lt;/p&gt;

&lt;p&gt;Но у меня еще остался не проверенным контейнер сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt;, проделаю тоже самое и с ним.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;web.1.vsyyj80munjaa7fce8xowhz6k ifconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;encap:Ethernet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HWaddr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;addr:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bcast:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.255&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mask:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Link&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;encap:Ethernet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HWaddr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:D&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;addr:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.210&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bcast:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.255&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mask:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Так как у контейнера &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; помимо сети &lt;code class=&quot;highlighter-rouge&quot;&gt;frontend_net&lt;/code&gt; есть еще и &lt;code class=&quot;highlighter-rouge&quot;&gt;backend_net&lt;/code&gt;, благодаря чему контейнеры сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; могут обращаться к контейнерам сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;доступ-из-вне&quot;&gt;🎱Доступ из вне&lt;/h3&gt;

&lt;p&gt;Контейнер web.1 размещён на хосте c-stream-9-vm4 с ip-адресом 172.31.144.9. Получается, что я могу обратиться по адресу http://172.31.144.9:8080 и получить ответ от контейнера web.1. Всё так, и тут нет ничего необычного. Но вот что тут необычного я также могу обратиться по любому другому ip-адресу хоста в кластере и также получить доступ к контейнеру web.1, например, http://172.31.144.22:8080.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-ingress-01-concept.svg&quot;&gt;swarm-ingress-01-concept.svg&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;итог&quot;&gt;Итог&lt;/h3&gt;

&lt;p&gt;Overlay-сети в Swarm позволяют изолировать и при этом соединять сервисы на разных нодах.&lt;br /&gt;
Один сервис может быть в нескольких overlay-сетях и выполнять роль “моста” между ними — как &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; в моём примере.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/static/img/k8s/swarm-multinetwork-07-summary.svg&quot;&gt;swarm-multinetwork-07-summary.svg&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 21 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-overlay-networks</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-overlay-networks</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Docker Swarm - Твой первый нормальный кластер</title>
        <description>&lt;p&gt;В этой статье я рассмотрю, как создать кластер Docker Swarm из трёх хостов. Я буду использовать три виртуальных хоста на CentOS Stream 9. У хостов следующие ip-адреса:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-cluster-setup.svg&quot; alt=&quot;docker-swarm-cluster-setup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Первым делом необходимо проверить что на всех хостах стоит Docker и самое главное одинаковой версии. В дальнейшем при обновлении Docker старайтесь поддерживать одну и ту же версию на всех хостах кластера. Если Docker не стоит, то устанавливаем по &lt;a href=&quot;https://docs.docker.com/engine/install/&quot;&gt;инструкции&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker info
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;активация-swarm&quot;&gt;Активация Swarm&lt;/h3&gt;

&lt;p&gt;Выполняю команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker swarm init&lt;/code&gt; на c-stream-9-vm4, после выполнения команды хост также станет лидером менеджеров, которые управляют кластером. Т.е. для управления кластером и создания сервисов хост, на котором вы выполняете команды должен быть менеджером кластера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker swarm init
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;initialized:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(ojbmchzvipwmlwsssx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ctrxyq)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;manager.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;To&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;worker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;following&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--token&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SWMTKN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rvntthomlpuvdsd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cxckzku&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;njkei&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fyqrxntcmcq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;119&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xhm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uyo&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tangzn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2377&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Обратите внимание что команды также вывела ip-адрес и порт, по которому другие хосты в кластере будут обращаться к c-stream-9-vm4. Если вдруг у вас несколько ip-адресов, то можно добавить опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--advertise-addr 192.168.1.1&lt;/code&gt;. Соответственно все узлы в кластере должны иметь возможность обращаться друг к другу. Вот минимальный список портов, которые должны быть открыт между хостами кластера:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/swarm-firewall.svg&quot; alt=&quot;swarm-firewall&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Поэтому на каждом хосте я выполняю команды для настройки локального файрволла:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --permanent --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;2377/tcp
sudo firewall-cmd --permanent --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;7946/tcp
sudo firewall-cmd --permanent --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;7946/udp
sudo firewall-cmd --permanent --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;4789/udp
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;добавление-новых-узлов-в-кластер&quot;&gt;Добавление новых узлов в кластер&lt;/h3&gt;

&lt;p&gt;После выполнения команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker swarm init&lt;/code&gt; кластер уже создан и в нём всего один хост, теперь используя вывод команды добавляем в кластер оставшиеся два хоста, по умолчанию статус у них будет worker.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-join-workers.svg&quot; alt=&quot;docker-swarm-join-workers&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker swarm join --token SWMTKN-1-1t2rvntthomlpuvdsd7cxckzku6njkei32fyqrxntcmcq119p7-9xhm3uyo5t2uv1tangzn4fc5y 172.31.144.9:2377
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;joined&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;worker.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;На менеджере (c-stream-9-vm4) выполняю команду для проверки узлов в кластере:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker node ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AVAILABILITY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MANAGER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENGINE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VERSION&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ojbmchzvipwmlwsssx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ctrxyq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Leader&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sho&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;740&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bdze&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xcspm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mzv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                          &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hrgh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jdlqlzijvhjdig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                          &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода видно, что сейчас только один MANAGER в кластере и если я попытаюсь выполнить ту же команду на другом узле я получу ошибку: This node is not a swarm manager.&lt;/p&gt;

&lt;h3 id=&quot;смена-роли-с-worker-на-manager&quot;&gt;Смена роли с Worker на Manager&lt;/h3&gt;

&lt;p&gt;Логично что иметь кластер всего с одним Manager не очень-то и безопасно, поэтому я изменю роль оставшимся двум узлам с просто Worker на Manager.&lt;/p&gt;

&lt;p&gt;Для этого на Manager узле я выполняю:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker node update --role manager c-stream-9-vm8
docker node update --role manager c-stream-9-vm9
docker node ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AVAILABILITY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MANAGER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENGINE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VERSION&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ojbmchzvipwmlwsssx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ctrxyq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Leader&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sho&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;740&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bdze&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xcspm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mzv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reachable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;28.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hrgh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jdlqlzijvhjdig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reachable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-manager-status.svg&quot; alt=&quot;docker-swarm-manager-status&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Если же вдруг еще до входа в кластер понятно, что этот хост должен быть MANAGER можно на уже имеющемся MANAGER хосте получить токен для входа в кластер уже со статусом MANAGER, и дальше добавлять новые хосты в кластер уже с ролью MANAGER.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker swarm join-token manager
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;To&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;following&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--token&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SWMTKN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rvntthomlpuvdsd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cxckzku&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;njkei&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fyqrxntcmcq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;119&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7-26&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ztp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rlpq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;byyvymgp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;447&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2377&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;как-работает-выбор-лидера&quot;&gt;Как работает выбор лидера&lt;/h3&gt;

&lt;p&gt;Swarm использует &lt;strong&gt;алгоритм Raft&lt;/strong&gt; для консенсуса между менеджерами:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-leader-election.svg&quot; alt=&quot;docker-swarm-leader-election&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;создание-service&quot;&gt;Создание Service&lt;/h3&gt;

&lt;p&gt;Теперь всё готов для того, чтобы я создал первый сервис в кластере. Я создам веб сервис из образа Nginx и укажу три реплики. Так как у меня три хоста в кластере, каждый хост будет размещать по одному контейнеру. В таком случае при неисправности какого-то хоста мой веб сервис будет продолжать работать.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker  service  create  --replicas  3  --name  web  -p  80:80  nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;overall&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;progress:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==================================================&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==================================================&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==================================================&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;verify:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;converged&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uwvqk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yhysu&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vqh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zig&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fjbiaqc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода команд видно, что при создании сервиса Docker Swarm создал по одном контейнеру на каждом хосте кластера.&lt;/p&gt;
</description>
        <pubDate>Sat, 21 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-multinode-cluster</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-multinode-cluster</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Docker - Активация Swarm</title>
        <description>&lt;p&gt;Первое что необходимо сделать при использовании Swarm с Docker это активировать Swarm, после установки самого Docker конечно.&lt;/p&gt;

&lt;p&gt;Для начала проверяем активирован ли Swarm (по умолчанию отключен) выполнив команду:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker info
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Swarm:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inactive&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для активации выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker swarm init&lt;/code&gt;.  Вывод команды должен быть следующий:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;initialized:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(uzypzuxnb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bwte&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;crmsm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;n)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;manager.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;To&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;worker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;following&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--token&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SWMTKN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1-422&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;oqh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;omvvsbjwdt&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;qxiyufm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zxa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;768&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sxow&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;qkmxcc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wgt&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sbq&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lijyrnryn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xdqzncnd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2377&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;To&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swarm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;join-token&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;manager'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;follow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;instructions.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;зачем-docker-swarm-init&quot;&gt;Зачем docker swarm init&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;docker swarm init&lt;/code&gt; — это &lt;strong&gt;первая команда&lt;/strong&gt;,  с которой начинается развёртывание &lt;em&gt;кластерной оркестрации Docker Swarm&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker swarm init&lt;/code&gt; запускает &lt;em&gt;демон Swarm Mode&lt;/em&gt; на текущем Docker-хосте&lt;br /&gt;
и делает его &lt;strong&gt;менеджером (Manager Node)&lt;/strong&gt;. &lt;strong&gt;Manager Node может управлять кластером&lt;/strong&gt; и запускать контейнеры.&lt;/p&gt;

&lt;p&gt;Помимо это для этого менеджера выпускается сертификат и токен, который может быть использован в будущем для кластера (несколько Docker Swarm). Используя токен вы можете подключать другие узлы в кластер Docker Swarm.&lt;/p&gt;

&lt;p&gt;Также создаётся новая сеть Swarm (internal), благодаря которой контейнеры, размещённые на разных хостах, могут общаться друг с другом.&lt;/p&gt;

&lt;p&gt;Помимо всего этого Manager Node создаёт &lt;strong&gt;встроенную распределённую базу данных&lt;/strong&gt;&lt;br /&gt;
на основе алгоритма &lt;strong&gt;Raft consensus&lt;/strong&gt;. Это база хранит всё состояние кластера, автоматически синхронизируется с другими узлами Manager Node, обеспечивая консистентность (согласованность) данных. При этом не используется ни etcd, ни Consul, и конечно же эта база шифруется.&lt;/p&gt;

&lt;h3 id=&quot;однонодовый-docker-swarm&quot;&gt;Однонодовый Docker Swarm&lt;/h3&gt;

&lt;p&gt;В боевой среде конечно необходимо использовать несколько хостов, но так это ознакомительная статья тут я создам кластер с одной нодой. В другой статье я распишу как сделать правильно.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Сперва проверю какие хосты (node) вообще сейчас в кластере. Лидер в кластере может быть только один
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker node ls
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AVAILABILITY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MANAGER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENGINE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VERSION&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uzypzuxnb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bwte&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;crmsm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ready&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Leader&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;25.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Как я и сказал кластер будет с одним хостом, который у меня также является менеджером. Когда есть хоть один хост в кластере я могу начинать разворачивать сервисы (контейнеры).&lt;/p&gt;

&lt;h3 id=&quot;создание-сервиса-с-одной-репликой&quot;&gt;Создание сервиса с одной репликой&lt;/h3&gt;

&lt;p&gt;В Docker Swarm &lt;strong&gt;сервис (service)&lt;/strong&gt; — это основной объект кластера, описывающий что запустить и в каком количестве. По сути это тот же контейнер, но только не один, а группа контейнеров, управляемая Docker Swarm.&lt;/p&gt;

&lt;p&gt;Для примера я создам &lt;strong&gt;сервис web с образа nginx&lt;/strong&gt;, команда создания будет очень напоминать команду создания контейнера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create --name web -p 80:80 nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После выполнения команды проверяю что сервис создался и контейнер запущен.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;REPLICAS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lebyjs&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;me&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Важная колонка в выводе выше это REPLICAS, которая у меня равно 1/1. Как я писал выше сервис — это группа контейнеров и задача Docker Swarm в том, чтобы активных контейнеров было столько сколько требуется, и, если что-то происходит с контейнеров Docker Swarm сам пересоздаёт его чтобы добиться установленного количества запущенных контейнеров. Да пример с одним контейнером может и не очень вписывается, но сейчас про базовый минимум, дальше больше.&lt;/p&gt;

&lt;p&gt;Команда docker service ls выводит только сервисы, но не контейнеры чтобы просмотреть контейнеры используется &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service ps servicename&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESIRED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CURRENT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;po&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jopd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;🔍 Разбор колонок&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Колонка&lt;/th&gt;
      &lt;th&gt;Значение&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;ID&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Уникальный идентификатор &lt;em&gt;task&lt;/em&gt; внутри Swarm.  Это не ID контейнера, а объект уровня оркестрации. Например: &lt;code class=&quot;highlighter-rouge&quot;&gt;po9wm3t0jopd&lt;/code&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;NAME&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Имя задачи в формате &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;service&amp;gt;.&amp;lt;replica&amp;gt;&lt;/code&gt;.  Здесь &lt;code class=&quot;highlighter-rouge&quot;&gt;web.1&lt;/code&gt; означает первую реплику сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt;. Если бы &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service scale web=3&lt;/code&gt;, появились бы &lt;code class=&quot;highlighter-rouge&quot;&gt;web.2&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;web.3&lt;/code&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;IMAGE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Образ, из которого создаётся контейнер &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx:latest&lt;/code&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;NODE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Имя узла (нодa), где запущен этот task - &lt;code class=&quot;highlighter-rouge&quot;&gt;c-stream-9-vm4&lt;/code&gt;, то есть менеджерская (или воркерская) нода кластера.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;DESIRED STATE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Желаемое состояние (desired state), которое Swarm хранит в своей Raft-базе. Обычно бывает:  • &lt;code class=&quot;highlighter-rouge&quot;&gt;Running&lt;/code&gt; — контейнер должен работать;  • &lt;code class=&quot;highlighter-rouge&quot;&gt;Shutdown&lt;/code&gt; — контейнер должен быть остановлен.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;CURRENT STATE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Фактическое состояние на данный момент. Например: &lt;code class=&quot;highlighter-rouge&quot;&gt;Running 21 minutes ago&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Preparing&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Starting&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Shutdown&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Failed&lt;/code&gt;, и т.д. Swarm сам старается привести &lt;code class=&quot;highlighter-rouge&quot;&gt;CURRENT STATE&lt;/code&gt; к &lt;code class=&quot;highlighter-rouge&quot;&gt;DESIRED STATE&lt;/code&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;ERROR&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Сообщение об ошибке, если задача не смогла стартовать (например, ошибка сети, образа, volume и т.д.). Если пусто, значит всё хорошо.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PORTS&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Показывает, какие порты опубликованы (для ingress load balancer).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;создание-сервиса-с-несколькими-репликами&quot;&gt;Создание сервиса с несколькими репликами&lt;/h3&gt;

&lt;p&gt;Если необходимо создать новый сервис с несколькими репликами, то используется уже знакомая команда docker service create, только с опцией –replicas&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service create --replicas 3 --name web -p 80:80 nginx 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но в моём случае сервис уже создан и мне необходимо обновить его конфигурацию используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service scale&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service scale &lt;span class=&quot;nv&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3
docker service ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;REPLICAS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IMAGE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PORTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lebyjs&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;me&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ek&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stzbp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mmnfk&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ju&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zfp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vya&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bqgkmn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода видно, что помимо существующего web.1 создались еще два контейнера web.2 и web.3, благодаря чему достигнут необходимый минимум 3/3.&lt;/p&gt;

&lt;p&gt;Также можно воспользоваться другой командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service update web --replicas 4&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Также выполняя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service scale&lt;/code&gt; можно уменьшить количество контейнеров.&lt;/p&gt;

&lt;h3 id=&quot;что-если-удалить-контейнер-сервиса-docker-swarm&quot;&gt;Что если удалить контейнер сервиса Docker Swarm&lt;/h3&gt;

&lt;p&gt;Я рассмотрел, что будет если увеличить количество контейнеров в сервисе, но что произойдёт если удалить контейнер в обход Docker Swarm? Ответ простой: Docker Swarm просто его пересоздаст чтобы выполнить требуемые REPLICAS.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker ps
docker container rm -f web.2.mmnfk0ju6zfp0ochr6rm474ga
docker service ps web
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;rf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nnxv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zh&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mmnfk&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ju&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zfp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shutdown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;task: non-zero exit (137)&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;удаление-сервиса&quot;&gt;Удаление сервиса&lt;/h3&gt;

&lt;p&gt;Как не трудно догадаться удаление выполняется командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker service rm&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker service rm web
docker service ls
docker service ps web 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;no&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;such&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;инфографика&quot;&gt;Инфографика&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-workflow.svg&quot; alt=&quot;docker-swarm-workflow&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 21 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-swarm-activate</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-swarm-activate</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Swarm или Docker Swarm</title>
        <description>&lt;p&gt;Если вы уже давно интересуетесь DevOps то вы скорее всего слышали про обычный Swarm, который ставился отдельно и не был частью Docker. Это был &lt;strong&gt;отдельный внешний проект&lt;/strong&gt; (до 2016 г.), представлявший собой менеджер, который соединяет несколько Docker-демонов в кластер. &lt;strong&gt;Т.е. это был отдельный бинарник swarm, который управлял демонами Docker через API&lt;/strong&gt;. Также требовалось внешнее хранилище (Consul, etcd, Zookeeper) для хранения конфигурации. Сейчас обычный Swarm уже не используется и официально переехал в сам продукт Docker.&lt;/p&gt;

&lt;h3 id=&quot;docker-swarm-mode-или-просто-docker-swarm&quot;&gt;Docker Swarm mode (или просто Docker Swarm)&lt;/h3&gt;

&lt;p&gt;Начиная с &lt;strong&gt;Docker 1.12 (2016 г.)&lt;/strong&gt;, Swarm встроили &lt;strong&gt;прямо в Docker Engine&lt;/strong&gt;, что упростило использование и конфигурацию Swarm для конечного пользователя.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Было&lt;/th&gt;
      &lt;th&gt;Стало&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Отдельный бинарник &lt;code class=&quot;highlighter-rouge&quot;&gt;swarm&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Встроено в &lt;code class=&quot;highlighter-rouge&quot;&gt;dockerd&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Внешний KV-store (etcd/Consul)&lt;/td&gt;
      &lt;td&gt;Встроенная Raft-база&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Простое объединение демонов&lt;/td&gt;
      &lt;td&gt;Полноценная оркестрация (services, tasks, scaling)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Без встроенной безопасности&lt;/td&gt;
      &lt;td&gt;Автоматические TLS-сертификаты между нодами&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Нет встроенной сети&lt;/td&gt;
      &lt;td&gt;Overlay-сети, load-balancing и secrets из коробки&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-evolution.svg&quot; alt=&quot;docker-swarm-evolution&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;зачем-мне-docker-swarm&quot;&gt;Зачем мне Docker Swarm?&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Docker Swarm&lt;/strong&gt; — это встроенная в Docker система &lt;strong&gt;оркестрации контейнеров&lt;/strong&gt;, то есть инструмент, который управляет запуском, масштабированием и отказоустойчивостью множества контейнеров, работающих на нескольких хостах (нодах).&lt;/p&gt;

&lt;p&gt;При использовании обычного Docker вы получаете всего один хост с контейнерами, что приводит к потере всего при потере хоста с контейнерами. Docker Swarm — это кластер из многих хостов, действующих как один большой сервер. Соответственно при потере одного из хостов вы не теряете свои контейнеры и приложение продолжает свою работу.&lt;/p&gt;

&lt;p&gt;Ключевые задачи, которые решает Docker Swarm:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-swarm-features.svg&quot; alt=&quot;docker-swarm-features&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 19 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/swarm-vs-docker-swarm</link>
        <guid isPermaLink="true">http://www.tipoit.kz/swarm-vs-docker-swarm</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        <category>swarm</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Проверка восстановления (SureBackup)</title>
        <description>&lt;p&gt;Первая задача, о которой необходимо задуматься после настройки резервных копий - это настройка проверки восстановления этих резервных копий.&lt;/p&gt;

&lt;p&gt;Представим, что вы настроили создание резервных копий, а в час Х оказалось, что восстановить VM из резервной копии не удаётся. Согласитесь, что это будет неприятный сюрприз. И чтобы такого не было необходимо настраивать проверку восстановления. В Veeam Backup &amp;amp; Replication для этого используется # SureBackup.&lt;/p&gt;

&lt;p&gt;Задача SureBackup может работать в двух различных режимах:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Полное тестирование восстановления: Veeam Backup &amp;amp; Replication запускает виртуальные машины из резервной копии в изолированной виртуальной среде, для дальнейших тестов проверки работоспособности VM.&lt;/li&gt;
  &lt;li&gt;Только проверка резервных копий и сканирование содержимого: Veeam Backup &amp;amp; Replication выполняет проверку целостности резервной копии и анализ ее содержимого для обнаружения следов вредоносного ПО или любых других нежелательных или конфиденциальных данных.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;полное-тестирование-восстановления&quot;&gt;Полное тестирование восстановления&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;В процессе проверки восстановления происходит следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Если настроено задание SureBackup, то будет выполнено сканирование резервных копий на наличие вредоносного ПО с помощью антивирусного ПО.&lt;/li&gt;
  &lt;li&gt;Veeam Backup &amp;amp; Replication публикует VM из резервной копии в виртуальной изолированной среде — виртуальной лаборатории. VM запускаются напрямую из сжатых и дедуплицированных файлов резервных копий, которые находятся в репозитории резервных копий. Для этого Veeam Backup &amp;amp; Replication использует службу Veeam vPower NFS.&lt;/li&gt;
  &lt;li&gt;Veeam Backup &amp;amp; Replication выполняет ряд тестов, такие как тест heartbeat, тест ping и тест приложения.&lt;/li&gt;
  &lt;li&gt;Если задание SureBackup настроено на проверку файлов резервных копий, Veeam Backup &amp;amp; Replication выполняет циклическую проверку избыточности для файла резервной копии, с которого запускается проверяемая машина, и, опционально, для файлов резервной копии, с которых запускаются машины в группе приложений. Проверка файла резервной копии выполняется после завершения всех проверочных тестов&lt;/li&gt;
  &lt;li&gt;После завершения процесса проверки Veeam Backup &amp;amp; Replication отменяет публикацию VM в изолированной среде и отправляет отчет о процессе по почте администратору резервного копирования.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Tue, 03 Dec 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-backup-recovery-check</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-backup-recovery-check</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        <category>recovery</category>
        
        <category>SureBackup</category>
        
        
      </item>
    
      <item>
        <title>VMware - Missing dependency vibs error</title>
        <description>&lt;p&gt;При обновлении ESXI 6.7 до версии 7.0 получил ошибку Missing dependency vibs error: Found=[‘VMware_bootbank_scsi-qla2xxx_902.k1.1-12vmw.550.3.68.3029944’].&lt;/p&gt;

&lt;p&gt;Суть ошибки в том, что в установщике установщик ESXI не может найти дополнительные пакеты для обновления. И рекомендует нам удалить пакет, если он не нужен.&lt;/p&gt;

&lt;p&gt;В моём случае пакет VMware_bootbank_scsi-qla2xxx мне действительно не нужен, поэтому я его просто удалю, используя команды:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;esxcli software vib list | grep scsi
esxcli software vib remove --vibname&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;scsi-qla2xxx
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Removal&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Result&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Message:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;completed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;but&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;needs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rebooted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;effective.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reboot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Required:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VIBs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Installed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VIBs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Removed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VMware_bootbank_scsi-qla&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xxx_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;902&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.k&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vmw.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;550.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;68.3029944&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VIBs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Skipped:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 25 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vmware-missing-dependency-vibs-error</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vmware-missing-dependency-vibs-error</guid>
        
        <category>vmware</category>
        
        <category>виртуализация</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Обратное инкрементальное резервное копирование</title>
        <description>&lt;p&gt;Метод обратного инкрементального резервного копирования (Reverse Incremental Backup) создаёт цепочку из последней полной резервной копии (VBK) и группы обратных инкрементных резервных копий (VRB).&lt;/p&gt;

&lt;p&gt;Процесс создания обратной инкрементной резервной копии выглядит так:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;При первом запуске задачи создания резервной копии Veeam Backup &amp;amp; Replication создаёт полную резервную копию (VBK) в репозитории резервных копий&lt;/li&gt;
  &lt;li&gt;При каждом последующем запуске Veeam Backup &amp;amp; Replication копирует только данные VM, которые были изменены с момента последней резервной копии. Veeam Backup &amp;amp; Replication помещает эти данные в полную резервную копию, чтобы получилась актуальная полная резервная копия. Также эти измененные данные помещаются в файл обратной инкрементальной резервной копии, и добавляет этот файл обратной инкрементальной резервной копии перед файлом полной резервной копии.&lt;/li&gt;
  &lt;li&gt;После добавления инкрементальной резервной копии в цепочку резервных копий Veeam Backup &amp;amp; Replication проверяет политику хранения и удаляет старые резервные копии, не соответствующие этой политике.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В итоге самый последняя точка восстановления будет полная резервная копия, которая обновляется после каждого удачного запуска задачи создания резервной копии.&lt;/p&gt;

&lt;p&gt;Такой подход позволяет вам быстро восстановить актуальное состояние VM без дополнительной обработки, поскольку последняя точка восстановления представляет собой полный файл резервной копии. Если вам необходимо восстановить виртуальную машину на определенный момент времени, Veeam Backup &amp;amp; Replication применяет необходимые файлы VRB к файлу VBK, чтобы получить требуемую точку восстановления.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.tipoit.kz/static/img/veeam/RI.png&quot; alt=&quot;Veeam Reverse incremental backup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Чтобы создать задачу создания Обратной инкрементальной резервной копии при создании задачи в расширенных настройках тип резервной копии выбираем &lt;strong&gt;Reverse incremental&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-07_12-08.png&quot; alt=&quot;veeam create Reverse incremental backup &quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 25 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-reverse-incremental-backup</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-reverse-incremental-backup</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>VMware - Перенос образа виртуальный машины (VMware vCenter Converter Standalone)</title>
        <description>&lt;p&gt;Каким образом вы переносите образы виртуальных машин или сами виртуальные машины с одного сервера Vcenter в другой? Если вы всё делаете вручную, то у меня отличная новость, можно использовать VMware vCenter Converter Standalone.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;установка-vmware-vcenter-converter-standalone&quot;&gt;Установка VMware vCenter Converter Standalone&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Качаем установщик с официального сайта по &lt;a href=&quot;https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware%20vCenter%20converter&quot;&gt;ссылке&lt;/a&gt; и устанавливаем. Сам процесс установки расписывать не буду, так как там ничего необычного.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;возможности-vmware-vcenter-converter-standalone&quot;&gt;Возможности VMware vCenter Converter Standalone&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя VMware vCenter Converter Standalone вы можете создать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;образ локальной системы для переноса физического хоста в виртуализацию&lt;/li&gt;
  &lt;li&gt;конвертировать образ VMware Workstation в образ VMware Vsphere&lt;/li&gt;
  &lt;li&gt;клонировать виртуальную машину в другой vCenter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Меня интересует именно третий вариант, кстати ещё одно преимущество использования VMware vCenter Converter Standalone - это возможность изменить версию совместимости для клонируемой виртуальной машины.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;клонирование-виртуальной-машины&quot;&gt;Клонирование виртуальной машины&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первым делом нужно убедится, что образ виртуальной машины переведён в просто виртуальную машину, так как клонировать можно только саму VM, не образ.&lt;/p&gt;

&lt;p&gt;Запускаем VMware vCenter Converter Standalone и выполняем следующее шаг за шагом:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В левом верхнем углу нажимаем на Convert machine
 &lt;img src=&quot;/static/img/vcenter/2024-12-23_15-17.png&quot; alt=&quot;VMware vCenter Converter Standalone&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;В открывшемся окне выбираем VMware Infrastructure virtual machine&lt;/li&gt;
  &lt;li&gt;В том же окне вбиваем параметры доступа к vCenter или ESXI, где находится искомый образ и нажимаем NEXT&lt;/li&gt;
  &lt;li&gt;Если подключение установлено, то в следующем окне будет список всех VM, где выбираем необходимую VM&lt;/li&gt;
  &lt;li&gt;В окне Destination system выбираем vCenter или ESXI, куда необходимо склонировать образ (если учетка ограниченная, может не сработать)&lt;/li&gt;
  &lt;li&gt;В следующем окне выбираем на какой хост, клонировать VM и нажимаем NEXT&lt;/li&gt;
  &lt;li&gt;В следующем окне выбираем хранилище и также можем указать версию совместимости VM, таблицу можно найти &lt;a href=&quot;https://knowledge.broadcom.com/external/article/315655/virtual-machine-hardware-versions.html&quot;&gt;тут&lt;/a&gt;
 &lt;img src=&quot;/static/img/vcenter/2024-12-23_15-37.png&quot; alt=&quot;VMware vCenter Converter Standalone&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Жмём Next и после нажатия FINISH запускается процесс клонирования
 &lt;img src=&quot;/static/img/vcenter/2024-12-23_15-42.png&quot; alt=&quot;VMware vCenter Converter Standalone&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Fri, 22 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-clone-vm-to-remote-host</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-clone-vm-to-remote-host</guid>
        
        <category>vmvare</category>
        
        <category>virtualization</category>
        
        
      </item>
    
      <item>
        <title>Linux - Аудит sudo команд</title>
        <description>&lt;p&gt;По умолчанию все команды, выполненные от sudo записываются в &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/secure&lt;/code&gt;, помимо &lt;strong&gt;sudo&lt;/strong&gt; в этот файл пишется еще немало других событий. Логично что найти потом кто и что выполнил в куче логов не так просто. Поэтому сконфигурируем ОС так, чтобы логи писались в другой файл, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/sudo&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;укажем-в-какой-файл-писать-события&quot;&gt;Укажем в какой файл писать события&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого отредактируем файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/ets/sudoers&lt;/code&gt; и добавим переменную &lt;code class=&quot;highlighter-rouge&quot;&gt;logfile&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo visudo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logfile=/var/log/sudo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для выходи из &lt;strong&gt;visudo&lt;/strong&gt; выполните &lt;code class=&quot;highlighter-rouge&quot;&gt;:wq&lt;/code&gt;, или нажмите дважды &lt;code class=&quot;highlighter-rouge&quot;&gt;CRTL+Z&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;логирование-в-одну-строку&quot;&gt;Логирование в одну строку&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию лог о том, что пользователь выполнил команду под &lt;strong&gt;sudo&lt;/strong&gt; разбивается на несколько строк, что не совсем удобно для отправки в систему мониторинга, в моём случае &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;. Поэтому я сделаю так чтобы всё помещалось в одну строку.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo visudo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loglinelen=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для выходи из &lt;strong&gt;visudo&lt;/strong&gt; выполните &lt;code class=&quot;highlighter-rouge&quot;&gt;:wq&lt;/code&gt;, или нажмите дважды &lt;code class=&quot;highlighter-rouge&quot;&gt;CRTL+Z&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;проверка&quot;&gt;Проверка&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь, когда всё настроено просто выполняем sudo команду и проверяем что появилось об этом событие в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/sudo&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /var/log/sudo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;44&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY=pts/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PWD=/home/user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USER=root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND=/bin/ls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;настройка-filebeat&quot;&gt;Настройка filebeat&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;В качестве агента для отправки событий в &lt;strong&gt;elasticsearch&lt;/strong&gt; я буду использовать &lt;strong&gt;filebeat&lt;/strong&gt;. Писать о том, как его установить я не буду, так как там ничего необычного.&lt;/p&gt;

&lt;p&gt;Добавим новый input для &lt;strong&gt;filebeat&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/filebeat/filebeat.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;filebeat.inputs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filestream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sudo&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;paths:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/log/sudo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fields:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tag:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart filebeat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;grok-для-pipeline&quot;&gt;Grok для pipeline&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы разбить событие на поля в &lt;strong&gt;Elasticsearch&lt;/strong&gt; можно воспользоваться pipeline, для этого можно использовать следующий &lt;strong&gt;Pattern&lt;/strong&gt; для &lt;strong&gt;Grok&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SYSLOGTIMESTAMP:system.syslog.timestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USERNAME:sudo.user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOTSPACE:sudo.tty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PWD=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOTSPACE:sudo.pwd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USER=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USERNAME:sudo.userbecome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GREEDYDATA:sudo.command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SYSLOGTIMESTAMP:system.syslog.timestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USERNAME:sudo.user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GREEDYDATA:sudo.allow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOTSPACE:sudo.tty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PWD=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOTSPACE:sudo.pwd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USER=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USERNAME:sudo.userbecome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND=%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GREEDYDATA:sudo.command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 22 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-sudo-commands-audit</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-sudo-commands-audit</guid>
        
        <category>security</category>
        
        <category>linux</category>
        
        <category>sudo</category>
        
        
      </item>
    
      <item>
        <title>FreeIpa - Мониторинг действий пользователя</title>
        <description>&lt;p&gt;В моём случае я использую связку filebeat + elasticsearch. Все события, связанные с действиями пользователей я беру в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/httpd/error_log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В этом файле очень много событий, но меня интересовали события содержащие слова:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;user_add - добавление пользователя&lt;/li&gt;
  &lt;li&gt;user_mod - редактирование пользователя&lt;/li&gt;
  &lt;li&gt;passwd - изменение пароля&lt;/li&gt;
  &lt;li&gt;sudorule_add_user - добавление пользователя в группу sudo&lt;/li&gt;
  &lt;li&gt;user_del - удаление пользователя&lt;/li&gt;
  &lt;li&gt;group_add - создание группы&lt;/li&gt;
  &lt;li&gt;group_mod - редактирование группы&lt;/li&gt;
  &lt;li&gt;group_del - удаление группы&lt;/li&gt;
  &lt;li&gt;group_add_member - добавление пользователя в группу&lt;/li&gt;
  &lt;li&gt;session_logout - выход&lt;/li&gt;
  &lt;li&gt;whoami - по умолчанию не нашёл события для входа и использую это слово&lt;/li&gt;
  &lt;li&gt;Unauthorized - неудачные попытки входа&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;конфигурация-filebeat&quot;&gt;Конфигурация filebeat&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;На сервере где стоит FreeIpa редактируем файл конфигурации filebeat и добавляем новый input. Установку самого filebeat я опущу так как там ничего необычного.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/filebeat/filebeat.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;filebeat.inputs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filestream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ipaamd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;paths:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                                                                                                             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/log/httpd/error_log&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                                                                                     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fields:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                                                                                                            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tag:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ipaamd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                                                                                              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_lines:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'user_add'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'user_find'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'user_mod'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'passwd'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'sudorule_add_user'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'user_del'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'group_add'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'group_find'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'group_mod'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'group_del'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'group_add_member'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'session_logout'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'whoami'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Unauthorized'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart filebeat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 22 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/freeipa-filebeat-elk</link>
        <guid isPermaLink="true">http://www.tipoit.kz/freeipa-filebeat-elk</guid>
        
        <category>security</category>
        
        <category>freeipa</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Vcenter the remote certificate is invalid according to the validation procedure</title>
        <description>&lt;p&gt;Ошибка может появиться если вы обновили сертификат на Vcenter. Когда мы добавляем Vcenter в Veeam он импортирует этот сертификат себе. Соответственно нового сертификата у него нет, и нам нужно заставить Veeam его получить.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Просто переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Inventory&lt;/code&gt;, нажимаем правой кнопкой на необходимом Vcenter и выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Properties&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Просто жмём везде &lt;code class=&quot;highlighter-rouge&quot;&gt;Next&lt;/code&gt;, и во время запроса о сертификате нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Import&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 07 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-remote-certificate-is-invalid</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-remote-certificate-is-invalid</guid>
        
        <category>vcenter</category>
        
        <category>veeam</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - Создаём свой собственный образ</title>
        <description>&lt;p&gt;Время от времени приходится обновлять &lt;strong&gt;esxi&lt;/strong&gt; со старой версии на более новую и бывает, что в новом образе нет того или иного пакета. Например, в моём случае я наткнулся на ошибку: The upgrade has VIBs that are missing dependencies: EMU_bootbank_scsi-be2iscsi_12.0.1108.0-1OEM.600.0.0.2494585.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;включаем-auto-deploy-и-image-builder&quot;&gt;Включаем Auto Deploy и Image Builder&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Авторизуемся в Vcenter и переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Auto Deploy&lt;/code&gt;, где нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Enable Auto Deploy and Image Builder&lt;/code&gt;.
&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-30.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;добавляем-наш-образ&quot;&gt;Добавляем наш образ&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Важное замечание что мы добавляем не &lt;code class=&quot;highlighter-rouge&quot;&gt;iso образ&lt;/code&gt;, а архив с пакетами (&lt;code class=&quot;highlighter-rouge&quot;&gt;Offline Bundle&lt;/code&gt;), обычно он доступен к загрузке там же где и основной образ. Для этого переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Auto Deploy&lt;/code&gt; и во вкладке &lt;code class=&quot;highlighter-rouge&quot;&gt;Software Depot&lt;/code&gt; выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Import&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-33.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;добавляем-необходимый-пакет&quot;&gt;Добавляем необходимый пакет&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала конечно же нужно найти необходимый пакет, в моём случае я его нашёл &lt;a href=&quot;https://vibsdepot.hpe.com/superdome/sdx/downloads/may2019/gen9v3/esxi-600-drv-vibs/be2iscsi/&quot;&gt;тут&lt;/a&gt;. Всё классно, но вот добавить я могу только архив в &lt;code class=&quot;highlighter-rouge&quot;&gt;Software Depot&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Первое что я сделал это конечно просто запаковал пакет в архив, но при импорте получил ошибку. Потом я попробовал добавить пакет в существующий архив (который импортировал выше), но при импорте снова получил ошибку.&lt;/p&gt;

&lt;p&gt;В итоге по url ссылке я понял что пакет EMU_bootbank_scsi-be2iscsi находится в образу esxi 6.0 от HP. Я выкачал VMware-ESXi-6.0.0-Update1-3073146-HP-600.9.4.34-Nov2015-depot и также импортировал его как описывал выше.&lt;/p&gt;

&lt;p&gt;В итоге в &lt;code class=&quot;highlighter-rouge&quot;&gt;Software Depot&lt;/code&gt; у меня:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Lenovo_ESXi6.5a_20170217&lt;/strong&gt; - тот что я хочу поставить на хост&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;HP-ESXi-6.0.0-Update1-600.9.4.34&lt;/strong&gt; - отсюда мне нужен только пакет EMU_bootbank_scsi-be2iscsi&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-свой-профиль-образа&quot;&gt;Создаём свой профиль образа&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Для этого в &lt;code class=&quot;highlighter-rouge&quot;&gt;Software Depot&lt;/code&gt; создаём новый &lt;code class=&quot;highlighter-rouge&quot;&gt;Depot&lt;/code&gt; (NEW&amp;gt;Custom Depot)
&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-42.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Software Depot&lt;/code&gt; созданный в самом начале и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;CLONE&lt;/code&gt;
 &lt;img src=&quot;/static/img/vcenter/2024-11-06_11-43.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем наш &lt;code class=&quot;highlighter-rouge&quot;&gt;Software depot&lt;/code&gt;
&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-44.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Дополнительно ставим галочки для пакетов, которые нужно дополнительно добавить
&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-45.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;FINISH&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Можно сравнить количество пакетов в обоих образах
&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-49.png&quot; alt=&quot;enter image description here&quot; /&gt;
&lt;img src=&quot;/static/img/vcenter/2024-11-06_11-49_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;экспортируем-образ&quot;&gt;Экспортируем образ&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Далее выбираем наш профиль образа и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;EXPORT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;PS: Я понимаю, что решение ошибки может быть проще и другим, но просто мне под руку подвернулся именно такой вариант, для пробы создания собственного образа, поэтому я решил попробовать.&lt;/p&gt;
</description>
        <pubDate>Thu, 07 Nov 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-create-custom-image</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-create-custom-image</guid>
        
        <category>vcenter</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - Создание vm из шаблона зависает на 94%</title>
        <description>&lt;p&gt;Проблема скорее всего в том, что у вас просрочен пароль на root пользователя. Как вариант пробуем зайти по ssh и обновить пароль, не лишним будет перезагрузить Vcenter.&lt;/p&gt;

&lt;p&gt;В логах &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/vmware/vsm/vsm.log&lt;/code&gt; будут записи:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`YYYY-MM-DDTHH:mm:ss&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thread&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ServiceUtil.java&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;142&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;expired.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Resetting&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;account&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`YYYY-MM-DDTHH:mm:ss&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VsmActivationValidator.java&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;267&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vpxd-svc-acct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allowed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также чтобы в будущем такого не случалось обновляемся до vCenter 8.0 U2b.&lt;/p&gt;

&lt;p&gt;Ещё одна возможная причина это &lt;a href=&quot;https://tipoit.kz/vcenter-cert-renew-http-500&quot;&gt;просроченный сертификат&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 23 Oct 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-vm-creation-sturck-94</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-vm-creation-sturck-94</guid>
        
        <category>vcenter</category>
        
        
      </item>
    
      <item>
        <title>Vagrant - Разворачиваем виртуальные сервера на VirtualBox</title>
        <description>&lt;p&gt;Используя &lt;strong&gt;Vagrant&lt;/strong&gt; вы ускоряете процесс создания виртуальных машин на многих платформах виртуализации, например &lt;code class=&quot;highlighter-rouge&quot;&gt;Hyper-V&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Virtualbox&lt;/code&gt; и т.д.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/vagrant-1.drawio.png&quot; alt=&quot;vagrant up&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#install-id&quot;&gt;Установка&lt;/a&gt; /
&lt;a href=&quot;#provider-id&quot;&gt;Провайдер&lt;/a&gt; /
&lt;a href=&quot;#create-vm&quot;&gt;Создание VM&lt;/a&gt; /
&lt;a href=&quot;#vagrant-config&quot;&gt;Файл конфигурации&lt;/a&gt; /
&lt;a href=&quot;#run-vm&quot;&gt;Запуск VM&lt;/a&gt; /
&lt;a href=&quot;#ssh-connect&quot;&gt;Подключение по ssh&lt;/a&gt; /
&lt;a href=&quot;#config-update&quot;&gt;Обновление конфигурации&lt;/a&gt; /
&lt;a href=&quot;#destroy-vm&quot;&gt;Удаление VM&lt;/a&gt; /
&lt;a href=&quot;#copy-files&quot;&gt;Копирование файлов&lt;/a&gt; /
&lt;a href=&quot;#run-scripts&quot;&gt;Запуск скриптов&lt;/a&gt; /&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;install-id&quot;&gt;Установка Vagrant&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;По &lt;a href=&quot;https://developer.hashicorp.com/vagrant/install#windows&quot;&gt;ссылке&lt;/a&gt; всегда можно получить свежую информацию о установке на различные ОС.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#Centos&lt;/span&gt;
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vagrant

&lt;span class=&quot;c&quot;&gt;#Ubuntu&lt;/span&gt;
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; main&quot;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install vagrant
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для &lt;code class=&quot;highlighter-rouge&quot;&gt;Windows&lt;/code&gt; как обычно качаем файл установки и устанавливаем.&lt;/p&gt;

&lt;p&gt;После установки проверяем что &lt;strong&gt;Vagrant&lt;/strong&gt; работает:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vagrant --version
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Vagrant&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;provider-id&quot;&gt;Провайдер по умолчанию&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию в качестве провайдера используется &lt;strong&gt;VirtualBox&lt;/strong&gt;, но вы можете это изменить. Все дальнейшие примеры будут предназначены именно для провайдера &lt;strong&gt;VirtualBox&lt;/strong&gt;, для других провайдеров конфигурация может отличаться.&lt;/p&gt;

&lt;p&gt;Делается это несложно просто через переменную &lt;code class=&quot;highlighter-rouge&quot;&gt;VAGRANT_DEFAULT_PROVIDER&lt;/code&gt; указываем какой провайдер использовать. Либо можно при вызове команд передавать провайдера через опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--provider&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;И ещё одно замечание &lt;strong&gt;на момент написания статьи Vagrant не работает с VirtualBox 7.1.0&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;the-box-youre-attempting-to-add-doesnt-support-the-provider-you-requested&quot;&gt;The box you’re attempting to add doesn’t support the provider you requested&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы видите эту ошибку значит вы хотите использовать образ, предназначенный для другого провайдера, например, &lt;strong&gt;VirtualBox вместо Hyper-V&lt;/strong&gt;. Чтобы такого не было при поиске образа сортируйте их по провайдерам.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;create-vm&quot;&gt;Создание виртуальной машины с помощью Vagrant&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для создания виртуального сервера используются шаблоны, список которых можно получить по &lt;a href=&quot;https://portal.cloud.hashicorp.com/vagrant/discover?query=stream&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Также можно выкачать шаблон по любой доступной ссылке в интернете:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Vagrant.configure(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|config|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.box&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;centos/9&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.box_url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Vagrant-9-latest.x86_64.vagrant-virtualbox.box&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для начала необходимо создать файл конфигурации, т.е. &lt;strong&gt;Vagrant файл&lt;/strong&gt;, где уже необходимо описать всю конфигурацию виртуального сервера. Я буду использовать образ &lt;code class=&quot;highlighter-rouge&quot;&gt;centos/stream9&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vagrant.exe init roboxes/centos9s
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После выполнения этой команды в текущей директории у вас создастся файл &lt;strong&gt;Vagrantfile&lt;/strong&gt;, где необходимо вписать настройки для виртуальной машины. Кстати не нужно удалять этот файл после создания серверов, так как в дальнейшем для подключения к ним по &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh&lt;/code&gt; этот файл ещё понадобится.&lt;/p&gt;

&lt;p&gt;Весь конфиг помещается внутри блока &lt;code class=&quot;highlighter-rouge&quot;&gt;Vagrant.configure(&quot;2&quot;) do |config|&lt;/code&gt;, эта строка означает старт файла конфигурации.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;vagrant-config&quot;&gt;Базовый файл конфигурации&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот примерный файл конфигурации:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Vagrant.configure(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|config|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.box&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;roboxes/centos9s&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.hostname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;just-for-test-centos&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.box_check_update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vbguest.auto_update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.provider&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;virtualbox&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|vb|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vb.name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;just_test&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vb.cpus&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vb.memory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4096&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;config.vm.box&lt;/strong&gt; - тут собственно указываем шаблон для VM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;vb.name&lt;/strong&gt; - имя VM (в самом VirtualBox)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;vb.cpus&lt;/strong&gt; - сколько cpu выдать для VM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;vb.memory&lt;/strong&gt; - сколько выдать ОЗУ для VM (в мб)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;config.vm.hostname&lt;/strong&gt; - имя сервера, в самой ОС&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;config.vm.box_check_update&lt;/strong&gt; - при создании VM по умолчанию происходит установка обновлений, если стоит true&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;config.vbguest.auto_update&lt;/strong&gt; - устанавливать гостевые дополнения Virtualbox или нет&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;run-vm&quot;&gt;Старт VM&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для запуска процесса создания нужно выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant up&lt;/code&gt;. Если вы выполняете команду впервые, то потребуется какое-то время для скачивания образа.&lt;/p&gt;

&lt;p&gt;Эта команда создаёт и настраивает будущую виртуальную машину, приводя её к тому состоянию, которое описано в файле конфигурации.&lt;/p&gt;

&lt;p&gt;Для применения дальнейших изменений можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant reload&lt;/code&gt;, о которой чуть ниже.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;ssh-connect&quot;&gt;Подключение по ssh&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию создаётся пара, открытого и закрытого ключей для авторизации по &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh&lt;/code&gt;. И самым простым вариантом для авторизации на виртуальной машине будет использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant ssh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если у вас несколько виртуальных машин в файле конфигурации, то необходимо передать имя.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;config-update&quot;&gt;Обновление конфигурации VM&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если необходимо что-то изменить на уже созданной VM используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant reload&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Vagrant.configure(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|config|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.box&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;roboxes/centos9s&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.hostname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;just-for-test&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.box_check_update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.provider&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;virtualbox&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|vb|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vb.name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;just_test&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vb.cpus&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vb.memory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4096&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vagrant reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant reload&lt;/code&gt; может принимать дополнительную опцию, одну из:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;–provision&lt;/strong&gt; - когда мы делаем &lt;strong&gt;reload&lt;/strong&gt; применяются не все изменение в файле Vagrantfile. Чтобы применились все изменения нужно добавить &lt;code class=&quot;highlighter-rouge&quot;&gt;--provision&lt;/code&gt; (скрипты и т.д.)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;–no-provision&lt;/strong&gt; - применить только некоторые параметры конфигурации, такие как сетевые настройки, конфигурация VM (&lt;strong&gt;скрипты запускаются только если стоит always&lt;/strong&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;–provision-with&lt;/strong&gt; - указывает какой именно тип запускать, например &lt;code class=&quot;highlighter-rouge&quot;&gt;shell&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;file&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;destroy-vm&quot;&gt;Удаление VM&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы удалить уже созданную VM используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant destroy&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;copy-files&quot;&gt;Копирование файлов в VM&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Можно скопировать файлы в будущую VM добавив файл &lt;strong&gt;Vagrantfile&lt;/strong&gt; одну из следующих строк:&lt;/p&gt;

&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;config.vm.provision &quot;file&quot;, source&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;./scripts/copy.txt&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/tmp/copy.txt&quot;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#one file&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;config.vm.provision &quot;file&quot;, source&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;./scripts&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/tmp/remote&quot;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;==&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Running&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;provisioner:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;./scripts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/remote&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если нужно скопировать файлы в уже созданную VM используем &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant upload&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vagrant upload .&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;cripts&lt;span class=&quot;se&quot;&gt;\c&lt;/span&gt;opy.txt /tmp/copy.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Uploading&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.\scripts\copy.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/copy.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Upload&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;completed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Source:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.\scripts\copy.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Destination:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/copy.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но обратите внимание если по каким-то причинам у вас не установились гостевые дополнения &lt;strong&gt;Virtualbox&lt;/strong&gt; первый вариант может не сработать.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;run-scripts&quot;&gt;Запуск скриптов внутри VM&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если нужно запустить скрипты при создании VM используем &lt;strong&gt;provision&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Vagrant.configure(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|config|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.provision&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;shell&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;./scripts/just_test.sh&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config.vm.provision&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;shell&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;./scripts/just_test2.sh&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'always'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Первый скрипт &lt;code class=&quot;highlighter-rouge&quot;&gt;just_test.sh&lt;/code&gt; выполнится только при создании VM (&lt;strong&gt;up или reload –provision&lt;/strong&gt;), второй будет выполнятся даже если запустить &lt;strong&gt;reload без provision&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Если нужно запустить только скрипты можно также воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant reload --provision-with  shell&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 14 Oct 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vagrant-create-vm</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vagrant-create-vm</guid>
        
        <category>vagrant</category>
        
        <category>k8s</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Linux - Восстановление удалённого раздела</title>
        <description>&lt;p&gt;Если вы вдруг удалили по каким-то причинам раздел, в моей практике это происходит из-за невнимательности при добавлении места. Т.е. человек удаляет раздел и сохраняет изменения, не создав его заново.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Так вот для начала нам необходимо установить &lt;strong&gt;TestDisk&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get install testdisk   &lt;span class=&quot;c&quot;&gt;# Debian/Ubuntu&lt;/span&gt;
sudo yum install epel-release	&lt;span class=&quot;c&quot;&gt;# CentOS/RHEL&lt;/span&gt;
sudo yum install testdisk       &lt;span class=&quot;c&quot;&gt;# CentOS/RHEL&lt;/span&gt;

wget https://www.cgsecurity.org/testdisk-7.3-WIP.linux26-x86_64.tar.bz2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol&gt;
  &lt;li&gt;После установки запускаем утилиту и передаём наш диск, где удалили раздел.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo testdisk /dev/sdb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt;
&lt;img src=&quot;/static/img/all/2024-10-07_09-53.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем тип таблицы разделов, как правило это &lt;code class=&quot;highlighter-rouge&quot;&gt;Intel&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;EFI GPT&lt;/code&gt; (sudo fdisk -l /dev/sdb)&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Analyse&lt;/code&gt; и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Снова нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt; для быстрого сканирования (Quick Search)&lt;/li&gt;
  &lt;li&gt;После сканирования у нас появляется наш удалённый раздел, выбираем его и снова нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt;
&lt;img src=&quot;/static/img/all/2024-10-07_09-58.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Write&lt;/code&gt; и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Enter&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Проверяем что раздел появился
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo fdisk -l /dev/sdb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sectors&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sdb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41940991&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41938944&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filesystem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезагружаемся, как было рекомендовано&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 07 Oct 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/inux-partition-recovery</link>
        <guid isPermaLink="true">http://www.tipoit.kz/inux-partition-recovery</guid>
        
        <category>recovery</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Загружаем файл используя dotnet</title>
        <description>&lt;p&gt;Сразу скажу, что dotnet разработчик из меня такой себе, точнее я совсем не разработчик. Но я настраиваю MinIO для разработчиков и бывают ситуации, когда разработчик, который пишет код на dotnet прибегает со словами ты что-то настроил неправильно, у меня не работает код. На мои вопросы почему у остальных работает нормально он просто хлопает глазами и говорит не знаю.&lt;/p&gt;

&lt;p&gt;Так вот я решил накатать простое приложение, которое просто загрузит файл в корзину на его глазах и соответственно я могу отправить его смотреть свой код.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;установка-dotnet&quot;&gt;Установка dotnet&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для windows:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; winget install Microsoft.DotNet.SDK.8
 winget install Microsoft.DotNet.AspNetCore.8
 winget install Microsoft.DotNet.DesktopRuntime.8
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;подготовка&quot;&gt;Подготовка&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;dotnet new console -n FileUploader
dotnet add package Minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Меняем содержимое файла Program.cs на:&lt;/p&gt;

&lt;div class=&quot;language-cs highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Minio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Minio.Exceptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Minio.DataModel.Args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;FileUploader&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;FileUpload&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endpoint&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;minio-host&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;accessKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;pwd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minio&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MinioClient&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
                                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithEndpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithCredentials&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;accessKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithSSL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
                                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;FileUpload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;minio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Wait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WriteLine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ReadLine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// File uploader task.
&lt;/span&gt;        &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IMinioClient&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bucketName&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;bucket&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;objectName&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;noPmem.log&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filePath&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;C:\\Users\\user\\Downloads\\noPmem.log&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Change this path
&lt;/span&gt;            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;contentType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;application/zip&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;c1&quot;&gt;// Make a bucket on the server, if not already present.
&lt;/span&gt;                &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;beArgs&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BucketExistsArgs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithBucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucketName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;found&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;BucketExistsAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;beArgs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ConfigureAwait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;found&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mbArgs&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MakeBucketArgs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithBucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucketName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                    &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MakeBucketAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mbArgs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ConfigureAwait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;c1&quot;&gt;// Upload a file to bucket.
&lt;/span&gt;                &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;putObjectArgs&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;PutObjectArgs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithBucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucketName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objectName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithFileName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filePath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithContentType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;contentType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PutObjectAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;putObjectArgs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ConfigureAwait&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WriteLine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Successfully uploaded &quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;objectName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MinioException&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WriteLine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;File Upload Error: {0}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;запуск&quot;&gt;Запуск&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для запуска приложения осталось выполнить всего 2 команды:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;dotnet build
dotnet run
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Successfully&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uploaded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;noPmem.log&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 25 Sep 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-dotnet-upload</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-dotnet-upload</guid>
        
        <category>minio</category>
        
        <category>dotnet</category>
        
        
      </item>
    
      <item>
        <title>K8s - Сборка docker образа</title>
        <description>&lt;p&gt;&lt;strong&gt;Docker образ&lt;/strong&gt; используется для создания контейнеров в контейнеризации, включает в себя легковесную ОС и необходимые файлы для работы конкретного приложения. Каждый созданный кем-либо контейнер использует тот или иной &lt;strong&gt;Docker образ&lt;/strong&gt;. По сути &lt;strong&gt;Docker образ&lt;/strong&gt; — это снимок ОС с вшитыми библиотеками, необходимыми для работы конкретного приложения. Например, вы хотите развернуть приложение, работающее на python. Соответственно вы просто используете &lt;strong&gt;Docker образ&lt;/strong&gt; с &lt;code class=&quot;highlighter-rouge&quot;&gt;python&lt;/code&gt;, не тратя особого времени на его установку в основную ОС.&lt;/p&gt;

&lt;p&gt;Образы можно хранить и перемещать локально или же использовать репозитории, которые могут быть как публичными, так и приватными. Самый распространённый публичный репозиторий -  &lt;a href=&quot;https://hub.docker.com/search?image_filter=official&amp;amp;type=image&quot;&gt;docker hub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker%20image%20pull.drawio.png&quot; alt=&quot;docker image pull&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;структура-docker-образа&quot;&gt;Структура Docker образа&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Давайте разберём из чего состоит &lt;strong&gt;Docker образ&lt;/strong&gt; (&lt;strong&gt;Dockerfile&lt;/strong&gt;):&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Самое первое это базовый образ (&lt;strong&gt;Base Image&lt;/strong&gt;), т.е. по сути это ОС, но только урезанная. Например, &lt;code class=&quot;highlighter-rouge&quot;&gt;alpine&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;ubuntu&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;python:3.9-slim&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Каждый &lt;strong&gt;Docker образ&lt;/strong&gt; состоит из &lt;strong&gt;слоёв&lt;/strong&gt;. Каждый слой представляет из себя изменения, которые применяются поверх базового образа (&lt;strong&gt;Base Image&lt;/strong&gt;). Т.е. если в образ включить установку нового пакета, которого нет в базовом образе, то установка этого пакета создаст новый слой.&lt;/li&gt;
  &lt;li&gt;Если мы говорим о контейнеризации в разработке, то конечно же контейнер будет содержать код приложения, написанный разработчиком.&lt;/li&gt;
  &lt;li&gt;Почти все приложения имеют свои файлы конфигураций, которые также содержатся в самом &lt;strong&gt;Docker образе&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Ну и куда же без информации о самом образе, т.е. метаданные образа.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;пример-слоев-в-docker-образе&quot;&gt;Пример слоев в Docker образе&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Как я уже сказал любое изменение в создаваемом образе приведёт к созданию нового слоя&lt;/strong&gt;. В итоге после создания образа у вас получится большой слоённый бутерброд. Кстати для просмотра слоёв и вообще информации о существующем образе можно воспользоваться утилитой &lt;a href=&quot;https://github.com/wagoodman/dive&quot;&gt;dive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker%20image%20layers.drawio.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Когда вы выполняете команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build&lt;/code&gt; в выводе можно просмотреть сколько в итоге создалось слоёв в вашем образе.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build . -t myapp:1.7
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker.io/library/python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim@sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2851&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;da&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fdc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;451784&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;beef&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;313&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;122&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1891085&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;104&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cfb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CACHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CACHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;osapp/.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CACHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-r&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;requirements.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также рекомендую посмотреть слои какого-нибудь готового образа на &lt;code class=&quot;highlighter-rouge&quot;&gt;dockerhub&lt;/code&gt;, например &lt;a href=&quot;https://hub.docker.com/layers/library/nginx/1.27.1-alpine-perl/images/sha256-e6e3683e33f921129fbd6eebe75cc9698bf34a613cb92a83a706318894a30ace?context=explore&quot;&gt;nginx:1.27.1-alpine-perl&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;как-создать-свой-собственный-docker-образ&quot;&gt;Как создать свой собственный Docker образ&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно это хорошо просто скачивать уже созданные кем-то Docker образы с публичных репозиториев, но рано или поздно придётся создать свой собственный. Рассмотрим пример создания Docker образа для приложения, написанного на &lt;code class=&quot;highlighter-rouge&quot;&gt;python&lt;/code&gt;. Это простенькое приложение, которое пытается получить доступ к сайту и выводит &lt;code class=&quot;highlighter-rouge&quot;&gt;http responce&lt;/code&gt;. Скачать все необходимые файлы для воссоздания можно тут.&lt;/p&gt;

&lt;p&gt;Для этого я создам файл &lt;strong&gt;Dockerfile&lt;/strong&gt; и впишу следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Как я описывал выше каждый образ начинается с базового образа (&lt;strong&gt;Base Image&lt;/strong&gt;). Также рекомендуется указывать тэг образа, т.е. конкретную версию образа и использовать максимально облегченный образ используя инструкцию &lt;strong&gt;FROM&lt;/strong&gt;.
    &lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM python:3.9-slim
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;Понятное дело, что запускать файлы из корня контейнера не стоит, поэтому мы будем использовать директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/app&lt;/code&gt; внутри образа. Используя инструкцию &lt;strong&gt;WORKDIR&lt;/strong&gt; укажем текущую директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/app&lt;/code&gt;. Т.е. всё что, мы будем выполнять при создании образа дальше будет выполняться в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/app&lt;/code&gt; самого образа.
    &lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;WORKDIR /app
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;Как несложно догадаться если есть файл приложения, то его нужно скопировать в наш новый Docker образ. Поэтому скопируем все файлы с директории &lt;code class=&quot;highlighter-rouge&quot;&gt;osapp&lt;/code&gt; в самой хостовой ОС в текущую директорию образа, используя инструкцию &lt;strong&gt;COPY&lt;/strong&gt;. Кстати так как наш базовый образ с добавлением файлов по сути изменился отсюда добавился новый слой.
    &lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;COPY osapp/. .
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;Наш &lt;code class=&quot;highlighter-rouge&quot;&gt;python&lt;/code&gt; скрипт использует библиотеку &lt;code class=&quot;highlighter-rouge&quot;&gt;requests&lt;/code&gt;, которая по умолчанию не стоит в базовом образе &lt;code class=&quot;highlighter-rouge&quot;&gt;python:3.9-slim&lt;/code&gt;. Соответственно нам надо её установить и для этого при создании нового образа должна запуститься команда установки зависимостей &lt;code class=&quot;highlighter-rouge&quot;&gt;pip install -r requirements.txt&lt;/code&gt;. В шаге выше мы скопировали все файлы с osapp в корневую директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/app&lt;/code&gt; образа, в том числе &lt;code class=&quot;highlighter-rouge&quot;&gt;requirements.txt&lt;/code&gt;.
    &lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;RUN pip install -r /app/requirements.txt
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;Ну и последний шаг это уже запуск нашего приложения, используя инструкцию &lt;strong&gt;CMD&lt;/strong&gt;. Но эта команда уже выполнится, когда мы запустим сам контейнер.
    &lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;CMD [&quot;python&quot;,&quot;pyfile.py&quot;]
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;После того как файл &lt;strong&gt;Dockerfile&lt;/strong&gt; готов мы можем запускать процесс создания нашего собственного Docker образа.
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build . -t myapp:1.0
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Для проверки того что у нас получилось пробуем запустить сам контейнер.
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run myapp:1.0
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Вот так выглядит простенький &lt;strong&gt;Dockerfile&lt;/strong&gt;, но этими инструкциями он не ограничивается поэтому рекомендую прочитать про все инструкции ниже.&lt;/p&gt;

&lt;p&gt;Чтобы просмотреть какие вообще образы присутствуют в вашей ОС можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker images&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;метаданные-docker-образа&quot;&gt;Метаданные Docker образа&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы прописать какую-то важную информацию для пользователей или же просто указать версию образа или имя создателя можно добавить в контейнер метаданные, используя инструкцию &lt;strong&gt;LABEL&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для этого в файл &lt;strong&gt;Dockerfile&lt;/strong&gt; добавляем, например, такую строку:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;LABEL maintainer=&quot;main@example.com&quot; \ version=&quot;1.0&quot; \ description=&quot;This is a Python application that try to access an url and return responce code.&quot; \ license=&quot;MIT&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Для того чтобы просмотреть метаданные того или иного образа можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker image inspect myapp:1.0 | jq .[0].Config.Labels&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;переменные-в-docker-образе&quot;&gt;Переменные в Docker образе&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для указания переменных в образе используется 2 инструкции: &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#arg&quot;&gt;ARG&lt;/a&gt; и &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#env&quot;&gt;ENV&lt;/a&gt;. Конечно же если их несколько значит есть отличия.&lt;/p&gt;

&lt;p&gt;Инструкция &lt;strong&gt;ENV&lt;/strong&gt; создаёт переменную, которая доступна как во время создания образа, так и при использовании самого контейнера, созданного с этого образа. Т.е. приложение, которое будет работать в будущем внутри контейнера сможет использовать эту переменную и её значение.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;ENV APP_PORT=8080
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Инструкция &lt;strong&gt;ARG&lt;/strong&gt; в свою очередь объявляет переменную, которую вы можете использовать только внутри образа, во время его создания.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;ARG APP_ARG=production
ENV APP_ENV=$APP_ARG
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Если нужно присвоить значение со знаками пробелами, то используем один из следующих вариантов:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;ENV APP_ARG=&quot;Must be production&quot;
ENV APP_ARG=Must\ be\ production
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;команда-сборки-docker-образа&quot;&gt;Команда сборки Docker образа&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как мы уже поняли из текста выше сборка образа осуществляется командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build&lt;/code&gt;. Через опцию -&lt;code class=&quot;highlighter-rouge&quot;&gt;t&lt;/code&gt; мы присваиваем тэг нашему образу, если просто, то это имя и версия нашего образа. Например, чтобы собрать образ с именем nginx и версией 1.0 мы выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build . -t nginx:1.0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того, чтобы выполнить сборку образа в текущей директории должен присутствовать файл &lt;strong&gt;Dockerfile&lt;/strong&gt;, с описанием нашего образа. Если же вы по каким-то причинам не хотите использовать стандартное имя для файла &lt;strong&gt;Dockerfile&lt;/strong&gt;, можете назвать его иначе. Но тогда команда сборки образа будет выглядеть так: &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build --tag myapp:1.1 --file './filename' .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Обратите внимание на версионность, дело в том, что если вы вдруг обновили сам &lt;strong&gt;Dockerfile&lt;/strong&gt; и хотите пересоздать образ, не меняя его версию, то старый образ всё также остаётся у вас в системе, просто становиться без имени и тэга. Поэтому либо удаляйте после пересоздания образы без имени или увеличивайте версию образа.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build . -t myapp:1.1
docker build . -t myapp:1.1
docker images
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;myapp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;daa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;adee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;125&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;none&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;none&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;082&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ea&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;125&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Чтобы удалить все безымянные образы можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;docker rmi $(docker images -f &quot;dangling=true&quot; -q)&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;copy-или-add&quot;&gt;Copy или Add&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для копирования файлов при сборке контейнера можно воспользоваться двумя инструкциями: &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#add&quot;&gt;ADD&lt;/a&gt; и &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#copy&quot;&gt;COPY&lt;/a&gt;, ну и конечно есть в них различия.&lt;/p&gt;

&lt;p&gt;Инструкцию &lt;strong&gt;ADD&lt;/strong&gt; рекомендуется использовать если вы хотите скопировать в контейнер файлы по &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTPS&lt;/code&gt; или с &lt;code class=&quot;highlighter-rouge&quot;&gt;Github&lt;/code&gt;. Также если вы копируете архив, он автоматически будет разархивирован.&lt;/p&gt;

&lt;p&gt;В остальных же случаях просто используем инструкцию &lt;strong&gt;COPY&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;инструкция-для-запуска-приложения-entrypoint-cmd&quot;&gt;Инструкция для запуска приложения ENTRYPOINT, CMD&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;В идеале инструкция для запуска приложения помещается в последнюю строку файла &lt;strong&gt;Dockerfile&lt;/strong&gt;. &lt;strong&gt;CMD&lt;/strong&gt; устанавливает команду, которая будет выполняться при запуске контейнера из образа и имеет следующий синтаксис &lt;code class=&quot;highlighter-rouge&quot;&gt;CMD [&quot;executable&quot;,&quot;param1&quot;,&quot;param2&quot;]&lt;/code&gt;. Если вы вдруг решите использовать несколько &lt;strong&gt;CMD&lt;/strong&gt; в одном &lt;strong&gt;Dockerfile&lt;/strong&gt;, эффект даст только последняя команда.&lt;/p&gt;

&lt;p&gt;Инструкция &lt;strong&gt;ENTRYPOINT&lt;/strong&gt; делает по сути тоже самое, но в неё рекомендуется помещать только, те команды, которые не должны меняться, например, контейнер в любом случае должен запустить определённый файл, соответственно можно поместить команду в &lt;strong&gt;ENTRYPOINT&lt;/strong&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;ENTRYPOINT [&quot;python&quot;]
CMD [&quot;--help&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Используя &lt;strong&gt;ENTRYPOINT&lt;/strong&gt;, вы указываете какой процесс должен запускаться при старте контейнера. &lt;strong&gt;CMD&lt;/strong&gt; же нужен для того, чтобы передать параметры по умолчанию для процесса. Также, когда вы запускаете вы можете передать свои значения для &lt;strong&gt;CMD&lt;/strong&gt;, т.е. заменить параметры по умолчанию, которые прописаны в &lt;strong&gt;Dockerfile&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run myapp:1.2
docker run myapp:1.2 --version
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;инструкция-expose&quot;&gt;Инструкция EXPOSE&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно если мы говорим об образе для веб-приложения, то нам нужно порт, через который мы сможем получить доступ к приложение из вне. Для того, чтобы указать какой порт будет использоваться в образе  используется  &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#expose&quot;&gt;EXPOSE&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;EXPOSE 80/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;инструкция-run&quot;&gt;Инструкция RUN&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы используем &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#run&quot;&gt;RUN&lt;/a&gt; для того, чтобы выполнять команды при сборке образа. Например, установить обновления на базовый образ, или установить новые пакеты в новый образ.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y curl
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;инструкция-user&quot;&gt;Инструкция USER&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы как пользователь Linux уже ни раз слышали, что не стоит запускать сервисы от &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;, для контейнеров используется тоже правило. Для того чтобы запустить сервис в контейнере от другого пользователя используется инструкция &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#user&quot;&gt;USER&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;USER patrick
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;многоэтапная-сборка-docker-образа&quot;&gt;Многоэтапная сборка Docker образа&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже просмотрели как создать один образ используя один файл &lt;strong&gt;Dockerfile&lt;/strong&gt;, но что если нам для работы одного приложения понадобиться собрать несколько образов? Самый простой пример для чего это нужно - это когда в одном образе вы просто делаете сборку приложения, а во втором образе уже запускаете само приложение.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM golang:1.22-alpine3.20 as build
WORKDIR /app
RUN echo &quot;print('Hello')&quot; &amp;gt;&amp;gt; mypython.py

FROM python:3.9-slim
WORKDIR /myapp
COPY --from=build /app/mypython.py .
CMD [&quot;python&quot;, &quot;mypython.py&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build . -t mymulti:1.0
docker run --rm mymulti:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Hello&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;обновление-docker-образа-и-кэш&quot;&gt;Обновление Docker образа и кэш&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый раз, когда мы запускаем &lt;strong&gt;build&lt;/strong&gt; впервые все изменения слоёв кэшируются, т.е. если вы повторно запускаете &lt;strong&gt;build&lt;/strong&gt; и не поменяли в &lt;strong&gt;Dockerfile&lt;/strong&gt; ничего, то build полностью пройдёт с использованием кэша, что ускорит процесс сборки.&lt;/p&gt;

&lt;p&gt;Если же вы изменили какую-то строку, а соответственно и слой, то при сборке этот слой уже не будет использовать кэш, и все последующие слои тоже.&lt;/p&gt;

&lt;p&gt;Так что если вы хотите не использовать кэш? Например, если вдруг у вас в сборке есть команды для обновления пакетов и вы хотите, чтобы образ был свежим. Тогда просто добавляем опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--no-cache&lt;/code&gt; к команде &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build . -t mymulti:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CACHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stage&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build --no-cache . -t mymulti:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stage&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Все инструкции (конфигурации) для будущего образа задаются в файле &lt;strong&gt;Dockerfile&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dockerfile&lt;/strong&gt; начинается с базового образа (&lt;strong&gt;from&lt;/strong&gt;)&lt;/li&gt;
  &lt;li&gt;Всегда указывайте определённые версии базового образа, пакетов, зависимостей&lt;/li&gt;
  &lt;li&gt;Старайтесь максимально уменьшить размер вашего образа (повысить время выкладки приложения)&lt;/li&gt;
  &lt;li&gt;Используйте &lt;strong&gt;COPY&lt;/strong&gt; вместо &lt;strong&gt;ADD&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Используйте &lt;strong&gt;ENTRYPOINT&lt;/strong&gt; в связке с &lt;strong&gt;CMD&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 18 Sep 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/k8s-docker-image-build</link>
        <guid isPermaLink="true">http://www.tipoit.kz/k8s-docker-image-build</guid>
        
        <category>docker</category>
        
        <category>k8s</category>
        
        <category>devops</category>
        
        <category>kubernetes</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Kubernetes - Архитектура</title>
        <description>&lt;p&gt;Немного я конечно запоздал с изучением этой технологии, но как говорится лучше поздно чем никогда. В этой статье я попытаюсь максимально понятно разобрать архитектуру &lt;strong&gt;Kubernetes&lt;/strong&gt;, какие компоненты за что отвечают.&lt;/p&gt;

&lt;p&gt;Самое первое что нужно запомнить про &lt;strong&gt;Kubernetes&lt;/strong&gt; это то что система считается распределённой, т.е. множество компонентов размещены на разных узлах (устройствах). Эти узлы могут быть как виртуальными, так и физическими, но лучше конечно физические. Всё это вместе называется &lt;strong&gt;кластером Kubernetes&lt;/strong&gt;, который изображён на схеме ниже.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/kubik-1.drawio.png&quot; alt=&quot;Kubernetes Architecture&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Как вы уже догадались из схемы выше каждый кластер &lt;strong&gt;Kubernetes&lt;/strong&gt; состоит из &lt;strong&gt;рабочих узлов (worker nodes)&lt;/strong&gt; и &lt;strong&gt;узлов управления (control plane nodes)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Рассмотрим поподробнее каждый из типов узлов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;рабочий-узел-worker-node&quot;&gt;Рабочий узел (worker node)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала давайте разберёмся что такое &lt;strong&gt;под (pod)&lt;/strong&gt; в Kubernetes, потому как слышать это слово вы будете часто. Под — это &lt;strong&gt;абстрактный объект Kubernetes, представляющий собой группу из одного или нескольких контейнеров приложения&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Эти узлы (Рабочий узел) отвечают за работу контейнеров используя среду контейнеризации, например, такую как &lt;code class=&quot;highlighter-rouge&quot;&gt;containerd&lt;/code&gt;.  Каждый рабочий узел в кластере &lt;strong&gt;Kubernetes&lt;/strong&gt; имеет необходимые компоненты для работы с контейнерами. Ваш кластер может состоять и из одного рабочего узла, но чем больше, тем лучше.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Рабочий узел (worker node)&lt;/strong&gt; имеет следующие компоненты:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;kubelet&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Container runtime&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;kube-proxy&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;На &lt;strong&gt;рабочий узел (worker node)&lt;/strong&gt; возлагаются следующие функции:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Конечно же самый первый и основной - это запуск контейнеров&lt;/li&gt;
  &lt;li&gt;Выдача ip адресов&lt;/li&gt;
  &lt;li&gt;Управление хранилищем данных&lt;/li&gt;
  &lt;li&gt;Распределение ресурсов&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В итоге получается, что &lt;strong&gt;Kubernetes&lt;/strong&gt; запускает ваше приложение помещая контейнеры в поды на &lt;strong&gt;рабочих узлах (worker nodes)&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;имя-рабочего-узла-worker-node-name&quot;&gt;Имя рабочего узла (worker node name)&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как и во многих других системах идентификация рабочего узла происходит по имени, поэтому рекомендуется выдавать такое имя, по которому вы сразу поймёте, что это за рабочий узел и где он находится. Естественно &lt;strong&gt;имя рабочего узла должно быть уникальным&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;узел-управления-control-plane-node&quot;&gt;Узел управления (control plane node)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Узел управления (control plane node)&lt;/strong&gt; отвечает за управление контейнерами и также поддерживание рабочего состояния кластера, также может использоваться название &lt;strong&gt;Master Node&lt;/strong&gt;. В кластере может быть несколько узлов управления, и каждый узел управления имеет следующие компоненты:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;kube-apiserver&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;kube-scheduler&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;kube-controller-manager&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;etcd&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;cloud-controller-manager&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;компоненты-рабочего-узла-worker-node-components&quot;&gt;Компоненты рабочего узла (worker node components)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно же мы просто обязаны теперь рассмотреть все компоненты по порядку.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;kubelet&quot;&gt;Kubelet&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Kubelet&lt;/strong&gt; - это агент, который запущен на каждом рабочем узле (worker node) как демон в системе, управляемый &lt;code class=&quot;highlighter-rouge&quot;&gt;systemd&lt;/code&gt;. Этот демон отвечает за регистрацию всех рабочих узлов в кластере, используя при этом &lt;strong&gt;kube-apiserver&lt;/strong&gt;. Также, когда говорим о &lt;strong&gt;Kubelet&lt;/strong&gt; стоит упомянуть и о &lt;code class=&quot;highlighter-rouge&quot;&gt;podSpec&lt;/code&gt; (спецификация подов). Это &lt;code class=&quot;highlighter-rouge&quot;&gt;YAML&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt; файл, в котором указывается какие контейнеры должны быть запущены на конкретном узле, а также их характеристики, такие как ЦПУ, ОЗУ и т.д. Этот файл в первую очередь рабочие узлы получают от &lt;strong&gt;kube-apiserver&lt;/strong&gt; через нашего героя - &lt;strong&gt;Kubelet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Также &lt;strong&gt;Kubelet&lt;/strong&gt; используется для отслеживания состояния подов и работы с системой контейнеризации, например, скачивание образов, создание или удаление контейнеров.&lt;/p&gt;

&lt;p&gt;Вот за что отвечает &lt;strong&gt;Kubelet&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Создание, удаление и модификация контейнеров&lt;/li&gt;
  &lt;li&gt;Отвечает за монтирование томов для подов&lt;/li&gt;
  &lt;li&gt;Сбор и предоставление данных о состоянии узлов и подов&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Помимо &lt;strong&gt;kube-apiserver&lt;/strong&gt; спецификацию подов (&lt;code class=&quot;highlighter-rouge&quot;&gt;podSpec&lt;/code&gt;) &lt;strong&gt;Kubelet&lt;/strong&gt; может получить и из файла по &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTP&lt;/code&gt;. Используется для статических подов в Kubernetes (&lt;strong&gt;Kubernetes static pods&lt;/strong&gt;). Такие поды контролируются конкретно &lt;strong&gt;Kubelet&lt;/strong&gt;, не с помощью &lt;strong&gt;kube-apiserver&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ещё немного фактов о &lt;strong&gt;Kubelet&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Использует &lt;code class=&quot;highlighter-rouge&quot;&gt;CRI&lt;/code&gt; (container runtime interface), который используется для работы с контейнеризацией&lt;/li&gt;
  &lt;li&gt;Использует &lt;code class=&quot;highlighter-rouge&quot;&gt;CSI&lt;/code&gt; (container storage interface) для конфигурации блочных томов&lt;/li&gt;
  &lt;li&gt;Используя протокол &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTP&lt;/code&gt; предоставляет возможность трансляции логов&lt;/li&gt;
  &lt;li&gt;Используя плагин &lt;code class=&quot;highlighter-rouge&quot;&gt;CNI&lt;/code&gt; для назначения подам ip-адресов, настройки файрволла и необходимых роутов&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;После всего изложенного про &lt;strong&gt;Kubelet&lt;/strong&gt; получаем следующую схему:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/kubik-kubelet.drawio.png&quot; alt=&quot;Kubernetes kubelet&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;kube-proxy&quot;&gt;Kube proxy&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут будет немного посложнее, для начала давайте разберёмся что такое &lt;strong&gt;сервис&lt;/strong&gt; в Kubernetes . Под &lt;strong&gt;сервисом&lt;/strong&gt; подразумевается какое-то количество подов собранные в одну группу. Также благодаря &lt;strong&gt;сервису&lt;/strong&gt; поды получают внутренний или внешний трафик. Когда вы создаёте сервис он получает &lt;strong&gt;виртуальный ip-адрес&lt;/strong&gt;, также называемый &lt;strong&gt;clusterIP&lt;/strong&gt;. Этот виртуальный ip-адрес доступен только внутри кластера Kubernetes.&lt;/p&gt;

&lt;p&gt;Объект &lt;strong&gt;Endpoint&lt;/strong&gt; содержит все IP-адреса и порты подов в рамках объекта &lt;strong&gt;Service&lt;/strong&gt;. Контроллер &lt;strong&gt;Endpoint&lt;/strong&gt; отвечает за ведение списка IP-адресов подов (конечных точек). Контроллер сервиса отвечает за настройку конечных точек службы.&lt;/p&gt;

&lt;p&gt;Последнее что еще нужно знать это то, что вы не сможете пропинговать &lt;strong&gt;clusterIP&lt;/strong&gt;, но сможете пропинговать ip-адреса подов.&lt;/p&gt;

&lt;p&gt;Теперь наконец-то про &lt;strong&gt;Kube proxy&lt;/strong&gt;. &lt;strong&gt;Kube proxy&lt;/strong&gt; - это демон, который запущен на каждом рабочем узле. Это прокси компонент, благодаря которому возможно использование сервисов Kubernetes. Он в основном проксирует UDP, TCP и SCTP для подов и не понимает HTTP.&lt;/p&gt;

&lt;p&gt;Если просто, то благодаря &lt;strong&gt;Kube proxy&lt;/strong&gt; при обращении к сервису (&lt;strong&gt;clusterIP&lt;/strong&gt;) создаются правила, благодаря которым через виртуальный ip-адрес сервиса доступ предоставляется к ip-адресам подов. Поэтому и называется прокси.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kube proxy&lt;/strong&gt; обращается к &lt;strong&gt;kube-apiserver&lt;/strong&gt; для получения данных о сервисе (&lt;strong&gt;clusterIP&lt;/strong&gt;) и о ip-адресах, портах для подов. Конечно при изменении этих данных он сразу же применяет их.&lt;/p&gt;

&lt;p&gt;Для перенаправления трафика &lt;strong&gt;Kube proxy&lt;/strong&gt; может использовать одну из следующих технологий:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;IPTables&lt;/code&gt;: Знакомая штука для любителей &lt;code class=&quot;highlighter-rouge&quot;&gt;Linux&lt;/code&gt;, которая используется в &lt;strong&gt;Kube proxy&lt;/strong&gt; по умолчанию. Для каждого сервиса создаются свои правила &lt;code class=&quot;highlighter-rouge&quot;&gt;IPTables&lt;/code&gt;. Благодаря этим правилам весь трафик приходящий на &lt;strong&gt;clusterIP&lt;/strong&gt; перенаправляется на нужный под. Какому из подов перенаправить трафик выбирается случайным образом. После выбора весь последующий трафик будет перенаправляется именно выбранному поду, пока он не станет недоступным (сам под).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;IPVS&lt;/code&gt;: Думаю, что использовать этот тип будут не многие, так как его рекомендуется использовать если у вас вдруг в кластере Kubernetes используется более 1000 сервисов.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Kernelspace&lt;/code&gt;: Используется только в Windows&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;nftables&lt;/code&gt;: это преемник &lt;code class=&quot;highlighter-rouge&quot;&gt;IPtables&lt;/code&gt;, который разработан, чтобы упростить работу и повысить эффективность. Но необходимо проверить вышел ли он из стадии Альфа-функции&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;container-runtime&quot;&gt;Container Runtime&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Container Runtime&lt;/strong&gt; - это программный компонент, необходимый для запуска контейнеров. Этот компонент собственно отвечает за любые манипуляции с контейнерами, например, создание контейнера, скачивание образов и т.д.&lt;/p&gt;

&lt;p&gt;В качестве &lt;strong&gt;среды контейнеризации&lt;/strong&gt; может использоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;CRI-O&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Docker Engine&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;containerd&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Mirantis Container Runtime&lt;/code&gt;. Среда контейнеризации для Kubernetes должна быть совместима с &lt;strong&gt;&lt;a href=&quot;https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md&quot;&gt;Container Runtime Interface (CRI)&lt;/a&gt;&lt;/strong&gt;. Это значит что среда контейнеризации должна иметь интерфейс &lt;code class=&quot;highlighter-rouge&quot;&gt;CRI&lt;/code&gt; и поддерживать &lt;a href=&quot;https://kubernetes.io/docs/concepts/architecture/cri/&quot;&gt;CRI APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Также мы уже знаем, что благодаря &lt;strong&gt;Kubelet&lt;/strong&gt; есть список того какие контейнеры нам нужно запустить и с каким характеристиками. Этап создания этих контейнеров выглядит так:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Когда поступает запрос на под от &lt;strong&gt;kube-apiserver&lt;/strong&gt;, &lt;strong&gt;kubelet&lt;/strong&gt; обращается к демону среды контейнеризации, чтобы запустить необходимые контейнеры через интерфейс &lt;code class=&quot;highlighter-rouge&quot;&gt;CRI&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Среда контейнеризации запускает эти контейнеры&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;компоненты-узла-управления-control-plane-node-components&quot;&gt;Компоненты узла управления (control plane node components)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;И конечно же рассмотрим все компоненты узла управления.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;kube-apiserver&quot;&gt;kube-apiserver&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самый главный компонент в кластере &lt;strong&gt;Kubernetes&lt;/strong&gt;, который предоставляет собственно &lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt; для &lt;strong&gt;Kubernetes&lt;/strong&gt;. Считается хорошо масштабируемым и высокопроизводительным одновременно.&lt;/p&gt;

&lt;p&gt;Чаще всего к &lt;strong&gt;kube-apiserver&lt;/strong&gt; обращается конечный пользователь и другие компоненты кластера, например, &lt;strong&gt;Kubelet&lt;/strong&gt;. Изредка к нему также могут подключаться разные системы мониторинга, если вы их настроили конечно.&lt;/p&gt;

&lt;p&gt;Когда вы используете утилиту &lt;strong&gt;kubectl&lt;/strong&gt; для управления кластера вы по сути работаете с &lt;strong&gt;kube-apiserver&lt;/strong&gt; через &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTP REST APIs&lt;/code&gt;, только в удобном для вас виде. Каждая ваша команда, выполняемая через &lt;strong&gt;kubectl&lt;/strong&gt; преобразуется в запросы, которые уже в последствии обрабатывает &lt;strong&gt;kube-apiserver&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Дальше сам &lt;strong&gt;kube-apiserver&lt;/strong&gt; обращается к другим компонентом для выполнения команд. Коммуникация между &lt;strong&gt;kube-apiserver&lt;/strong&gt; и другими компонентами происходит через &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS&lt;/code&gt; соединения.&lt;/p&gt;

&lt;p&gt;Компонент &lt;strong&gt;kube-apiserver&lt;/strong&gt; также имеет свой прокси (&lt;strong&gt;apiserver proxy&lt;/strong&gt;), который используется для доступа к &lt;code class=&quot;highlighter-rouge&quot;&gt;ClusterIP&lt;/code&gt; из-за пределов кластера.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/kubik-kube-apiserver.drawio.png&quot; alt=&quot;Kubernetes kube-apiserver&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kube-apiserver&lt;/strong&gt; в кластере &lt;strong&gt;Kubernetes&lt;/strong&gt; отвечает за следующее:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Управление API&lt;/code&gt;: выступает в роли шлюза для всех API запросов&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Аутентификация и Авторизация&lt;/code&gt;: предоставляет услуги аутентификации для всех компонентов в кластере используя сертификаты, токены и HTTP-аутентификацию&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Обработка API запросов&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Также является единственным компонентом, который обращается к &lt;strong&gt;etcd&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Занимается координацией всех процессов между компонентами узла управления и компонентами рабочего узла&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Кстати у &lt;strong&gt;kube-apiserver&lt;/strong&gt; есть функция которая даёт вам возможность писать свой собственный &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt;, подробнее &lt;a href=&quot;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Когда вы создайте сервер, на котором будет расположен &lt;strong&gt;kube-apiserver&lt;/strong&gt; задумайтесь о его безопасности, как минимум это не должен быть сервер с доступом к нему из вне. Иначе можете оказаться в таком вот &lt;a href=&quot;https://www.shadowserver.org/news/over-380-000-open-kubernetes-api-servers/&quot;&gt;неудачном списке&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;etcd&quot;&gt;etcd&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;По сути является базой данных в кластере &lt;strong&gt;Kubernetes&lt;/strong&gt;. Так как сам &lt;strong&gt;Kubernetes&lt;/strong&gt; является распределённой системой, что-то общее между узлами всё-таки должно быть. &lt;strong&gt;Etcd&lt;/strong&gt; используется как средство обнаружения служб и база данных.&lt;/p&gt;

&lt;p&gt;Сам &lt;strong&gt;etcd&lt;/strong&gt; является &lt;a href=&quot;https://github.com/etcd-io/etcd&quot;&gt;open-source приложением&lt;/a&gt;, выступающим как хранилище для данных типа ключ-значение.&lt;/p&gt;

&lt;p&gt;В &lt;strong&gt;Kubernetes&lt;/strong&gt; он используется потому что обладает следующими функциями:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Гарантированная доставка&lt;/code&gt;: Если какое-то обновление выполнено на одному узлу, оно точно будет доставлено всем другим узлам в сети&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Раздельность&lt;/code&gt;: предназначен для работы на нескольких узлах в виде кластера&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Алгоритм raft&lt;/code&gt;: etcd использует алгоритм консенсуса &lt;strong&gt;raft&lt;/strong&gt; для обеспечения строгой согласованности и доступности. Для примера компонент orderer в hyperledger fabric тоже использует этот алгоритм.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Когда вы используете &lt;strong&gt;kubectl&lt;/strong&gt; для просмотра каких-то данных в кластере &lt;strong&gt;Kubernetes&lt;/strong&gt; вы по сути вытаскиваете эти данные из &lt;strong&gt;etcd&lt;/strong&gt;. Также, когда вы запускаете новые поды информация о них, помещается и хранится в &lt;strong&gt;etcd&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Вот что ещё будет не лишним знать о &lt;strong&gt;etcd&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;etcd&lt;/strong&gt; хранит все конфигурации, статусы и метаданные каждого объекта в кластере &lt;strong&gt;Kubernetes&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;когда вы используете метод &lt;code class=&quot;highlighter-rouge&quot;&gt;Watch()&lt;/code&gt; через &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; ответ вы также получаете из данных, которые хранятся в &lt;strong&gt;etcd&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;etcd&lt;/strong&gt; как и многие сервисы предоставляет свой &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; для работы с ним, который конечно же использует &lt;strong&gt;kube-apiserver&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;все объекты в кластере &lt;strong&gt;etcd&lt;/strong&gt; по умолчанию хранит в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/registry&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;kube-scheduler&quot;&gt;kube-scheduler&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;kubik-kube-scheduler.drawio.png&lt;/p&gt;

&lt;p&gt;Основная задача &lt;strong&gt;kube-scheduler&lt;/strong&gt; является планирование запуска подов на &lt;strong&gt;рабочих узлах (worker nodes)&lt;/strong&gt;. При развертывании пода вы указываете требования к процессору, памяти и другим характеристикам пода &lt;strong&gt;kube-scheduler&lt;/strong&gt; обрабатывает ваш запрос и выбирает самый лучший для этого рабочий узел, который соответствует требованиям.&lt;/p&gt;

&lt;p&gt;Отсюда возникает логичный вопрос как именно он определяет какой рабочий узел использовать? Для того чтобы выбрать подходящий узел &lt;strong&gt;kube-scheduler&lt;/strong&gt; использует операции фильтрации и оценки.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Используя фильтрацию он находит подходящие узлы, на которых можно разместить поды. Если вдруг у вас несколько подходящих узлов, то он выберет все. Если же нет ни одного подходящего узла, то поды останутся висеть в очереди на размещение.&lt;/li&gt;
  &lt;li&gt;После фильтрации запускается процесс оценки, в котором оценивается насколько тот или иной узел соответствует характеристикам подов. Если у вас слишком большой кластер, то этот процесс может занять какое-то время. Параметр &lt;code class=&quot;highlighter-rouge&quot;&gt;percentageOfNodesToScore&lt;/code&gt; задаёт минимальное количество узлов в кластере для оценки в процентном соотношении. По умолчанию это 50%, но если кластер очень большой, то это значение равняется 5%.&lt;/li&gt;
  &lt;li&gt;В итоге узел с самым большим рангом будет выбран для размещения подов. Если же найдётся несколько узлов с одинаковыми рангами, то выберется первый случайный.&lt;/li&gt;
  &lt;li&gt;После выбора узла &lt;strong&gt;kube-scheduler&lt;/strong&gt; создаёт заявку сопоставления узла и подов на &lt;strong&gt;kube-apiserver&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Конечно же не всегда нужно автоматическое распределение. При необходимости вы можете создать свой собственный планировщик в файле конфигурации пода, что приведёт к размещению на конкретном узле.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;kube-controller-manager&quot;&gt;Kube Controller Manager&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Kube Controller Manager&lt;/strong&gt; необходим для мониторинга состояния вашего кластера, является основным компонентом в &lt;strong&gt;control plane&lt;/strong&gt;. Он запускает процессы контроллеров, которые необходимы для выполнения рутинных операций, гарантируя, что текущее состояние кластера соответствует желаемому состоянию, указанному пользователем. &lt;strong&gt;Kube Controller Manager&lt;/strong&gt; также управляется &lt;strong&gt;kube-scheduler&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы понять получше необходимость в &lt;strong&gt;Kube Controller Manager&lt;/strong&gt; представим пример, где вы решили развернуть кластер с двумя репликами, одним общим хранилищем и т.д. Встроенный контроллер в &lt;strong&gt;Kube Controller Manager (Deployment Controller)&lt;/strong&gt; гарантирует что будет создано две реплики, и если вдруг вы решите увеличить количество реплик, то он также сделает это ради вас.&lt;/p&gt;

&lt;p&gt;Вот список некоторых особо важных контроллеров:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Node Controller&lt;/strong&gt;: отвечает за процесс мониторинга активности узла. Если вдруг узел не отвечает, то Node Controller оповещает об этом. Если же узел недоступен какое-то время, то запускается процесс пересоздания подов на другом узле.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Replication Controller&lt;/strong&gt;: собственно, отвечает за соблюдение настроек репликации&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Service Account &amp;amp; Token Controllers&lt;/strong&gt;: Отвечает за учетные записи по умолчанию и токены доступа к API&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Deployment Controller&lt;/strong&gt;: Отвечает за управление жизненным циклом развертываний, обеспечивая соответствие параметрам, заданным пользователем.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для соблюдения отказоустойчивости в вашем кластере должно быть несколько узлов с компонентом &lt;strong&gt;Kube Controller Manager&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Мы также не лишены возможности создавать свои собственные контроллеры, но об этом не в этой статье.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;cloud-controller-manager-ccm&quot;&gt;Cloud Controller Manager (CCM)&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы уже наверняка знаете, что почти все популярные облачные сервисы предоставляют возможность использования &lt;strong&gt;Kubernetes&lt;/strong&gt;, и конечно необходимо управлять кластером в облаке. Возможность управления облачным кластером даёт компонент &lt;strong&gt;Cloud Controller Manager (CCM)&lt;/strong&gt;, который выступает как мост между нашим кластеров и &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; сервисом облачного провайдера.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Controller Manager (CCM)&lt;/strong&gt; является компонентом &lt;strong&gt;узла управления (control plane node component)&lt;/strong&gt;. Но вы также можете запустить &lt;strong&gt;Cloud Controller Manager&lt;/strong&gt; как &lt;a href=&quot;https://kubernetes.io/docs/concepts/cluster-administration/addons/&quot;&gt;надстройку Kubernetes&lt;/a&gt;, а не как часть  узла управления.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Controller Manager&lt;/strong&gt; включает группу контроллеров как и в случае с &lt;strong&gt;Kube Controller Manager&lt;/strong&gt;. Для примера рассмотрим золотую троицу:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Node Controller&lt;/strong&gt;: используя &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; провайдера облачного сервиса получает информацию о узлах, такую как имя узла, свободные ресурсы, статус узла и т.д.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Route controller&lt;/strong&gt;: отвечает за настройку маршрутов в сети благодаря чему разные контейнеры на разных узлах могут обращаться друг к другу по сети. В зависимости от облачного провайдера также может выделять блоки IP-адресов&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Service controller&lt;/strong&gt;: используется для развёртывания узлов балансировки нагрузки, назначения ip адресов, фильтрации сетевых пакетов&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 18 Sep 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/k8s-architecture</link>
        <guid isPermaLink="true">http://www.tipoit.kz/k8s-architecture</guid>
        
        <category>kubernetes</category>
        
        <category>container</category>
        
        <category>docker</category>
        
        
      </item>
    
      <item>
        <title>Docker - Демонстрация силы Docker Volume</title>
        <description>&lt;p&gt;Если не знаете что такое Docker Volume то рекомендую сперва &lt;a href=&quot;https://www.tipoit.kz/docker-persistent-storage&quot;&gt;почитать про это тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Многие переходят на контейнеризацию из-за быстрого и лёгкого способа обновления. Например если необходимо перейти с одной версии баз данных на другую. При использовании обычного подхода с хостовой ОС это требует больше манипуляций чем при использовании контейнеризации. Например, нужно добавить или активировать репозиторий, далее возможно обновить какие-то компоненты самой ОС и т.д.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-31.svg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;создание-контейнера-с-postgresql&quot;&gt;Создание контейнера с PostgreSQL&lt;/h3&gt;

&lt;p&gt;Так как сейчас очень распространён PostgreSQL я буду использовать именно его для примера. &lt;strong&gt;Но важное замечание никогда не обновляйте контейнер с базой данных, не прочитав рекомендации и требования на официальном сайте.&lt;/strong&gt; Например, чтобы перейти с версии 17 на 18 необходимо выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;pg_upgrade&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Для начала создам Docker Volume
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker volume create pg_volume
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Вторым этапом я создам контейнер с образа &lt;code class=&quot;highlighter-rouge&quot;&gt;postgres:17&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d -v pg_volume:/var/lib/postgresql/data -e &lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;mysecretpassword --name some-postgres postgres:17
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;сохранение-информации&quot;&gt;Сохранение информации&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Создаю новую БД
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it some-postgres psql -U &lt;span class=&quot;s1&quot;&gt;'postgres'&lt;/span&gt; -w -h localhost -c &lt;span class=&quot;s1&quot;&gt;'CREATE DATABASE TEST;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаю таблицу
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it some-postgres psql -U &lt;span class=&quot;s1&quot;&gt;'postgres'&lt;/span&gt; -w -h localhost -d &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; -c &lt;span class=&quot;s1&quot;&gt;'CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, age INT);`
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Вставляю данные
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it some-postgres psql -U &lt;span class=&quot;s1&quot;&gt;'postgres'&lt;/span&gt; -w -h localhost -d &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; -c &lt;span class=&quot;s2&quot;&gt;&quot;INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25);&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяю всё
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it some-postgres psql -U &lt;span class=&quot;s1&quot;&gt;'postgres'&lt;/span&gt; -w -h localhost -d &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; -c &lt;span class=&quot;s2&quot;&gt;&quot;SELECT * FROM users;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;удаление-контейнера&quot;&gt;Удаление контейнера&lt;/h3&gt;

&lt;p&gt;Теперь я удаляю существующий контейнер и проверяю что Docker Volume остался.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container rm -f some-postgres 
docker volume ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;создание-нового-контейнера&quot;&gt;Создание нового контейнера&lt;/h3&gt;

&lt;p&gt;Теперь я создаю новый контейнер с версией выше (17.6) используя существующий Docker Volume и проверяю что данные те же, что я записал ранее.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker container run -d -v pg_volume:/var/lib/postgresql/data -e &lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;mysecretpassword --name some-postgres2 postgres:17.6
docker &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; -it some-postgres2 psql -U &lt;span class=&quot;s1&quot;&gt;'postgres'&lt;/span&gt; -w -h localhost -d &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; -c &lt;span class=&quot;s2&quot;&gt;&quot;SELECT * FROM users;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----+-------+-----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Alice&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bob&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rows)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 16 Sep 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-volume-demo</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-volume-demo</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Постоянное хранилище</title>
        <description>&lt;p&gt;Как часто вы слышали байку о том, что при удалении контейнера все данные удаляются? На самом деле это конечно так, но не совсем. Некоторые считают это самым главным минусом так как боятся потерять важные данные и даже отказываются из-за этого от контейнеризации. Но этого можно легко избежать.&lt;/p&gt;

&lt;p&gt;Контейнеры в докере вещи эфемерные, получается, что по сути это временная среда. Т.е. всё что находится внутри контейнера исчезнет при его удалении. При выполнении команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker rm myapp&lt;/code&gt; Docker удаляет верхний слой, в котором происходят операции записи и чтения, &lt;a href=&quot;https://www.tipoit.kz/docker-layers-and-cahce&quot;&gt;подробнее про слои&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Запомните контейнер — это не виртуальный сервер, а временная изолированная среда. Главная цель контейнера быстро запуститься и быстро исчезнуть без следов. Так происходит потому что девиз контейнеризации — это не менять конфигурацию контейнера, а каждый раз всё пересоздавать.&lt;/p&gt;

&lt;p&gt;Перезапуск или остановка контейнера не приводит к потере данных, только удаление контейнера.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-27.svg&quot; alt=&quot;ЖИЗНЕННЫЙ ЦИКЛ ДАННЫХ В КОНТЕЙНЕРЕ&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;так-что-с-важными-данными&quot;&gt;Так что с важными данными?&lt;/h3&gt;

&lt;p&gt;Понятное дело, что веб сервера или сервера приложений зачастую можно пересоздавать, удаляя данные без проблем. Но бывают ситуации, когда необходимо использовать контейнеры с важными данными, это могут быть лог файлы приложения или то еще важнее база данных. Конечно про хранение базы данных в контейнере много холивара, но тут каждый решает сам использовать контейнеризацию для этого или нет.&lt;/p&gt;

&lt;p&gt;Для того чтобы сохранить важные данные от удаления Docker предоставляет две возможности:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;использовать тома (Docker Volume)&lt;/li&gt;
  &lt;li&gt;монтирование локальной папки (Bind mount)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;docker-volume&quot;&gt;Docker Volume&lt;/h3&gt;

&lt;p&gt;Docker Volume - это &lt;strong&gt;постоянное хранилище&lt;/strong&gt;, которым управляет сам Docker. Т.е. созданием этих томов занимается сам Docker. Эти тома хранятся по умолчанию в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/docker/volumes/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;При использовании Docker Volume правами на тома управляет сам Docker, он задаёт владельцев, права и монтирует их только при запуске контейнера.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-28.svg&quot; alt=&quot;DOCKER VOLUME — ПОСТОЯННОЕ ХРАНИЛИЩЕ&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;docker-volume-в-dockerfile&quot;&gt;Docker Volume в Dockerfile&lt;/h4&gt;

&lt;p&gt;При использовании контейнеров для некоторых типов требуется создавать Docker Volume прямо в образе, например, образ приложений баз данных (&lt;a href=&quot;https://hub.docker.com/_/mariadb&quot;&gt;mariadb&lt;/a&gt;).&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;VOLUME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/mysql&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь при запуске контейнера автоматически будет создан том для контейнера и при его удалении база данных не удалится. Т.е. создатель образа уже заранее об этом позаботился.&lt;/p&gt;

&lt;p&gt;Для примера я создам контейнер с образа mariadb:latest:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --detach --name some-mariadb -e &lt;span class=&quot;nv&quot;&gt;MARIADB_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my-secret-pw mariadb:latest
docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;568132&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fbaf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mariadb:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;docker-entrypoint.s…&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;44&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3306&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-mariadb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь при просмотре конфигурации контейнера у него будет как минимум один существующий тов.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker inspect -f &lt;span class=&quot;s1&quot;&gt;'{{json .Mounts}}'&lt;/span&gt; some-mariadb | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;volume&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ec0302b40bf39f5c983464ebb95c0a3fa8e70f6ecdd5ec28bbeb9d8a271151e7&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/docker/volumes/64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70/_data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Destination&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/mysql&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Driver&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;local&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Mode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;RW&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Propagation&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода команды можно догадаться что файлы хранятся в локальной директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/docker/volumes/64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70/_data&lt;/code&gt;.  Скажу сразу удалить эту директорию на хосте и потерять данные можно, Docker не защищает директорию /var/lib/docker/volumes/ от удаления файлов.&lt;/p&gt;

&lt;h3 id=&quot;список-docker-volume&quot;&gt;Список Docker Volume&lt;/h3&gt;

&lt;p&gt;Выше я проверил какой том используется контейнером используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker inspect&lt;/code&gt;. Но для управления томами в Docker есть отдельная команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker volume&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Просмотр всех томов в Docker
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker volume ls
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64165&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;246&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bbd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;047&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ba&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;68&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;419&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;83&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cff&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cafa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;505&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;70&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверить конфигурацию тома
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker volume inspect 64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;CreatedAt&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2025-11-03T13:14:44+06:00&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Driver&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;local&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Labels&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;com.docker.volume.anonymous&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Mountpoint&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/lib/docker/volumes/64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70/_data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Scope&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;local&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;docker-volume-в-docker-run&quot;&gt;Docker Volume в Docker run&lt;/h3&gt;

&lt;p&gt;Я показал, как можно создать том еще на этапе сборки образа, но можно добавить том при создании контейнера. Этот вариант кстати добавит еще и удобочитаемости при выводе результат выполнения команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker volume ls&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы добавить том в контейнер при его создании используется опция &lt;code class=&quot;highlighter-rouge&quot;&gt;-v&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --detach --name some-mariadb -v some-mariadb-vol1:/var/lib/mysql -e &lt;span class=&quot;nv&quot;&gt;MARIADB_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my-secret-pw
mariadb:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь, когда я выполню команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker volume ls&lt;/code&gt; я увижу нормальное имя тома а не эти бесконечные буквы и цифры. Да и путь к директории тома в самой ОС будет выглядеть лучше.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker volume ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;some-mariadb-vol&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для создания Docker Volume можно также использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;docker volume create&lt;/code&gt;. Но обычно эта команда используется только если нужно указать специфические параметры для тома, которые нельзя указать при выполнении команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker run&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;общий-доступ-к-docker-volume&quot;&gt;Общий доступ к Docker Volume&lt;/h3&gt;

&lt;p&gt;Как нетрудно догадаться если контейнер удалён, а том еще остался то можно добавить этот том в другой контейнер со всеми данными внутри него.&lt;/p&gt;

&lt;p&gt;Также сразу несколько контейнеров могут использовать один и тот же том, но никакой синхронизации операций записи нет. Т.е. один контейнер может с лёгкостью перезаписать изменения другого контейнера или вообще повредить данные, так что будьте осторожны, особенно с базами данных.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-29.svg&quot; alt=&quot;ОБЩИЙ ДОСТУП К DOCKER VOLUME&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;docker-volume-для-уже-созданного-и-работающего-контейнера&quot;&gt;Docker Volume для уже созданного и работающего контейнера&lt;/h3&gt;

&lt;p&gt;К сожалению, тут сделать этого нельзя, только если вы не используете docker-compose.&lt;/p&gt;

&lt;p&gt;Для добавления тома к уже существующему контейнеру придётся его удалить и создать заново. Но если вы всё делаете правильно, то такая операция не должна на что-то повлиять. Если же что-то внутри контейнере лежит важное не в Docker Volume или Bind mount сохраните эти файлы.&lt;/p&gt;

&lt;h3 id=&quot;удаление-docker-volume&quot;&gt;Удаление Docker Volume&lt;/h3&gt;

&lt;p&gt;Теперь, когда у меня есть том для контейнера some-mariadb при удалении самого контейнера данные и сам том должны остаться не тронутыми.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker volume ls
sudo ls /var/lib/docker/volumes/64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70/_data
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;aria_log.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00000001&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ddl_recovery.log&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ibdata&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ibtmp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если после удаления контейнера данные с тома этого контейнера уже не нужны можно удалить сам том, просто удалить директорию в самой ОС недостаточно.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker volume rm 64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70
sudo ls /var/lib/docker/volumes/64165e246eab56a2c5bbd047c07eb2ba68d419a83c51cff1e7a4c8cafa505b70/_data
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ls:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;bind-mount&quot;&gt;Bind mount&lt;/h3&gt;

&lt;p&gt;Благодаря Bind mount можно прокинуть локальную папку с хостовой ОС в контейнер. Соответственно даже при удалении контейнера данные остаются внутри директории хоста с Docker.&lt;/p&gt;

&lt;p&gt;docker run -d -v $(pwd)/data:/usr/src/app/data myapp:1.0&lt;/p&gt;

&lt;p&gt;При выполнении этой команды Docker не создаёт отдельный volume, а просто связывает локальную директорию с директорией внутри контейнера, по сути этакий линк на директорию.&lt;/p&gt;

&lt;p&gt;Но при выборе между Bind mount и Docker Volume рекомендуется использовать именно Docker Volume. Потому что одна из идей Docker это изоляция контейнера от файловой системы хоста, но при Bind mount это идея рушится и управляет правами на доступ к файлам уде сама ОС, а не Docker. Также есть некоторые ограничения при использовании Docker в Docker Swarm и Kubernetes.&lt;/p&gt;

&lt;p&gt;Основное преимущество тут в том, что можно править файлы, используемые контейнером, не залезая в сам контейнер.&lt;/p&gt;

&lt;p&gt;Bind mount невозможно использовать при создании образа, т.е. в Dockerfile. Добавить Bind mount к контейнеру можно только при создании контейнера или при использовании Docker Compose.&lt;/p&gt;

&lt;p&gt;Для проброса локальной директории в контейнер при создании самого контейнера используется опция &lt;code class=&quot;highlighter-rouge&quot;&gt;-v&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --detach --name some-mariadb -v /var/lib/mysql:/var/lib/mysql -e 
sudo ls /var/lib/mysql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-30.svg&quot; alt=&quot;Docker Volume vs Bind mount&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 16 Sep 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-persistent-storage</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-persistent-storage</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Прямой доступ к хранилищу</title>
        <description>&lt;p&gt;При использовании транспорта прямой доступ к хранилищу Veeam Backup &amp;amp; Replication работает с данными (чтение/запись) напрямую через систему хранения данных, на которой расположены вириальные машины.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;прямой-доступ-к-san&quot;&gt;Прямой доступ к SAN&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;#san-cr&quot;&gt;Процесс создания резервной копии&lt;/a&gt; /
&lt;a href=&quot;#san-re&quot;&gt;Процесс восстановления резервной копии&lt;/a&gt; /
&lt;a href=&quot;#san-req&quot;&gt;Требования&lt;/a&gt; /
&lt;a href=&quot;#san-lim&quot;&gt;Лимиты&lt;/a&gt; /&lt;/p&gt;

&lt;p&gt;Прямой доступ к SAN рекомендуется к использованию, когда диски виртуальной машины хранятся на SAN устройствах, которые подключены к хосту ESXI посредством FC, FCoE, iSCSI. В режиме Прямой доступ к SAN для прямой передачи данных виртуальной машины из хранилища по протоколам FC, FCoE, iSCSI используется VMware VADP. Данные виртуальной машины передаются по сети SAN, минуя хосты ESXi и локальную сеть. Что позволяет снизить нагрузку на сеть и как правило быстрее выполнить трансфер данных.&lt;/p&gt;

&lt;h3 id=&quot;san-cr&quot;&gt;Процесс создания резервной копии&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-DirectSANAccess.drawio.png&quot; alt=&quot;veeam Direct SAN Access backup process&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В Veeam Backup &amp;amp; Replication запускается процесс создания резервной копии виртуальной машины&lt;/li&gt;
  &lt;li&gt;Прокси-сервер отправляет запрос хосту ESXI, где расположена ВМ чтобы узнать на каком хранилище находятся данные&lt;/li&gt;
  &lt;li&gt;ESXI хост выясняет где находятся необходимые данные&lt;/li&gt;
  &lt;li&gt;Veeam Backup &amp;amp; Replication инициализирует процесс создания снимка ВМ (snapshot) на ESXI хосте&lt;/li&gt;
  &lt;li&gt;Хост ESXi извлекает метаданные о расположении дисков виртуальной машины в хранилище (физические адреса блоков данных)&lt;/li&gt;
  &lt;li&gt;Хост ESXi отправляет полученные метаданные прокси-серверу&lt;/li&gt;
  &lt;li&gt;Прокси-сервер резервного копирования VMware использует метаданные для копирования блоков данных виртуальной машины непосредственно напрямую с хранилища SAN&lt;/li&gt;
  &lt;li&gt;Резервный прокси-сервер VMware обрабатывает скопированные блоки данных и отправляет их на целевой сервер&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;san-re&quot;&gt;Процесс восстановления резервной копии&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;В Veeam Backup &amp;amp; Replication запускается процесс восстановления виртуальной машины&lt;/li&gt;
  &lt;li&gt;Прокси-сервер получает данные необходимые для восстановления с репозитория резервных копий&lt;/li&gt;
  &lt;li&gt;Прокси-сервер отправляет запросы на восстановление данных хосту ESXI&lt;/li&gt;
  &lt;li&gt;Хост ESXi выделяет место в хранилище данных&lt;/li&gt;
  &lt;li&gt;Данные записываются на хранилище данных&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-DirectSANAccessRecovery.drawio.png&quot; alt=&quot;veeam Direct SAN Access recovery process&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;san-req&quot;&gt;Требования&lt;/h3&gt;

&lt;p&gt;Перед тем как использовать прямой доступ к SAN убедитесь, что все требования соблюдены:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Настоятельно рекомендуется назначить роль прокси-сервера VMware с прямым доступ к SAN именно физическому серверу, при назначении этой роли виртуальной машине производительность может пострадать. Т.е. подключаете ваш физический прокси-сервер VMware к действующей SAN сети (fc switch) и даёте доступ этому серверу к устройствам хранения.&lt;/li&gt;
  &lt;li&gt;Как я уже написал выше необходимо также настроить доступ прокси-сервер VMware к системам хранения данных. Если этого не сделать, то прокси-сервер просто не сможет получить доступ к данным. Например, просто подключить FC кабель от сервера в fc коммутатор не получиться, также придётся настраивать сопоставление хоста с LUN в самой СХД.&lt;/li&gt;
  &lt;li&gt;Тома с СХД также должны быть видны в оснастке управления дисками. Только никогда не делайте инициализацию этих дисков, потому как по умолчанию они находятся в оффлайн режиме чтобы не перезаписать файловую систему на NTFS.&lt;/li&gt;
  &lt;li&gt;Для восстановления прокси-серверу необходимо иметь права на запись&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;san-lim&quot;&gt;Лимиты&lt;/h3&gt;

&lt;p&gt;Обратите внимание на лимиты, так как лично я был немного удивлён:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Режим прямого доступа к SAN может использоваться только для восстановления виртуальных машин с дисками типа thick&lt;/li&gt;
  &lt;li&gt;Если диски у виртуальной машины раскиданы по нескольким СХД и к какой-то из них у прокси-сервера нет доступа, то резервная корпия не будет создана ни для какого диска.&lt;/li&gt;
  &lt;li&gt;Если хотя бы один из дисков находится в vVol вы не сможете создать резервную копию&lt;/li&gt;
  &lt;li&gt;Нет возможности делать резервные копии шаблонов виртуальных машин&lt;/li&gt;
  &lt;li&gt;Прямой доступ к SAN не подойдёт для инкрементального восстановления из-за &lt;a href=&quot;https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere-sdks-tools/8-0/virtual-disk-development-kit-programming-guide/backing-up-virtual-disks-in-vsphere/tips-and-best-practices/best-practices-for-san-transport.html&quot;&gt;ограничений VMware&lt;/a&gt;. Либо отключите CBT для виртуальных дисков VM на время процесса восстановления, либо выберите другой транспортный режим для инкрементального восстановления.&lt;/li&gt;
  &lt;li&gt;Если вы делаете реплику виртуальной машины, то Veeam Backup &amp;amp; Replication будет использовать режим прямого доступа к SAN только для первой сессии. Т.е. все последующие изменения будут реплицироваться в режиме виртуального устройства или сетевого.&lt;/li&gt;
  &lt;li&gt;Также при репликации обращайте внимание на тип дисков для целевой реплики виртуальной машины. Если будет стоять thin, то опять же будет использоваться режим виртуального устройства или сетевого.&lt;/li&gt;
  &lt;li&gt;Multipathing (MPIO) для прокси-серверов на базе Linux в транспортном режиме прямого доступа SAN использует только отказоустойчивые пути, а не балансировку нагрузки&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;прямой-доступ-к-nfs&quot;&gt;Прямой доступ к NFS&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Прямой доступ к NFS рекомендуется к использованию в тех случаях, когда виртуальные диски ВМ хранятся на NFS хранилищах, на основе Ethernet.&lt;/p&gt;

&lt;p&gt;Режим прямого доступа к NFS представляет собой альтернативу сетевому режиму. Когда Veeam Backup &amp;amp; Replication получает данные ВМ по сетевому режиму он использует VMware VDDK для коммуникации с хостом ESXI, что конечно же добавляет дополнительную нагрузку на хост ESXI.&lt;/p&gt;

&lt;p&gt;Прямой доступ к NFS позволяет обойти хост стороной ESXI и получить данные напрямую с хранилища NFS. Для этого Veeam Backup &amp;amp; Replication разворачивает на прокси-сервере свой собственный NFS клиент (настраиваете конечно вы всё сами). Да так как это всё ещё передаются по сети, как и в случае использования простого сетевого транспорта, но уже нет нагрузки на ESXI хост.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#nfs-cr&quot;&gt;Процесс создания резервной копии&lt;/a&gt; /
&lt;a href=&quot;#nfs-re&quot;&gt;Процесс восстановления резервной копии&lt;/a&gt; /
&lt;a href=&quot;#nfs-req&quot;&gt;Требования&lt;/a&gt; /
&lt;a href=&quot;#nfs-lim&quot;&gt;Лимиты&lt;/a&gt; /&lt;/p&gt;

&lt;h3 id=&quot;nfs-cr&quot;&gt;Процесс создания резервной копии&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;В Veeam Backup &amp;amp; Replication запускается процесс создания резервной копии виртуальной машины&lt;/li&gt;
  &lt;li&gt;Прокси-сервер отправляет запрос хосту ESXI, где расположена ВМ чтобы узнать на каком NFS хранилище находятся данные&lt;/li&gt;
  &lt;li&gt;ESXI хост выясняет где находятся необходимые данные&lt;/li&gt;
  &lt;li&gt;Veeam Backup &amp;amp; Replication инициализирует процесс создания снимка ВМ (snapshot) на ESXI хосте&lt;/li&gt;
  &lt;li&gt;Хост ESXi извлекает метаданные о расположении дисков виртуальной машины в хранилище (физические адреса блоков данных)&lt;/li&gt;
  &lt;li&gt;Хост ESXi отправляет полученные метаданные прокси-серверу&lt;/li&gt;
  &lt;li&gt;Прокси-сервер резервного копирования VMware использует метаданные для копирования блоков данных виртуальной машины с хранилища NFS по сети (ETHERNET)&lt;/li&gt;
  &lt;li&gt;Резервный прокси-сервер VMware обрабатывает скопированные блоки данных и отправляет их на целевой сервер&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-DirectNFSAccessBackup.drawio.png&quot; alt=&quot;veeam Direct NFS Access backup process&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;nfs-re&quot;&gt;Процесс восстановления резервной копии&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;В Veeam Backup &amp;amp; Replication запускается процесс восстановления виртуальной машины&lt;/li&gt;
  &lt;li&gt;Прокси-сервер получает данные необходимые для восстановления с репозитория резервных копий&lt;/li&gt;
  &lt;li&gt;Прокси-сервер отправляет запросы на восстановление данных хосту ESXI&lt;/li&gt;
  &lt;li&gt;Хост ESXi выделяет место в хранилище данных NFS&lt;/li&gt;
  &lt;li&gt;Данные записываются на хранилище данных по сети (ETHERNET)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-DirectNFSAccessRecovery.drawio.png&quot; alt=&quot;veeam Direct NFS Access recovery process&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;nfs-req&quot;&gt;Требования&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Можно использовать в средах VMware vSphere (ESXI), работающих под управлением NFS версии 3 и 4.1&lt;/li&gt;
  &lt;li&gt;Прокси-сервер должен иметь доступ к NFS хранилищу, где лежат данные ВМ&lt;/li&gt;
  &lt;li&gt;Если хранилище NFS промотированно в ESXI по DNS имени, а не по ip-адрессу то прокси-сервер также должен сопоставлять это DNS имя с ip-адрессом&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;nfs-lim&quot;&gt;Лимиты&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Режим прямого доступа к NFS не может использоваться для виртуальных машин, имеющих хотя бы один моментальный снимок&lt;/li&gt;
  &lt;li&gt;При репликации ВМ режим прямого доступа к NFS используется только при первом разе, дальше всё по обычной сети&lt;/li&gt;
  &lt;li&gt;Если в задаче вы активируете галочку &lt;code class=&quot;highlighter-rouge&quot;&gt;Включить приостановку работы инструментов VMware&lt;/code&gt; (Enable VMware tools quiescence) режим прямого доступа к NFS не будет использоваться&lt;/li&gt;
  &lt;li&gt;Если по каким-то причинам диски ВМ не доступны по NFS будет использоваться обычный сетевой транспорт&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 15 Aug 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-direct-access-to-datastore</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-direct-access-to-datastore</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Screenity - Отличная утилита для конфиденциальной записи экрана</title>
        <description>&lt;p&gt;На самом деле утилит для записи экрана куча, но &lt;strong&gt;Screenity&lt;/strong&gt; меня действительно зацепила. Самое главное это полностью бесплатная утилита и второе преимущество — это то что вы можете заблюрить любой текс на экране просто нажав на него.&lt;/p&gt;

&lt;p&gt;Также вы можете сохранять ваши видео сразу на &lt;code class=&quot;highlighter-rouge&quot;&gt;google диск&lt;/code&gt; используя встроенный функционал.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;как-установить-screenity&quot;&gt;Как установить Screenity&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;К сожалению, установить его как отдельную программу не получится, ставится &lt;strong&gt;Screenity&lt;/strong&gt; как &lt;code class=&quot;highlighter-rouge&quot;&gt;дополнение к chrome&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим по &lt;a href=&quot;https://chromewebstore.google.com/detail/screenity-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-%D0%B0/kbbdabhdfibnancpjfhlkhafgdilcnji&quot;&gt;ссылке&lt;/a&gt; и добавляем дополнение в &lt;code class=&quot;highlighter-rouge&quot;&gt;chrome&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;После установки вас перенаправит на страницу настройки, просто выполните что там написано&lt;/li&gt;
  &lt;li&gt;После настройки справа от строки ввода в &lt;code class=&quot;highlighter-rouge&quot;&gt;chrome&lt;/code&gt; появится &lt;strong&gt;синий кружочек&lt;/strong&gt;, который активирует запись экрана&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Возможно вы подумали, что если дополнение ставится в веб браузер, то оно работает только пока есть интернет, но это не так. Вы всегда можете использовать &lt;strong&gt;Screenity&lt;/strong&gt; без интернета, только сохранить видео на &lt;code class=&quot;highlighter-rouge&quot;&gt;google диск не получится&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;быстрые-клавиши-shortcuts&quot;&gt;Быстрые клавиши (shortcuts)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы настроить &lt;strong&gt;shortcuts&lt;/strong&gt; в строке ввода &lt;code class=&quot;highlighter-rouge&quot;&gt;url&lt;/code&gt; chrome вбиваем &lt;strong&gt;chrome://extensions/shortcuts&lt;/strong&gt; и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В списке находим &lt;code class=&quot;highlighter-rouge&quot;&gt;Screenity - Запись экрана &amp;amp; Аннотации&lt;/code&gt; и можем задать сочетания клавиш для:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Запись экрана (&lt;code class=&quot;highlighter-rouge&quot;&gt;Alt  +  Shift  +  G&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Отмена записи (&lt;code class=&quot;highlighter-rouge&quot;&gt;Alt  +  Shift  +  X&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Пауза (&lt;code class=&quot;highlighter-rouge&quot;&gt;Alt  +  Shift  +  M&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;собирает-ли-screenity-какие-либо-данные&quot;&gt;Собирает ли Screenity какие-либо данные?&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Разработчик приложения уверяет что нет. Но даже если вы не верите в это, то можете развернуть это расширение локально у себя, подробнее &lt;a href=&quot;https://github.com/alyssaxuu/screenity?tab=readme-ov-file#self-hosting-screenity&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;настройки-screenity&quot;&gt;Настройки Screenity&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы перейти к настройкам необходимо нажать на иконку &lt;strong&gt;Screenity&lt;/strong&gt; и в открывшемся окне нажать на &lt;code class=&quot;highlighter-rouge&quot;&gt;троеточие в правом верхнем углу&lt;/code&gt; всплывающего окна.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2024-08-14_11-06.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Тут можно изменить качество видео, размер окна.&lt;/p&gt;

&lt;p&gt;Также можно настроить создание резервных копий. Дело в том, что пока вы не сохранили видео после записи оно, не останется у вас на компьютере гарантированно. Поэтому если вы хотите, чтобы каждое ваше записанное видео оставалось на компьютере гарантированно необходимо настроить создание резервных копий.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим в настройки&lt;/li&gt;
  &lt;li&gt;Активируем &lt;code class=&quot;highlighter-rouge&quot;&gt;Создавать резервные копии&lt;/code&gt;
 &lt;img src=&quot;/static/img/all/2024-08-14_11-11.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Начинаем запись экрана&lt;/li&gt;
  &lt;li&gt;Указываем директорию, куда сохранять видео&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;запись-экрана&quot;&gt;Запись экрана&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Нажмите значок &lt;strong&gt;Screenity&lt;/strong&gt; в адресной строке, чтобы открыть всплывающее окно записи&lt;/li&gt;
  &lt;li&gt;Выберите, что вы хотите записать: экран, область вкладок или видео с камеры&lt;/li&gt;
  &lt;li&gt;Выберите камеру, если необходимо записывать видео с камеры&lt;/li&gt;
  &lt;li&gt;Выберите микрофон&lt;/li&gt;
  &lt;li&gt;Нажмите кнопку &lt;code class=&quot;highlighter-rouge&quot;&gt;Начать запись&lt;/code&gt;, чтобы начать создание видео&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;как-делать-заметки-или-аннотации-в-screenity&quot;&gt;Как делать заметки или аннотации в Screenity&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите делать заметки или аннотации в &lt;strong&gt;Screenity&lt;/strong&gt;, то используйте кнопку с карандашом. Кстати очень полезная функция для создания обучающих роликов.&lt;/p&gt;

&lt;p&gt;Тут же можно выбрать стиль карандаша, использовать ластик, вводить текст, добавлять стрелки. Можно даже вставить картинку.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;как-скрыть-конфиденциальную-информацию&quot;&gt;Как скрыть конфиденциальную информацию&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;И самая крутая функция на мой взгляд это скрытие конфиденциальной информации.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Нажимаем значок размытия на панели инструментов, чтобы включить режим размытия&lt;/li&gt;
  &lt;li&gt;Выберите любой элемент на странице, чтобы размыть его, и щелкните левой кнопкой мыши&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Wed, 14 Aug 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/screenity-secure-screen-recorder</link>
        <guid isPermaLink="true">http://www.tipoit.kz/screenity-secure-screen-recorder</guid>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>VMWare - Миграция ESXI через vSphere Lifecycle Manager</title>
        <description>&lt;p&gt;Я уже описывал как обновить хосты &lt;strong&gt;ESXI&lt;/strong&gt; через &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt; в этой &lt;a href=&quot;https://tipoit.kz/vsphere-lifecycle-manager&quot;&gt;статье&lt;/a&gt;. Теперь опишу как обновить &lt;strong&gt;ESXI&lt;/strong&gt; с версии 7.0 до версии 8.0.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;импорт-образа-с-esxi-80&quot;&gt;Импорт образа с ESXI 8.0&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первое что нам необходимо сделать это импортировать &lt;code class=&quot;highlighter-rouge&quot;&gt;ISO&lt;/code&gt; образ &lt;strong&gt;ESXI&lt;/strong&gt; версию 8.0 через &lt;strong&gt;Lifecycle Manager&lt;/strong&gt;. Для этого переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Lifecycle Manager &amp;gt; Imported ISOs&lt;/code&gt; и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;IMPORT ISO&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/vmware/2024-07-15_10-00.png&quot; alt=&quot;Lifecycle Manager import ISO&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также в идеале вы должны установить все необходимые обновления на ESXI 7.0. Для этого можно воспользоваться &lt;a href=&quot;https://tipoit.kz/vsphere-lifecycle-manager&quot;&gt;статьёй&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-baseline-для-обновления&quot;&gt;Создаём Baseline для обновления&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Всё также переходим в &lt;strong&gt;Lifecycle Manager&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Нажимаем на &lt;code class=&quot;highlighter-rouge&quot;&gt;Baselines&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;NEW &amp;gt; Baseline&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;В новом окне выбираем галочку &lt;code class=&quot;highlighter-rouge&quot;&gt;Upgrade&lt;/code&gt;, прописываем понятное вам название&lt;/li&gt;
  &lt;li&gt;Нажимаем далее и выбираем ранее загруженный &lt;code class=&quot;highlighter-rouge&quot;&gt;ISO образ&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/vmware/2024-07-15_10-04.png&quot; alt=&quot;Lifecycle Manager baseline create&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;запускаем-процесс-обновления-esxi-с-версии-70-до-версии-80&quot;&gt;Запускаем процесс обновления &lt;strong&gt;ESXI&lt;/strong&gt; с версии 7.0 до версии 8.0&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь всё готов для того чтобы обновить наш &lt;strong&gt;ESXI&lt;/strong&gt; на более новую версию, но заранее позаботьтесь о виртуальных машинах на целевом хосте, так как сервер будет перезагружен.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выбираем необходимый нам &lt;strong&gt;ESXI&lt;/strong&gt; хост&lt;/li&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Updates &amp;gt; Baselines&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Снизу нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;ATTACH &amp;gt; Attach Baseline or Baseline Group&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем Baseline который создали выше&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;CHECK COMPLIANCE&lt;/code&gt; (Статус смотрим в Recent Tasks)
&lt;img src=&quot;/static/img/vmware/2024-07-15_10-23.png&quot; alt=&quot;Lifecycle Manager CHECK COMPLIANCE&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Если вы вдруг получаете статус &lt;code class=&quot;highlighter-rouge&quot;&gt;Incompatible&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;Attached Baselines&lt;/code&gt; есть смысл скачать кастомный &lt;code class=&quot;highlighter-rouge&quot;&gt;ISO&lt;/code&gt; образ от производителя сервера, где будут все необходимые драйвера. 
&lt;img src=&quot;/static/img/vmware/2024-07-15_10-27.png&quot; alt=&quot;Lifecycle Manager CHECK COMPLIANCE Incompatible&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Далее выделяем наш &lt;code class=&quot;highlighter-rouge&quot;&gt;Baseline&lt;/code&gt; и нажимаем &lt;strong&gt;REMEDIATE&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Статус обновления также проверяем в &lt;code class=&quot;highlighter-rouge&quot;&gt;Recent Tasks&lt;/code&gt;
&lt;img src=&quot;/static/img/vmware/2024-07-16_09-41.png&quot; alt=&quot;Lifecycle Manager Attached Baselines REMEDIATE&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Wed, 17 Jul 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vmware-esxi-upgrade</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vmware-esxi-upgrade</guid>
        
        <category>vmware</category>
        
        <category>vcenter</category>
        
        <category>esxi</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>Redfish - Примеры использования</title>
        <description>&lt;p&gt;Я не буду особо расписывать что такое Redfish. Основная идея — это то, что каждый производитель должен иметь одинаковы API для управления серверами. Собственно, тут я просто оставлю несколько команд, которые возможно пригодятся мне, когда веб-интерфейс управления сервера INTEL снова помрёт.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;узнаём-id-системы&quot;&gt;Узнаём ID системы&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это необходимо для дальнейшего выполнения команд. По сути для нас это выглядит как ID сервера.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Systems&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;перезагружаем-сервер-используя-redfish&quot;&gt;Перезагружаем сервер используя Redfish&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-si&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Content-Type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Accept:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ResetType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ForceRestart&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Systems/SYSTEMID/Actions/ComputerSystem.Reset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;выключаем-сервер-используя-redfish&quot;&gt;Выключаем сервер используя Redfish&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-si&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Content-Type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Accept:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ResetType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ForceOff&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Systems/SYSTEMID/Actions/ComputerSystem.Reset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;включаем-сервер-используя-redfish&quot;&gt;Включаем сервер используя Redfish&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-si&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Content-Type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Accept:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ResetType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;On&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Systems/SYSTEMID/Actions/ComputerSystem.Reset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;информация-о-сервере-используя-redfish&quot;&gt;Информация о сервере используя Redfish&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Chassis/RackMount&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;сброс-биоса-используя-redfish&quot;&gt;Сброс биоса используя Redfish&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-si&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Systems/SYSTEMID/Bios/Actions/Bios.ResetBios&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;перезапуск-bmc-используя-redfish&quot;&gt;Перезапуск BMC используя Redfish&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-si&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user:pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-k&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Content-Type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Accept:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ResetType&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ForceRestart&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.81&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/redfish/v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/Managers/BMC/Actions/Manager.Reset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 16 Jul 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/redfish-examples</link>
        <guid isPermaLink="true">http://www.tipoit.kz/redfish-examples</guid>
        
        <category>hardware</category>
        
        <category>management</category>
        
        
      </item>
    
      <item>
        <title>VMWare - Update Manager Download Service (UMDS)</title>
        <description>&lt;p&gt;Устанавливать сервис &lt;strong&gt;Update Manager Download Service (UMDS)&lt;/strong&gt; я буду на &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;С установочного образа &lt;strong&gt;Vcenter Server&lt;/strong&gt; копируем файл &lt;strong&gt;VMware-UMDS-8.0.1-build_number.tar.gz&lt;/strong&gt; в папке &lt;code class=&quot;highlighter-rouge&quot;&gt;umds&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Распаковываем архив командой &lt;strong&gt;tar -xvzf VMware-UMDS-8.0.1-build_number.tar.gz&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Переходим в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;vmware-umds-distrib&lt;/code&gt; и запускаем скрипт для установки командой &lt;code class=&quot;highlighter-rouge&quot;&gt;perl vmware-install.pl&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Отвечаем на вопросы, например, я указал другую папку для хранения файлов&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Дальше нам необходимо настроить какие именно обновления мы хотим качать&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/local/vmware-umds/bin&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Для просмотра всех версий &lt;strong&gt;vSphere&lt;/strong&gt;, для которых мы можем настроить закачку обновлений выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;vmware-umds --list-host-platforms&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Для того чтоб активировать закачку обновлений для &lt;code class=&quot;highlighter-rouge&quot;&gt;ESXI 7.0&lt;/code&gt; выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;vmware-umds -S -e embeddedEsx-7.0&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Чтобы отключить закачку обновлений для &lt;code class=&quot;highlighter-rouge&quot;&gt;ESXI 6.7&lt;/code&gt; выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vmware-umds -S -d embeddedEsx-6.7.0&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Чтобы запустить процесс скачивания обновлений вручную можно использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vmware-umds -D&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Если нужно экспортировать всё скачанное выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vmware-umds -E --export-store dest_dir&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;**********************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Downloaded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1254&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;updates,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;download&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21364&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**********************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Дальше у нас 2 варианта: отдавать пакеты по &lt;strong&gt;smb шаре&lt;/strong&gt; или через &lt;strong&gt;web&lt;/strong&gt;, я выбрал второй вариант так как не особо доверяю сетевым папкам.&lt;/p&gt;

&lt;p&gt;Для раздачи пакетов по сети я использовал &lt;code class=&quot;highlighter-rouge&quot;&gt;ngixn&lt;/code&gt;, со следующей конфигурацией:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;server {&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;listen       8086 ;&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;server_name  nexus.local.lan;&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;add_header Strict-Transport-Security 'max-age=604800'&lt;/span&gt;

    &lt;span class=&quot;s&quot;&gt;# Load configuration files for the default server block.&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;include /etc/nginx/default.d/*.conf;&lt;/span&gt;

    &lt;span class=&quot;s&quot;&gt;location / {&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;root /nexus/vmware;&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;autoindex on;&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После того как пакеты выкачаны можно настроить &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt; на наш &lt;strong&gt;UMDS&lt;/strong&gt;. Для этого переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Lifecycle Manager &amp;gt; Settings &amp;gt; Patch Setup &amp;gt; Change Download Source&lt;/code&gt; и прописываем наш &lt;code class=&quot;highlighter-rouge&quot;&gt;URL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После того как прописали новый источник обновлений запускаем процесс синхронизации &lt;code class=&quot;highlighter-rouge&quot;&gt;ACTIONS &amp;gt; Sync Updates&lt;/code&gt;. В итоге в Baselines должны появится новые пакеты обновлений.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/vmware/2024-07-11_14-41.png&quot; alt=&quot;vSphere Lifecycle Manager&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 12 Jul 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-update-manager-download-service</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-update-manager-download-service</guid>
        
        <category>vmware</category>
        
        <category>vcenter</category>
        
        
      </item>
    
      <item>
        <title>VMWare - vSphere Lifecycle Manager (Обновление ESXI)</title>
        <description>&lt;p&gt;Если вы следуете всем рекомендациям особенно в области информационной безопасности, то первое правило для безукоризненного выполнения - это обновление любого софта. И конечно же хосты &lt;strong&gt;ESXI&lt;/strong&gt; не исключение, хоть возможно и является долгим процессом, если не хватает мощностей.&lt;/p&gt;

&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;VMWare&lt;/code&gt; за установку, обновление софта в вашем кластере отвечает &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt;. Он отвечает за такие задачи как: установка &lt;strong&gt;ESXI&lt;/strong&gt; и прошивок на новые хосты, обновление версий &lt;strong&gt;ESXI&lt;/strong&gt; и прошивок при необходимости.&lt;/p&gt;

&lt;p&gt;При установке &lt;strong&gt;Vcenter Server&lt;/strong&gt; этот сервис включается по умолчанию и не требует никаких дополнительных установок со стороны пользователя. По умолчанию для работы использует также бд на основе &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSQL&lt;/code&gt;, но вроде сейчас это не является необходимым. По сути &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt; - это замена старого &lt;code class=&quot;highlighter-rouge&quot;&gt;Update Manager&lt;/code&gt;. Начиная с версии &lt;strong&gt;Vcenter Server 7.0&lt;/strong&gt; уже используется &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Конечно же для скачивания обновлений сервису &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt; необходим доступ в интернет. Если же у вас его вообще нет (на то могут быть свои причины), то можно воспользоваться сервисом &lt;strong&gt;Update Manager Download Service (UMDS)&lt;/strong&gt; для загрузки обновлений вручную. Подробнее о &lt;strong&gt;UMDS&lt;/strong&gt; в этой статье.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;операции-vsphere-lifecycle-manager&quot;&gt;Операции vSphere Lifecycle Manager&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для загрузки и проверки удачной установки обновлений используются следующие операции:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Операция&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Compliance Check&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Операция сканирования хоста на соответствие заданному уровню. Т.е. просто проверка требуется ли что-то обновить или установить&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Remediation Pre-Check&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Проверка на то что после установки обновлений не произойдёт сбой&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Remediation&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Собственно сам процесс обновления&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Stage&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Режим загрузки обновлений на хост&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;безопасное-хеширование-и-проверка-подписи-в-vsphere-lifecycle-manage&quot;&gt;Безопасное хеширование и проверка подписи в vSphere Lifecycle Manage&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый пакет, загруженный с онлайн репозитория проходит проверку на контрольную сумму. Хэш-проверка проверяет контрольную сумму &lt;code class=&quot;highlighter-rouge&quot;&gt;sha-256&lt;/code&gt; загруженного пакета, чтобы гарантировать его целостность. Также перед установкой новых пакетов происходит проверка их цифровой подписи.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;используем-vsphere-lifecycle-manager&quot;&gt;Используем vSphere Lifecycle Manager&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самое первое что нужно сделать это перейти в панель &lt;strong&gt;vSphere Lifecycle Manager&lt;/strong&gt;, для этого в левом верхнем углы нажимаем на &lt;code class=&quot;highlighter-rouge&quot;&gt;меню &amp;gt; Lifecycle Manager&lt;/code&gt;. 
Тут вы можете импортировать готовые &lt;code class=&quot;highlighter-rouge&quot;&gt;ISO&lt;/code&gt; образы, например, новую версию &lt;strong&gt;Vsphere&lt;/strong&gt; для обновления старой.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/vmware/2024-07-11_10-24.png&quot; alt=&quot;vSphere Lifecycle Manager iso image&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;настройки-vsphere-lifecycle-manager&quot;&gt;Настройки vSphere Lifecycle Manager&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;На вкладке &lt;code class=&quot;highlighter-rouge&quot;&gt;settings&lt;/code&gt; мы можем настроить поведение v&lt;strong&gt;Sphere Lifecycle Manager&lt;/strong&gt; как нам необходимо, например, можно отключить автоматическую загрузку обновлений, что конечно же делать не рекомендуется.&lt;/p&gt;

&lt;p&gt;Меня же конкретно тут интересует возможность скачивания обновлений с другого сервера, в моём контуре. Просто я не могу дать доступ серверу Vcenter в интернет, и тут мне поможет тот самый сервис под названием &lt;strong&gt;Update Manager Download Service (UMDS)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;О том, как настроить и установить &lt;strong&gt;Update Manager Download Service (UMDS)&lt;/strong&gt; я расписал тут.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;процесс-обновления&quot;&gt;Процесс обновления&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для обновления &lt;strong&gt;ESXI&lt;/strong&gt; хостов мы будем использовать &lt;strong&gt;Baselines&lt;/strong&gt;, которые делятся на три типа: предопределенный, рекомендованный, собственный.&lt;/p&gt;

&lt;p&gt;Давайте попробуем понять что из себя представляет каждый тип:
| Тип | Описание |
|–|–|
| &lt;strong&gt;Предопределенный&lt;/strong&gt; | Не может быть изменён или удалён. Содержит обновления безопасности, критические обновления, некритические обновления. |
| &lt;strong&gt;Рекомендованный&lt;/strong&gt;| Содержит обновления, рекомендованные для установки при использовании кластеров vSAN с хостами ESXi |
| &lt;strong&gt;Собственный&lt;/strong&gt; | Собственно, вы сами решаете какие обновления имеет этот тип |&lt;/p&gt;

&lt;p&gt;Перед тем как запустить процесс обновления необходимо сопоставить &lt;strong&gt;Baseline&lt;/strong&gt; с хостом, кластером или дата-центром.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выделяем конкретный хост или кластер и переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Updates&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Нажимаем A&lt;code class=&quot;highlighter-rouge&quot;&gt;ttach &amp;gt; Attach Baseline or Baseline Group&lt;/code&gt; (по умолчанию уже добавлены обновления безопасности и критические обновления)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Также перед обновлением необходимо проверить статус соответствия обновлений для хоста. Во время выполнения проверяется какие уже обновления установлены на хосте и необходимо ли установить новые.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;запуск-проверки-соответствия-вручную&quot;&gt;Запуск проверки соответствия вручную&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выделяем конкретный хост или кластер и переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Updates&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;CHECK COMPLIANCE&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;После проверки вы получите список рекомендованных обновлений
&lt;img src=&quot;/static/img/vmware/2024-07-11_15-27.png&quot; alt=&quot;vSphere Lifecycle Manager CHECK COMPLIANCE&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Для того, чтобы посмотреть какие обновления требуются для установки в &lt;code class=&quot;highlighter-rouge&quot;&gt;Attached Baselines&lt;/code&gt; выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Baseline&lt;/code&gt; и внизу выводится статус всех обновлений для хоста
&lt;img src=&quot;/static/img/vmware/2024-07-11_15-30.png&quot; alt=&quot;A predefined baseline for all security patches for hosts&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;загрузка-обновлений-на-хост&quot;&gt;Загрузка обновлений на хост&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;На этом этапе все необходимые обновления загружаются на хост &lt;strong&gt;ESXI&lt;/strong&gt;, но при это не устанавливаются. Идея в том, что процесс копирования, как и установка занимает какое-то время, стало быть если хост будет в состоянии обслуживание только при установке это сократит время недоступности хоста.&lt;/p&gt;

&lt;p&gt;Для загрузки обновлений на хост:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выделяем конкретный хост или кластер и переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Updates&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;В Attached Baselines выбираем что надо и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;STAGE&lt;/code&gt;
&lt;img src=&quot;/static/img/vmware/2024-07-12_17-07.png&quot; alt=&quot;vSphere Lifecycle Manager Stage&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Собственно, выбираем хост, на который нужно закачать обновления, и если хотите посмотреть какие именно обновления можно развернуть &lt;code class=&quot;highlighter-rouge&quot;&gt;Stage&lt;/code&gt; ниже&lt;/li&gt;
  &lt;li&gt;В задачах появится статус выполнения
&lt;img src=&quot;/static/img/vmware/2024-07-12_17-09.png&quot; alt=&quot;vSphere Lifecycle Manager Stage task status&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;установка-обновлений-на-хост&quot;&gt;Установка обновлений на хост&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот мы и добрались до самой установки обновлений. Если для установки какого-то обновления будет необходимо перевести хост в состояние обслуживания, то это будет произведено. Обратите на это внимание, так как виртуальные машины будут либо выключены, либо смигрированы.&lt;/p&gt;

&lt;p&gt;Перед тем как запустить процесс обновления давайте проверим нет ли каких-либо предупреждений, которые нужно решить перед обновлением. Для этого:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выделяем конкретный хост или кластер и переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Updates&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;PRE-CHECK REMEDIATION&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Если ничего нет, то нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;DONE&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Если есть предупреждения можно рассмотреть их &lt;a href=&quot;https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-lifecycle-manager/GUID-0D2EF163-4557-4647-BA95-31756CCE6A62.html&quot;&gt;тут&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ну и когда все предупреждения решены или их вовсе нет можно приступать к установке:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выделяем конкретный хост или кластер и переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Updates&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Выбираем Attached Baselines и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;REMEDIATE&lt;/code&gt;
&lt;img src=&quot;/static/img/vmware/2024-07-12_17-21.png&quot; alt=&quot;vSphere Lifecycle Manager Stage Baselines REMEDIATE&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Во время установки обновлений хост перейдёт в состояние обслуживания и также будет перезагружен (статус обновления в задачах)
&lt;img src=&quot;/static/img/vmware/2024-07-12_17-23.png&quot; alt=&quot;vSphere ESXI maintenance&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;В итоге &lt;code class=&quot;highlighter-rouge&quot;&gt;Compliant&lt;/code&gt; должен быть чистым с зелёной галочкой
&lt;img src=&quot;/static/img/vmware/2024-07-12_17-30.png&quot; alt=&quot;vSphere Lifecycle Manager Stage Compliant Green&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Fri, 12 Jul 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vsphere-lifecycle-manager</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vsphere-lifecycle-manager</guid>
        
        <category>vmware</category>
        
        <category>vcenter</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - При редактировании vm пустая страница</title>
        <description>&lt;p&gt;Если вы вдруг решили изменить конфигурацию виртуальной машины, но столкнулись с проблемой что выходит просто пустое окно, то вы попали на правильную статью.&lt;/p&gt;

&lt;p&gt;Выглядит это так:
&lt;img src=&quot;/static/img/vmware/2024-07-11_12-30.png&quot; alt=&quot;vm edit clean page&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;причина&quot;&gt;Причина&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;А собственно причина в том, что вы скорее всего обновили сам &lt;strong&gt;Vcenter Server&lt;/strong&gt;, который не совместим с версией &lt;strong&gt;ESXI&lt;/strong&gt; самой виртуальной машины. Например, у меня &lt;strong&gt;Vcenter Server 8&lt;/strong&gt;, а при создании виртуальных машин выбиралась версия совместимости с &lt;code class=&quot;highlighter-rouge&quot;&gt;ESXi 5.0 and later (VM version 8)&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;решение&quot;&gt;Решение&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы решить эту проблему нужно обновить совместимость виртуальной машины на более новую версию.&lt;/p&gt;

&lt;p&gt;Для этого:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Нажимаем правой кнопкой на самой виртуальной машине&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Compatibility &amp;gt; Shedule VM Compatibility Upgrade&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;В диалоговом окне выбираем &lt;strong&gt;YES&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;В следующем окне выбираем версию совместимости (например, &lt;code class=&quot;highlighter-rouge&quot;&gt;ESXI 7.0 U2 and later&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Далее необходимо перезагрузить виртуальную машину&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 11 Jul 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-esxi-update</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-esxi-update</guid>
        
        <category>vmware</category>
        
        <category>vcenter</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Предопределенные тесты (SureBackup)</title>
        <description>&lt;p&gt;Veeam Backup &amp;amp; Replication может проверять машины с помощью следующих предопределенных тестов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Тест Heartbeat: При запуске VM выполняется тест Heartbeat. Запущенная VM должна подать сигнал Heartbeat используя VMware Tools, которые должны были быть установлены в VM. Если сигнал поступает регулярно с определенными интервалами времени, тест пройден.&lt;/li&gt;
  &lt;li&gt;Тест Ping: Veeam Backup &amp;amp; Replication посылает ping запросы в VM от самого сервера, где установлен Veeam. Если VM отвечает на ping, то процесс пройден.&lt;/li&gt;
  &lt;li&gt;Тест приложений: Veeam Backup &amp;amp; Replication ожидает запуска приложений внутри VM. После запуска используются скрипты для проверки их состояния. Veeam Backup &amp;amp; Replication использует два типа скриптов:
 – Для DNS-серверов, контроллеров доменов, серверов глобального каталога, почтовых серверов и веб-серверов Veeam Backup &amp;amp; Replication использует скрипт, который проверяет порт, специфичный для приложения.
 – Для Microsoft SQL Server Veeam Backup &amp;amp; Replication использует скрипт, который пытается подключиться к экземплярам и базам данных на Microsoft SQL Server.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 03 Jul 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-redifined-tests</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-redifined-tests</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        <category>recovery</category>
        
        <category>SureBackup</category>
        
        
      </item>
    
      <item>
        <title>Docker - Файл .dockerignore и Dockerfile</title>
        <description>&lt;p&gt;Для того, чтобы создать свой собственный &lt;strong&gt;Docker образ необходимо описать все инструкции&lt;/strong&gt;, которые должны выполняться внутри образа. Для этого необходимо &lt;strong&gt;создать файл с инструкциями, который называется Dockerfile&lt;/strong&gt;. Имя файла конечно же может быть и другим, но как правило чаще всего используется имя Dockerfile.&lt;/p&gt;

&lt;p&gt;Для примера возьмём следующий &lt;strong&gt;Dockerfile&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Можно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;указать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;версию,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;digest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;или&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;alias.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LABEL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;добавляет&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;произвольные&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;метаданные,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;например&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;автора,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;версию&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;и&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;описание.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LABEL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;maintainer=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;student@example.com&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;version=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;description=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Учебный Dockerfile со всеми основными инструкциями.&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ARG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;аргументы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;доступны&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;только&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;во&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;время&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сборки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(build-time).&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Они&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;не&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сохраняются&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;внутри&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнера.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ARG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;APP_VERSION=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ARG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DEBIAN_FRONTEND=noninteractive&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сохраняет&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;переменные&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;образе,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;они&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;доступны&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;во&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;время&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PYTHONDONTWRITEBYTECODE=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PYTHONUNBUFFERED=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;APP_HOME=/usr/src/app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;APP_ENV=production&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;задаёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;текущую&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;директорию&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;всех&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;последующих&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;инструкций.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$APP_HOME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;копирует&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;файлы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;из&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контекста&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сборки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(локальной&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;папки)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнер.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;requirements.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app.py&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$APP_HOME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполняет&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команды&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;во&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;время&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сборки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;и&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;создаёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;новый&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;слой.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Используется&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;установки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;зависимостей&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;и&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;пакетов.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--no-install-recommends&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;build-essential&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--no-cache-dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-r&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;requirements.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/apt/lists/*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ADD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;как&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;но&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;поддерживает&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;загрузку&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;из&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;и&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;распаковку&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;архивов.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ADD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;groupadd/useradd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;создаёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;не-root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;пользователя&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приложения.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;addgroup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;appgroup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;adduser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--ingroup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;appgroup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;appuser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;задаёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;пользователя,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;от&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;имени&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;которого&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;будут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполняться&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команды&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнере.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;appuser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VOLUME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;создаёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;точку&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;монтирования&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хранения&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;данных&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;или&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;логов).&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;создаёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;анонимный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;том&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(volume),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;если&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;нужносохранять&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;данные&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;после&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;удаления&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VOLUME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/usr/src/app/data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EXPOSE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;документирует,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;какие&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;порты&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;слушает&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приложение.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Это&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;не&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;открывает&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;порт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наружу,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;но&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;помогает&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;понять&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;его&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;назначение.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EXPOSE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;основная&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команда,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;которая&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполняется&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;при&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуске&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнера.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;аргументы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;по&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;умолчанию&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(можно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;переопределить&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;run).&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;python&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;app.py&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HEALTHCHECK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;—&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;периодически&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполняет&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команду,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;чтобы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;убедиться,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;что&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнер&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;“жив”.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Если&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команда&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;завершается&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;кодом&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;контейнер&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;считается&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unhealthy.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HEALTHCHECK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--interval=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--timeout=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--start-period=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--retries=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-f&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http://localhost:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/health&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-25.svg&quot; alt=&quot;ИНСТРУКЦИИ DOCKERFILE&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;сборка-образа&quot;&gt;Сборка образа&lt;/h3&gt;

&lt;p&gt;Для того чтобы собрать образ используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build&lt;/code&gt;, для задания имени образа и тэга используется опция &lt;code class=&quot;highlighter-rouge&quot;&gt;-t&lt;/code&gt;. &lt;strong&gt;Точка в конце команды указывает что Dockerfile и другие файлы, необходимые для создания образа нужно искать в текущей директории.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Если же имя файла отличается от &lt;strong&gt;Dockerfile&lt;/strong&gt; необходимо через опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;-f&lt;/code&gt; указать имя файла.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t myapp:1.0 .
docker image ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В первой команде я указываю имя образа &lt;strong&gt;myapp&lt;/strong&gt; без &lt;code class=&quot;highlighter-rouge&quot;&gt;NAMESPACE&lt;/code&gt; потому что я не собираюсь загружать этот образ в репозиторий, &lt;a href=&quot;https://www.tipoit.kz/docker-push&quot;&gt;подробнее про NAMESPACE&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;После удачной сборки осталось запустить контейнер с этого образа и проверить его доступность. Так как в &lt;strong&gt;Dockerfile&lt;/strong&gt; объявлен порт (&lt;code class=&quot;highlighter-rouge&quot;&gt;EXPOSE 8000&lt;/code&gt;) прокидываю его на локальный порт 8000 через &lt;code class=&quot;highlighter-rouge&quot;&gt;-p&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --name myapp -d -p 8000:8000 myapp:1.0
curl http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;порядок-инструкций&quot;&gt;Порядок инструкций&lt;/h3&gt;

&lt;p&gt;Как я уже говорил инструкции читаются сверху в низ, поэтому некоторые инструкции могут и не выполнится, точнее выполнится таже инструкция только последняя в файле.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;WORKDIR&lt;/strong&gt; - тут рабочая директория будет та, которая указана в последней инструкции&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📜 Dockerfile.10&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/local/bin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t mypython:1.0 -f Dockerfile10 .
docker run -it mypython:1.0 sh
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$PWD&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/usr/local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CMD&lt;/strong&gt; - при старте контейнера выполнится последняя команда, указанная в файле&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📜 Dockerfile.11&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;python:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-slim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;echo 1 &amp;gt;&amp;gt; /usr/local/2.txt&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;echo 2 &amp;gt;&amp;gt; /usr/local/2.txt&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -it mypython:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/bin/sh:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/local/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.txt:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-32.svg&quot; alt=&quot;dockerfile order&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;что-делает-dockerignore&quot;&gt;Что делает &lt;code class=&quot;highlighter-rouge&quot;&gt;.dockerignore&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;На самом деле довольно важный файл если вы действительно погружены в разработку приложений используя контейнеризацию. Он помогает &lt;strong&gt;ускорить сборку&lt;/strong&gt;, &lt;strong&gt;уменьшить размер контекста&lt;/strong&gt; и &lt;strong&gt;повысить безопасность&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Дело в том что при запуске &lt;code class=&quot;highlighter-rouge&quot;&gt;docker build -t myapp:1.0&lt;/code&gt; . Docker берёт весь контент в текущей директории, т.е. не важно, что в самом &lt;strong&gt;Dockerfile&lt;/strong&gt; вы копируете в образ всего пару файлов. Да, в самом образе не будет ничего лишнего, но вот во время сборки Docker упаковывает всё содержимое в архив и отправляет Docker-демону, который потом вытаскивает оттуда-то что нужно. В следствии чего тратятся лишние ресурсы (&lt;code class=&quot;highlighter-rouge&quot;&gt;CPU, RAM, IO&lt;/code&gt;) и время сборки увеличивается.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-26.svg&quot; alt=&quot;.dockerignore — ОПТИМИЗАЦИЯ СБОРКИ&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Для примера у меня в директории с &lt;strong&gt;Dockerfile&lt;/strong&gt; есть файл &lt;code class=&quot;highlighter-rouge&quot;&gt;zerofile.bin&lt;/code&gt; объёмом 10 GiB и я попробую собрать образ без файла &lt;code class=&quot;highlighter-rouge&quot;&gt;.dockerignore&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t myapp:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;transferring&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;context:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.74&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Building&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;88.5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FINISHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь сделаю тоже самое только с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;.dockerignore&lt;/code&gt;, в котором перечислю файлы, которые нужно пропустить. Файл &lt;code class=&quot;highlighter-rouge&quot;&gt;.dockerignore&lt;/code&gt; нужно создать в той же директории где и &lt;strong&gt;Dockerfile&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;📜 .dockerignore&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;*.bin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t myapp:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;transferring&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;context:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Building&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FINISHED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 16 Jun 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-dockerignore-file</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-dockerignore-file</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Shell form vs Exec form</title>
        <description>&lt;p&gt;&lt;strong&gt;Shell form&lt;/strong&gt; и &lt;strong&gt;exec form&lt;/strong&gt; это по сути два стиля написания команд в Dockerfile.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Форма&lt;/th&gt;
      &lt;th&gt;Пример&lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Shell form&lt;/td&gt;
      &lt;td&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y curl&lt;/td&gt;
      &lt;td&gt;оболочечная (shell)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Exec form&lt;/td&gt;
      &lt;td&gt;RUN [“apt-get”, “update”, “&amp;amp;&amp;amp;”, “apt-get”, “install”, “-y”, “curl”]&lt;/td&gt;
      &lt;td&gt;исполняемая (exec)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Как видно из таблицы для человека более приятная &lt;strong&gt;форма shell&lt;/strong&gt;, нет никаких разбивок и проще для написания.&lt;/p&gt;

&lt;h3 id=&quot;shell-form&quot;&gt;Shell form&lt;/h3&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда выше выполняется через оболочку, т.е. Docker в тайне от вас выполняет эту команду так &lt;code class=&quot;highlighter-rouge&quot;&gt;/bin/sh -c &quot;apt-get update &amp;amp;&amp;amp; apt-get install -y curl&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Благодаря такому преобразованию можно использовать в команде &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;amp;&amp;amp;&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;|&lt;/code&gt;, переменные, перенаправления (&lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;gt;&amp;gt;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Но при выполнении команды в &lt;strong&gt;формате Shell процесс внутри контейнера будет не сама команда а оболочка&lt;/strong&gt;, которая выполняет её (&lt;code class=&quot;highlighter-rouge&quot;&gt;sh&lt;/code&gt;). Т.е. при передаче сигнала &lt;code class=&quot;highlighter-rouge&quot;&gt;SIGTERM&lt;/code&gt; его получит сама оболочка, а не команда, вызываемая внутри неё.&lt;/p&gt;

&lt;p&gt;🦴Dockerfile.shell&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sleep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t shell:1.0 -f Dockerfile.shell .
docker run -it --name shellc shell:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В другом терминале я зайду в контейнер и проверю запущенные процессы в контейнере.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;shellc ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sleep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;exec-form&quot;&gt;Exec form&lt;/h3&gt;

&lt;p&gt;Теперь напишу туже самую команду, только в &lt;strong&gt;формате Exec.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🦴Dockerfile.exec&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sleep&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;100&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;:1.0 -f Dockerfile.exec .
docker run -it --name execc &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь также выполню команду, которая выведет запущенные процессы внутри контейнера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;execc ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sleep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Из вывода видно, что тут &lt;strong&gt;главный процесс PID 1 — это &lt;code class=&quot;highlighter-rouge&quot;&gt;sleep&lt;/code&gt;&lt;/strong&gt; сам по себе, а не sh как в случае с Shell form, потому что напрямую вызывается команда, а не оборачивается в &lt;code class=&quot;highlighter-rouge&quot;&gt;sh&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;где-и-что-использовать&quot;&gt;Где и что использовать?&lt;/h3&gt;

&lt;p&gt;На самом деле если разбираться более детально в этой теме, то можно легко запутаться. В целом я не вижу особого смысла делать большой акцент на этой теме, просто возьмите за правило, что:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Для RUN просто используйте shell вариант&lt;/strong&gt;, например, RUN apt-get update. Конечно ничто на мешает записать эту команду в EXEC варианте (RUN [“apt-get”, “update”]), но зачем?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Для ENTRYPOINT наоборот используйте EXEC&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Для CMD также используйте EXEC&lt;/strong&gt; только если только не вынуждены использовать shell&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Для ENTRYPOINT + EXEC используйте всегда EXEC&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-37.svg&quot; alt=&quot;SHELL FORM vs EXEC FORM&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Jun 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-exec-shell-form</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-exec-shell-form</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Docker - Entrypoint vs CMD</title>
        <description>&lt;p&gt;Инструкция &lt;strong&gt;Entrypoint&lt;/strong&gt; в Dockerfile нужна для того, чтобы задать команду, которая выполнится при старте контейнера. Но для этого также есть и другая команда &lt;strong&gt;CMD&lt;/strong&gt;. Так давайте тут разберёмся в чём собственно разница.&lt;/p&gt;

&lt;p&gt;Начнём с того что использовать можно обе инструкции, но работают они немного по-разному.&lt;/p&gt;

&lt;h3 id=&quot;cmd&quot;&gt;CMD&lt;/h3&gt;

&lt;p&gt;Рассмотрим инструкцию &lt;strong&gt;CMD&lt;/strong&gt;, для этого я сделаю следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создам образ с &lt;code class=&quot;highlighter-rouge&quot;&gt;ubuntu:latest&lt;/code&gt; и в качестве команды для &lt;strong&gt;CMD&lt;/strong&gt; укажу &lt;code class=&quot;highlighter-rouge&quot;&gt;date&lt;/code&gt;. Когда контейнер запустится выполнится команда &lt;code class=&quot;highlighter-rouge&quot;&gt;date&lt;/code&gt; и я увижу результат.&lt;/li&gt;
  &lt;li&gt;Соберу образ &lt;code class=&quot;highlighter-rouge&quot;&gt;date&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Запущу контейнер&lt;/li&gt;
  &lt;li&gt;Снова запущу контейнер, но только передам новое значение для &lt;strong&gt;CMD&lt;/strong&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;df&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🗃️Dockerfile.13&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t date -f Dockerfile.13 .
docker run date
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;53&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; docker run date df
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Filesystem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;K-blocks&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Used&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Available&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Use%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mounted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52902668&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26803728&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26098940&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;shm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/shm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/mapper/cs-root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52902668&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26803756&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26098912&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;650128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;650128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/proc/acpi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;650128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;650128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/proc/scsi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;650128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;650128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/sys/firmware&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. используя инструкцию &lt;strong&gt;CMD&lt;/strong&gt; в качестве команды для выполнения при старте контейнера можно передать новое значение для &lt;strong&gt;CMD&lt;/strong&gt; при создании этого контейнера. По умолчанию при старте контейнера выполняется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;date&lt;/code&gt;, но ничего мне не мешает выполнить другую команду при создании контейнера, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;df&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-33.svg&quot; alt=&quot;CMD — ПЕРЕОПРЕДЕЛЯЕМАЯ КОМАНДА&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;entrypoint&quot;&gt;ENTRYPOINT&lt;/h3&gt;

&lt;p&gt;Теперь я выполню всё тоже самое, но только вместо CMD я буду использовать ENTRYPOINT. Посмотрим, что из этого выйдет.&lt;/p&gt;

&lt;p&gt;🗃️Dockerfile.14&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t date:1.1 -f Dockerfile.14 .
docker run date:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;08&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;04&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; docker run date:1.1 df
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;date:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;invalid&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'df'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге я получаю ошибку. И вот она разница, используя &lt;strong&gt;ENTRYPOINT&lt;/strong&gt; вы не можете перезаписать команду внутри инструкции &lt;strong&gt;ENTRYPOINT&lt;/strong&gt; пи старте самого контейнера. Всё что вы передаёте в контейнер в качестве команды будет просто добавлено к команде, которая прописана в &lt;strong&gt;ENTRYPOINT&lt;/strong&gt; образа Docker. Т.е. при старте контейнера во втором случае внутри него выполнилась команда &lt;code class=&quot;highlighter-rouge&quot;&gt;date df&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Получается, чтобы команда отработала нормально я должен передать работающие параметры для команды &lt;code class=&quot;highlighter-rouge&quot;&gt;date&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run date:1.1 -I
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2025-11-06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но если хочется заменить команду и в &lt;strong&gt;ENTRYPOINT&lt;/strong&gt;, то можно использовать опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--entrypoint&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --entrypoint df date:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Filesystem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;K-blocks&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Used&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Available&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Use%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mounted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52902668&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26804400&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26098268&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;shm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/shm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/mapper/cs-root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52902668&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26804400&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26098268&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614288&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614288&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/proc/acpi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614288&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614288&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/proc/scsi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tmpfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614288&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;614288&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/sys/firmware&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-34.svg&quot; alt=&quot;ENTRYPOINT — ФИКСИРОВАННАЯ КОМАНДА&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;entrypoint--cmd&quot;&gt;ENTRYPOINT + CMD&lt;/h3&gt;

&lt;p&gt;Как вы уже догадались можно использовать обе команды в одном файле Dockerfile. Когда вы используете обе команды в одном Dockerfile при старте контейнера Docker объединяет обе команды из инструкций (NTRYPOINT + CMD) и выполняет внутри контейнера что получилось.&lt;/p&gt;

&lt;h4 id=&quot;вариант-1&quot;&gt;Вариант 1&lt;/h4&gt;

&lt;p&gt;Как вы уже догадались можно использовать обе команды в одном файле Dockerfile. Когда вы используете обе команды в одном Dockerfile при старте контейнера Docker объединяет обе команды из инструкций (NTRYPOINT + CMD) и выполняет внутри контейнера.&lt;/p&gt;

&lt;p&gt;Первый вариант это использовать ENTRYPOINT для запуска скрипта, который подготовит всё необходимое для запуска основного приложения, которое запуститься уже с помощью CMD.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-35.svg&quot; alt=&quot;NTRYPOINT + CMD: КОМБИНИРОВАННОЕ ИСПОЛЬЗОВАНИЕ&quot; /&gt;&lt;/p&gt;

&lt;p&gt;🗃️script1.sh&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;I'm just a script&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;🗃️Dockerfile.15&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/home/ubuntu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sh&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;script1.sh&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t entry:1.0 -f Dockerfile.15 .
docker run entry:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;I'm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;just&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но в результате я получил только вывод скрипта, но не вывод команды date. Дело в том, что после объединения команда выглядит так: sh script1.sh /usr/bin/date. И это одна из самых частых ловушек при комбинировании &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTRYPOINT&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;CMD&lt;/code&gt;. Получается команда date передаётся просто как параметр для скрипта script1.sh, который ничего не ожидает и тем более ничего не делает с переданными ему аргументами.&lt;/p&gt;

&lt;p&gt;Чтобы избежать такого и добиться выполнения обоих команд нужно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;exec &quot;$@&quot;&lt;/code&gt; в самом скрипте. &lt;code class=&quot;highlighter-rouge&quot;&gt;exec &quot;$@&quot;&lt;/code&gt; говорит скрипту о том, что пора бы завершить своё выполнения и передать право запуска другому приложению, которое должно запуститься после него.&lt;/p&gt;

&lt;p&gt;🗃️script1.sh&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;I'm just a script&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;$@&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t entry:1.0 -f Dockerfile.15 .
docker run entry:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;I'm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;just&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;36&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2025&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Либо можно сделать тоже самое в самом Dockerfile:&lt;/p&gt;

&lt;p&gt;🗃️Dockerfile.15&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/home/ubuntu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/bin/sh&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;./script1.sh &amp;amp;&amp;amp; exec \&quot;$@\&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;--&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4 id=&quot;вариант-2&quot;&gt;Вариант 2&lt;/h4&gt;

&lt;p&gt;Другой вариант — это когда у вас есть основной исполняемый файл, но параметры для него изменяемые, самый простой пример это обычный исполняемый файл curl, которому в качестве параметра передаются разные URL сайтов. При использовании только CMD каждый раз приходилось бы писать что-то вроде curl https://tipoit.kz.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/k8s-36.svg&quot; alt=&quot;ENTRYPOINT + CMD: ПРИМЕР С CURL&quot; /&gt;&lt;/p&gt;

&lt;p&gt;🗃️Dockerfile.16&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--no-install-recommends&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/apt/lists/*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENTRYPOINT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;curl&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-kI&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://tipoit.kz&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t entry:1.1 -f Dockerfile.16 .
docker run entry:1.1
docker run entry:1.1 https://google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Получается, что по умолчанию я указал url &lt;code class=&quot;highlighter-rouge&quot;&gt;https://tipoit.kz&lt;/code&gt; и при необходимости могу его поменять на любой другой.&lt;/p&gt;

&lt;h4 id=&quot;официальные-образы&quot;&gt;Официальные образы&lt;/h4&gt;

&lt;p&gt;Если вы думаете, что использование одновременно ENTRYPOINT и CMD встречается только в частных сборках вы, ошибаетесь. Даже официальные образы на Docker Hub имеют такие связки, например, уже знакомый &lt;a href=&quot;https://github.com/MariaDB/mariadb-docker/blob/6a5611cd9dd70a8dcb24195cc8dd2147dd6471e3/12.0/Dockerfile&quot;&gt;mariadb&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Jun 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-entrypoint-vs-cmd</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-entrypoint-vs-cmd</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>MSSql - Типы бэкапов баз данных</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/ij7_0slSous?si=tkIopgGvN2EgKsc1&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;В &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt; для сохранения ваших данных в случае выхода сервера из строя вы можете (обязаны) делать бэкап баз данных. В &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt; существуют следующие типы бэкапов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Дифференциальный бэкап (Differential Backup)&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Бэкап журнала транзакций (Transaction Log Backup)&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Бэкап только для копирования (Copy-Only Backup)&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Бэкап файлов и файловых групп (File and Filegroup Backup)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Как правило простой обыватель зачастую сталкивается только с первыми тремя типами.&lt;/p&gt;

&lt;p&gt;Теперь давайте рассмотрим каждый вариант поподробнее. Главное запомните, что при запуске бэкапа вы делаете резервную копию на определённую точку времени, всё что записано далее не включается в этот бэкап.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;полный-бэкап-full-backup&quot;&gt;Полный бэкап (Full Backup)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/mssql/full-backup.png&quot; alt=&quot;Microsoft SQL Server full backup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При использовании &lt;strong&gt;Полного бэкапа (Full Backup)&lt;/strong&gt; создаётся полная резервная копия базы данных, включающая все данные (&lt;code class=&quot;highlighter-rouge&quot;&gt;mdf&lt;/code&gt;) и также весь лог транзакций (&lt;code class=&quot;highlighter-rouge&quot;&gt;ldf&lt;/code&gt;). Т.е. для восстановления полностью базы данных вам понадобится только один файл.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt; также является отправной точкой для &lt;strong&gt;Дифференциального бэкапа (Differential Backup)&lt;/strong&gt; и &lt;strong&gt;Бэкапа журнала транзакций (Transaction Log Backup)&lt;/strong&gt;. Т.е. чтобы сделать бэкап другого типа вам сперва придётся сделать &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Используя &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt; вы упрощаете себе процесс восстановления, так как нужно восстановить один файл. Но нужно понимать, что, если у вас база данных большого объёма будет не выгодно делать &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt;, так как это займёт много времени.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Full.bak'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Full.bak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;дифференциальный-бэкап-differential-backup&quot;&gt;Дифференциальный бэкап (Differential Backup)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/mssql/diff-backup.png&quot; alt=&quot;Microsoft SQL Server Differential backup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Дифференциальный бэкап (Differential Backup)&lt;/strong&gt; включает в себя только те данные, которые были записаны в базу данных после создания &lt;strong&gt;Полного бэкапа (Full Backup)&lt;/strong&gt;. Зачастую имеет намного меньший размер бэкапа чем &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Используется для того, чтобы быстрее выполнять повседневный бэкап. Обычно &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt; выполняется раз в неделю, а &lt;strong&gt;Дифференциальный бэкап (Differential Backup)&lt;/strong&gt; каждый день.&lt;/p&gt;

&lt;p&gt;Для восстановления &lt;strong&gt;Дифференциального бэкапа (Differential Backup)&lt;/strong&gt; нужно сперва восстановить &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt;. Причём вы не сможете восстановить &lt;strong&gt;Дифференциальный бэкап (Differential Backup)&lt;/strong&gt;, который был создан до &lt;strong&gt;Полного бэкапа (Full Backup)&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Diff.bak'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DIFFERENTIAL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Full.bak'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NORECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Diff.bak'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/mssql/mssql-backups-diff-ercovery-process.drawio.png&quot; alt=&quot;Microsoft SQL Server diff recovery&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;бэкап-журнала-транзакций-transaction-log-backup&quot;&gt;Бэкап журнала транзакций (Transaction Log Backup)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/mssql/log-backup.png&quot; alt=&quot;Microsoft SQL Server Log backup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Этот тип бэкапа включает только резервные копии логов транзакций, в которые записываются все изменения базы данных. Использование &lt;strong&gt;Бэкапа журнала транзакций (Transaction Log Backup)&lt;/strong&gt; даёт вам возможность восстановится на конкретное время. Например, если вы делаете &lt;strong&gt;Бэкап журнала транзакций (Transaction Log Backup)&lt;/strong&gt; каждые пять минуть, то при потере сервера вы максимум потеряете данные за пять минут, что не так уж и плохо.&lt;/p&gt;

&lt;p&gt;В организациях где очень важно не потерять данные просто не имеет права не использовать этот тип бэкапа. Так как этот тип бэкапа самый быстрый.&lt;/p&gt;

&lt;p&gt;Для того чтобы восстановить &lt;strong&gt;Бэкап журнала транзакций (Transaction Log Backup)&lt;/strong&gt; вам сперва необходимо восстановить &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt; и самый последний &lt;strong&gt;Дифференциальный бэкап (Differential Backup)&lt;/strong&gt;, если он есть.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOG&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Log.trn'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Full.bak'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NORECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Diff.bak'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NORECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOG&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Log.trn'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/mssql/mssql-backups-trn-ercovery-process.drawio.png&quot; alt=&quot;Microsoft SQL Server Log recovery&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;бэкап-только-для-копирования-copy-only-backup&quot;&gt;Бэкап только для копирования (Copy-Only Backup)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;По сути это такой же &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt; но только с одним отличием, он ни как не влияет на другие типы бэкапа.&lt;/p&gt;

&lt;p&gt;Мы уже говорили, что если вы делаете &lt;strong&gt;Полный бэкап (Full Backup)&lt;/strong&gt; то он становится отправной точкой для всех будущих &lt;strong&gt;Дифференциальных бэкапов (Differential Backup)&lt;/strong&gt; и &lt;strong&gt;Бэкапов журнала транзакций (Transaction Log Backup)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Обычно используется для передачи бэкапа другим лицам или просто для проверки восстановления базы данных.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_CopyOnly.bak'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;COPY_ONLY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_CopyOnly.bak'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;REPLACE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;бэкап-файлов-и-файловых-групп-file-and-filegroup-backup&quot;&gt;Бэкап файлов и файловых групп (File and Filegroup Backup)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Использование этого метода позволяет вам создать резервные копии отдельных файлов или групп файлов в базе данных. Используется если у вас большая баз данных, разбитая на несколько файлов.&lt;/p&gt;

&lt;p&gt;Идеально подходит для случаев, когда определённая часть вашей базы данных подвержена частым операциям обновления. Или же просто, когда необходимо восстановить только часть базы данных.&lt;/p&gt;

&lt;p&gt;Для того чтобы восстановить данные придётся немного попотеть поскольку может потребоваться сочетание резервных копий файлов, файловых групп и, возможно, журналов транзакций.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILEGROUP&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'FG1'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_FG1.bak'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOG&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Log.trn'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILEGROUP&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'FG1'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_FG1.bak'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOG&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;YourDatabaseName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;s1&quot;&gt;'C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\B&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ackups&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\Y&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;ourDatabase_Log.trn'&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 24 May 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/microsoft-sql-server-backup-types</link>
        <guid isPermaLink="true">http://www.tipoit.kz/microsoft-sql-server-backup-types</guid>
        
        <category>security</category>
        
        <category>restore</category>
        
        <category>backup</category>
        
        <category>mssql</category>
        
        
      </item>
    
      <item>
        <title>PostgreSQL - Логирование действий пользователя (log_statement)</title>
        <description>&lt;p&gt;Если вы используете в своих проектах базы данных и если это еще и проекты, которые должны проходить всякие проверки и соответствовать требованиям ИБ, то вы скорее всего рано или поздно зададитесь вопросом аудита/логирования действий пользователя с базами данных.&lt;/p&gt;

&lt;p&gt;В этой статье мы рассмотрим, как включить аудит/логирование действий пользователя в &lt;strong&gt;PostgreSQL&lt;/strong&gt;. Для осуществления аудита/логирования я буду использовать встроенную функцию логирования в &lt;strong&gt;PostgreSQL&lt;/strong&gt; (&lt;strong&gt;log_statement&lt;/strong&gt;). Также можно воспользоваться расширением &lt;strong&gt;pgAudit&lt;/strong&gt;, который я рассматривал в этой статье.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;что-именно-логировать&quot;&gt;Что именно логировать?&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала нужно определится что именно записывать в лог файлы, т.е. какие выполняемые команды необходимо включить в аудит.&lt;/p&gt;

&lt;p&gt;Для того, чтобы задать что именно мы будет логировать используется переменная &lt;strong&gt;log_statement&lt;/strong&gt;, которая может иметь следующие значения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;none&lt;/strong&gt; - ничего не логировать (выключено)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ddl&lt;/strong&gt; - операции &lt;code class=&quot;highlighter-rouge&quot;&gt;CREATE&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;ALTER&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;DROP&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;mod&lt;/strong&gt; - всё что в ddl плюс операторы изменения данных, такие как &lt;code class=&quot;highlighter-rouge&quot;&gt;INSERT&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;UPDATE&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;DELETE&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;TRUNCATE&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;COPY FROM&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;PREPARE&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;EXECUTE&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;EXPLAIN ANALYZE&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;all&lt;/strong&gt; - все команды&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Важно отметить что все записи аудита будут повторять саму команду точь-в-точь, т.е. если &lt;code class=&quot;highlighter-rouge&quot;&gt;log_statement = all&lt;/code&gt; и вы выполняете команду установки пароля для пользователя как простой текст, то в логах вы увидите этот пароль. Подробнее я рассматривать такую ситуацию &lt;a href=&quot;https://www.tipoit.kz/postgresql-password-in-clear-text-in-log&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;подготовка&quot;&gt;Подготовка&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перед тем ка приступить к включению аудита подготовим немного наш сервер к этому.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создадим тестовую бд
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo -u postgres psql postgres
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exampledb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exampledb&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;users&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERIAL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INTEGER&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;email&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;150&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создадим тестового пользователя
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'11111111'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выдадим права пользователю
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exampledb&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CONNECT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exampledb&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INSERT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;UPDATE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DELETE&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TABLES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SEQUENCES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;grant&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;all&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;database&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exampledb&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USAGE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;включаем-аудит-действий&quot;&gt;Включаем аудит действий&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Аудит можно включить, используя несколько методов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Глобально для всех пользователей в файле &lt;strong&gt;postgresql.conf&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Для конкретного пользователя используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;ALTER ROLE user_name SET log_statement TO 'all';&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Для конкретной бд, например &lt;code class=&quot;highlighter-rouge&quot;&gt;ALTER  DATABASE my_database SET log_statement =  'all';&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Для конкретной сессии, например &lt;code class=&quot;highlighter-rouge&quot;&gt;SET log_statement =  'all';&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для того, чтобы настроить глобально выполняем следующее:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/postgresql/16/main/postgresql.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;log_directory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'pg_log'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Где&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хранить&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;логи&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;log_filename&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'postgresql-%Y-%m-%d_%H%M%S.log'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Имя&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;файла&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;логами&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;log_statement&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mod&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart postgresql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы настроить аудит для конкретного пользователя выполняем следующее:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo -u postgres psql postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;alter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;log_statement&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'all'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;проверяем-работу-аудита-действий&quot;&gt;Проверяем работу аудита действий&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Подключаемся к базе под пользователем &lt;code class=&quot;highlighter-rouge&quot;&gt;test&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql -U &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; -d exampledb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выполняем команду INSERT
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;users&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'John Doe'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'john.doe@example.com'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;users&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'John Doe'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'john.doe@example.com'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;В логах проверяем записи о добавлении этих двух строк
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/log/postgresql/postgresql-16-main.log
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2024-05-20&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;55.826&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52823&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test@exampledb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LOG:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;statement:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INSERT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INTO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(name,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;age,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;email)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;('John&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Doe',&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'john.doe@example.com');&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024-05-20&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;57.369&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52823&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test@exampledb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LOG:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;statement:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INSERT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INTO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(name,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;age,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;email)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;('John&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Doe',&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'john.doe@example.com');&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 20 May 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/postgresql-enable-audit-log-statement</link>
        <guid isPermaLink="true">http://www.tipoit.kz/postgresql-enable-audit-log-statement</guid>
        
        <category>security</category>
        
        <category>postgresql</category>
        
        <category>database</category>
        
        <category>audit</category>
        
        
      </item>
    
      <item>
        <title>Docker Compose</title>
        <description>&lt;p&gt;Как я говорил ранее контейнеры как правило живут не долго, причин на это немало, начиная от простого обновления образа контейнера заканчивая простой выкладкой нового приложения. И если каждый раз пересоздавать контейнер вручную, то придётся писать, как минимум три команды для каждого контейнера (стоп, удалить, старт). Помимо этого, нужно еще вспомнить какой образ используется. Ну а если у вас проект, который состоит из нескольких контейнеров одновременно то всё становится еще сложнее.&lt;/p&gt;

&lt;p&gt;Еще одно преимущество использования Docker Compose это быстрая изоляция одних контейнеров от других и связь контейнеров по сети. У меня уже есть статьи про сети и про DNS псевдонимы. Используя Docker Compose вы можете автоматически объединить несколько контейнеров в одну общую сеть и обращаться внутри сети по dns именам.&lt;/p&gt;

&lt;p&gt;Также используя Docker Compose можно управлять и хранилищем для контейнеров.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-compose-benefits.svg&quot; alt=&quot;docker-compose-benefits&quot; /&gt;&lt;/p&gt;

&lt;p&gt;И всё это можно получить просто, описав весь конфиг в одном файле. В качестве конфиг-файла используется yaml файл, по умолчанию имя файла docker-compose.yaml. И всё что вам нужно для работы с кучей контейнеров вы можете получить в одном файле, что даёт возможность управлять контейнеризацией быстрее и проще.&lt;/p&gt;

&lt;p&gt;Для управление всем этим добром используется утилита &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt;. Скорее всего вы уже слышали или еще услышите, что &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; не рекомендуется к использованию в боевой середе, мол только для разработки или тестов. Говорят, так потому что считается что лучше использовать для боевой среды kubernetes. И я с этим согласен, но что если вам нужно поднять всего с десяток контейнеров? Разве стоит ради этого создавать кластер kubernetes? Как по мне нет и вместо того чтобы вручную создавать каждый контейнер проще использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt;, ничего страшного я здесь не вижу.&lt;/p&gt;

&lt;h3 id=&quot;файл-docker-composeyaml&quot;&gt;файл docker-compose.yaml&lt;/h3&gt;

&lt;p&gt;Первое на что стоит обратить при разговоре про файл docker-compose.yaml это версионность. Файл docker-compose.yaml имеет версии, на данный момент это - 1, 2, 2.1, 3.2, 3.8. Каждая версия указывает на то какие ключи вы можете использовать при написании файла и какой синтаксис.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-compose-versioning.svg&quot; alt=&quot;docker-compose-versioning&quot; /&gt;&lt;/p&gt;

&lt;p&gt;🥶docker-compose.yaml.version&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;services:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ports:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;8080:80&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;environment:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTGRES_PASSWORD:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;С конца 2021 года &lt;strong&gt;Docker объединил Compose V2&lt;/strong&gt;  и ввёл &lt;strong&gt;единый стандарт&lt;/strong&gt; — &lt;a href=&quot;https://docs.docker.com/reference/compose-file/&quot;&gt;Compose Specification&lt;/a&gt;. Теперь версию можно вовсе не указывать, пи обращению к файлу Docker сам определяет формат по структуре YAML-файла.&lt;/p&gt;

&lt;p&gt;😊docker-compose.yaml&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;services:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ports:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;8080:80&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;db:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;environment:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTGRES_PASSWORD:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но если вы просто пишите версию в файле наугад, то делаете неправильно. Версия файла, которую вы можете использовать зависит от версии вашего &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker compose version
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.27&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же вдруг в выводе будет версия v1.x, то у меня для вас плохие новости новые версии использовать вы не сможете и придётся указывать версию руками в файле. А вообще сидеть сейчас на старом &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; нет никакого смысла.&lt;/p&gt;

&lt;p&gt;Имя файла конечно же может быть и другим, но в таком случае при использовании команды &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; необходимо передать имя файла используя опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;-f&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Зачастую многие разработчики софта создают уже готовый docker-compose.yaml и размещают его на github. В таком случае конечному пользователю всего лишь необходимо скачать этот файл и создать все необходимые контейнеры для работы приложения, очень удобно и быстро.&lt;/p&gt;

&lt;h3 id=&quot;файл-docker-composeyaml-1&quot;&gt;файл docker-compose.yaml&lt;/h3&gt;

&lt;p&gt;Рассмотрим базовый docker-compose.yaml, который создаст два контейнера (app, db) в одной сети backend.&lt;/p&gt;

&lt;p&gt;Обратите внимание на отступы, если не соответствовать иерархии (отступам), то при попытке создания контейнеров вы получите ошибку. Лучше использовать редакторы с возможностью анализировать структуру yaml файлов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-compose-file-structure.svg&quot; alt=&quot;docker-compose-file-structure&quot; /&gt;&lt;/p&gt;

&lt;p&gt;🪲docker-compose.yaml&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# 📦 Раздел &quot;services&quot; — описывает контейнеры, которые будут запущены.&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;python:3.11-slim&lt;/span&gt;               &lt;span class=&quot;c1&quot;&gt;# образ контейнера&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;container_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;myapp&lt;/span&gt;                 &lt;span class=&quot;c1&quot;&gt;# имя контейнера (опционально, dns name)&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;                                &lt;span class=&quot;c1&quot;&gt;# если хочешь собрать из Dockerfile&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;.&lt;/span&gt;                          &lt;span class=&quot;c1&quot;&gt;# путь к Dockerfile&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;dockerfile&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Dockerfile&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;python app.py&lt;/span&gt;                &lt;span class=&quot;c1&quot;&gt;# команда, выполняемая при старте&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;working_dir&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/usr/src/app&lt;/span&gt;             &lt;span class=&quot;c1&quot;&gt;# рабочая директория внутри контейнера&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;.:/usr/src/app&lt;/span&gt;                    &lt;span class=&quot;c1&quot;&gt;# монтирование локальной папки&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;app_data:/data&lt;/span&gt;                    &lt;span class=&quot;c1&quot;&gt;# подключение именованного volume&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;8080:80&quot;&lt;/span&gt;                         &lt;span class=&quot;c1&quot;&gt;# проброс портов (host:container)&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;                          &lt;span class=&quot;c1&quot;&gt;# переменные окружения&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;DEBUG=True&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;DATABASE_URL=postgres://user:pass@db:5432/mydb&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;                           &lt;span class=&quot;c1&quot;&gt;# зависимости между контейнерами&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;db&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;                             &lt;span class=&quot;c1&quot;&gt;# указание сетей&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;backend&lt;/span&gt;

  &lt;span class=&quot;s&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;postgres:15&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;restart&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;always&lt;/span&gt;                       &lt;span class=&quot;c1&quot;&gt;# политика перезапуска&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;user&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;pass&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;POSTGRES_DB&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mydb&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;pg_data:/var/lib/postgresql/data&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# подключение именованного volume&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;backend&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# 🗃️ Раздел &quot;volumes&quot; — хранение постоянных данных (не удаляются при stop).&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;pg_data&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;app_data&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# 🌐 Раздел &quot;networks&quot; — настройка сетей между контейнерами.&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;backend&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;bridge&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# тип сети (по умолчанию — bridge)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;создание-контейнеров-с-помощью-docker-compose&quot;&gt;Создание контейнеров с помощью docker compose&lt;/h3&gt;

&lt;p&gt;Теперь когда есть готовый файл docker-compose.yaml нужно как-то создать контейнеры используя его. Для создания контейнеров используется &lt;code class=&quot;highlighter-rouge&quot;&gt;docker compose&lt;/code&gt;, в более старых версиях &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt;. Если у вас не установлен &lt;code class=&quot;highlighter-rouge&quot;&gt;docker compose&lt;/code&gt;, то выполните установку docker-compose-plugin, более подробнее для &lt;a href=&quot;https://docs.docker.com/engine/install/centos/&quot;&gt;RHEL&lt;/a&gt; и &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;Ubuntu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для начала проверим что что можно сделать, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;docker compose&lt;/code&gt; вызвав справку ````docker compose –help```. Вот список наиболее часто используемых команд:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;down - остановка и удаление контейнеров и сетей&lt;/li&gt;
  &lt;li&gt;exec - выполнение команды внутри контейнера&lt;/li&gt;
  &lt;li&gt;logs - просмотр логов контейнера&lt;/li&gt;
  &lt;li&gt;ps - просмотр списка контейнеров&lt;/li&gt;
  &lt;li&gt;pull - скачивание образа для контейнера&lt;/li&gt;
  &lt;li&gt;restart - перезапуск контейнера&lt;/li&gt;
  &lt;li&gt;start - запуск контейнера&lt;/li&gt;
  &lt;li&gt;stop - остановка контейнера&lt;/li&gt;
  &lt;li&gt;top - просмотр процессов&lt;/li&gt;
  &lt;li&gt;up - создание и запуск контейнеров&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Как вы поняли из списка команды выше для создания контейнеров используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker compose up&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для начала я создам файл docker-compose.yaml с одним контейнером использующим образ nginx и выполню команду создания и запуска контейнеров.&lt;/p&gt;

&lt;p&gt;🪲docker-compose.yaml&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;mynginx&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;1.18&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;80:80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;⠼&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Network&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dockerfile_default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Created&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                                                              
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;✔&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dockerfile-mynginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Started&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь я проверю что контейнер действительно запустился. Обратите внимание что &lt;code class=&quot;highlighter-rouge&quot;&gt;docker compose ps&lt;/code&gt; и просто &lt;code class=&quot;highlighter-rouge&quot;&gt;docker ps&lt;/code&gt; выведут разные списки. Дело в том, что &lt;code class=&quot;highlighter-rouge&quot;&gt;docker compose&lt;/code&gt; работает только с контейнерами, которые описаны в файле.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;dockerfile-mynginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;dockerfile-mynginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ome-postgresql&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;				&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;17.6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;остановка-и-удаление-контейнеров-с-помощью-docker-compose&quot;&gt;Остановка и удаление контейнеров с помощью docker compose&lt;/h3&gt;

&lt;p&gt;Если нужно просто остановить контейнеры, но сохранить их так же как ив аналогии с командой docker используется stop.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker compose stop
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;✔&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dockerfile-mynginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stopped&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же нужно еще и удалить созданные контейнеры с помощью docker compose используется down, созданные volume при этом не удаляются.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker compose down
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;✔&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dockerfile-mynginx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Removed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;✔&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Network&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dockerfile_default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Removed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/k8s/docker-compose-lifecycle.svg&quot; alt=&quot;docker-compose-lifecycle&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 19 May 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-compose</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-compose</guid>
        
        <category>Docker</category>
        
        <category>Kubernetes</category>
        
        <category>k8s</category>
        
        
      </item>
    
      <item>
        <title>Linux - Как восстановить потерянные или удалённые данные</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/y1M2mZx9uTo?si=l_B3gz9OEmfBIOoy&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Начнем с небольшой теории, когда вы удаляете данные, по факту они не удаляются сразу с жесткого диска. Они просто становится по сути невидимым для вас, но всё еще остаётся лежать где-то на жёстком диске и место занимаемое этими данными помечается как доступное. При создании файлов данные разбиваются на куски и хранятся в определённые блоках на жестком диске и пока другие данные не перезапишут эти данные удаленных файлов, они всё еще будут находится там.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/scalpel.drawio.png&quot; alt=&quot;file deleting process&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Я заведомо не расписываю всё до малейших мелочей потому как вникать во все подробности не очень-то и интересно обычному пользователю. Вот примерно, что происходит, когда вы удаляете данные:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Файлы помечаются как удалённые и скрываются от пользователя&lt;/li&gt;
  &lt;li&gt;Все блоки в которых хранятся данные файлов помечаются как для перезаписи, т.е. меняется состояние блоков. Место занимаемое данными помечается как свободное и доступное для перезаписи&lt;/li&gt;
  &lt;li&gt;При создании новых файлов данные могут быть помещены в эти блоки и соответственно перезаписывают те данные, которые были помечены для перезаписи&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Теперь, когда мы понимаем, как это работает можно догадаться что данные в блоках, могут быть и не перезаписаны, если не были созданы новые файлы, а стало быть данные всё ещё можно достать оттуда.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;устанавливаем-scalpel&quot;&gt;Устанавливаем Scalpel&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для восстановления удалённых данных, если они еще не перезаписаны мы будем пользоваться утилитой   &lt;strong&gt;Scalpel&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install scalpel

sudo yum install epel-release
sudo yum install scalpel

sudo pacman -S scalpel
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;файл-конфигурации&quot;&gt;Файл конфигурации&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я думаю стоит обратит отдельное внимание на файл конфигурации (&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/scalpel.conf&lt;/code&gt;), так как в нём прописаны уже предустановленные типы файлов, которые вы можете восстановить. Дело в том, что &lt;strong&gt;Scalpel&lt;/strong&gt; ищет только те файлы, расширение которых подпадает под настройки в файле конфигурации.&lt;/p&gt;

&lt;p&gt;Но помимо расширения в файле также указывается минимальный и максимальный размер файла. А также стандартный заголовок и нижний колонтитул файла.&lt;/p&gt;

&lt;p&gt;Для примера возьмём строку &lt;code class=&quot;highlighter-rouge&quot;&gt;jpg y 5:200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9&lt;/code&gt;, где:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;jpg&lt;/strong&gt; - Расширение файла&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;y&lt;/strong&gt; - Чувствительны ли верхний и нижний колонтитулы к регистру&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;5:200000000&lt;/strong&gt; - Минимальный и максимальный размер файла&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;\xff\xd8\xff\xe0\x00\x10&lt;/strong&gt; - Стандартный заголовок, идентифицирующий начало файла&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;\xff\xd9&lt;/strong&gt; - Стандартный нижний колонтитул, обозначающий конец файла&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;восстанавливаем-данные&quot;&gt;Восстанавливаем данные&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Очень важное замечание: При восстановлении подключите к вашему компьютеру другое устройство хранения данных, чтобы не восстанавливать данные на тот же жёсткий диск, с которого данные были удалены.&lt;/p&gt;

&lt;p&gt;Если вы восстанавливаете файлы с расширением, который уже есть в файле конфигурации то проблем по сути возникнуть недолжно. Например, попробуем восстановить удалённые картинки с диска &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sda&lt;/code&gt; в папку &lt;code class=&quot;highlighter-rouge&quot;&gt;/sdb&lt;/code&gt; (отдельный диск).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim scalpel.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;jpg&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200000000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\xff\xd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\xff\xe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\xff\xd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo scalpel -c scalpel.conf -o /sdb/ /dev/sda
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;восстанавливаем-файлы-txt&quot;&gt;Восстанавливаем файлы txt&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот тут уже немного посложнее, мы уже говорили, что в конфиге также указывается &lt;strong&gt;Стандартный заголовок&lt;/strong&gt; и &lt;strong&gt;Стандартный нижний колонтитул&lt;/strong&gt;. Это значит, что мы каким-то образом сперва должны получить эти значения для удалённого файла. Звучит немного сложно, но давайте попробуем разобраться.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Если вы знаете что ваш удалённый файл начинался со строки  &lt;code class=&quot;highlighter-rouge&quot;&gt;just&lt;/code&gt;, то вы можете создать новый файл и получить &lt;strong&gt;Стандартный заголовок&lt;/strong&gt; и &lt;strong&gt;Стандартный нижний колонтитул&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;just for test&quot;&lt;/span&gt; &amp;gt; 111.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Теперь получим заголовок используя утилиту &lt;strong&gt;head&lt;/strong&gt;, где считаем первые 4 символов и переведём их в &lt;strong&gt;hex&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;head --bytes 4 111.txt | hexdump -C
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;75&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;73&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;74&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Тоже самое сделаем и с концом файла, чтобы получить нижний колонтитул&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tail --bytes -4 111.txt | hexdump -C
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;73&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;74&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol&gt;
  &lt;li&gt;Редактируем файл конфигурации&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim scalpel.conf 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;75&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;73&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;74&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;73&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;74&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Запускаем восстановление&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo scalpel -c scalpel.conf -o /sdb/ /dev/sda 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;header&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\x6a\x75\x73\x74&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;footer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\x65\x73\x74\x0a&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;57845&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Проверяем что в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/sdb&lt;/code&gt; восстановились файлы &lt;code class=&quot;highlighter-rouge&quot;&gt;txt&lt;/code&gt;, которые начинаются со строки &lt;code class=&quot;highlighter-rouge&quot;&gt;just for test&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo grep -rnw /sdb1/ -e &lt;span class=&quot;s2&quot;&gt;&quot;just for test&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/sdb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/txt&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-0-50&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00050711&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.txt:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:just&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;итог&quot;&gt;Итог&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Утилита хорошая и вроде даже как её называют в интернете одной из лучших для восстановления, но вот если вы хотите восстановить файлы с расширением, которого нет в файле конфигурации и которые имеют нестандартный заголовок, который может меняться то будет немного сложно это осуществить.&lt;/p&gt;
</description>
        <pubDate>Fri, 17 May 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-how-to-recover-deleted-data</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-how-to-recover-deleted-data</guid>
        
        <category>security</category>
        
        <category>restore</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Linux - Запись терминала</title>
        <description>&lt;p&gt;Причины для записи конечно у каждого свои, для меня, например, это запись команд для блога. В этой статье будем использовать утилиту asciinema.&lt;/p&gt;

&lt;script src=&quot;https://asciinema.tipoit.kz/a/7WdB5TRGoxxCO7yQVoAPfWfxy.js&quot; id=&quot;asciicast-9&quot; async=&quot;true&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;установка--asciinema&quot;&gt;Установка  asciinema&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самую свежую информацию о установке можно получить на &lt;a href=&quot;https://docs.asciinema.org/manual/cli/installation/#__tabbed_10_2&quot;&gt;офсайте&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;debian&quot;&gt;Debian&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install asciinema
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;fedora&quot;&gt;Fedora&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install asciinema
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;ubuntu&quot;&gt;Ubuntu&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install asciinema
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;с-исходников&quot;&gt;С исходников&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf -y install git
git  clone  https://github.com/asciinema/asciinema.git
&lt;span class=&quot;nb&quot;&gt;cd  &lt;/span&gt;asciinema
git  checkout  main
python3  -m  asciinema  --version
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;запись-терминала&quot;&gt;Запись терминала&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я устанавливал с исходников, поэтому я запускаю, используя python3. Если вы установили из репозитория то команда будет выглядеть так &lt;code class=&quot;highlighter-rouge&quot;&gt;asciinema rec /tmp/demo.cast&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python3 -m asciinema rec /tmp/demo.cast
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;asciinema:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;recording&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;finished&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;asciinema:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;asciicast&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;saved&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/demo.cast&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы просмотреть запись можно выполнить команду:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python3 -m asciinema play /tmp/demo.cast
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Печатать во время этой команды ничего не получится, для выхода можно нажать CTRL+C. Это просто воспроизведение, команда не выполнится повторно.&lt;/p&gt;

&lt;p&gt;Также можно вывести всё в текстовом виде, используя команду:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python3 -m asciinema cat /tmp/demo.cast
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;конвертация&quot;&gt;Конвертация&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мне лично удобнее использовать формат gif, поэтому я конвертирую полученную запись в формат gif через docker.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run --rm -v /tmp/:/data asciinema2/asciicast2gif -t asciinema demo.cast demo.gif

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 04 May 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-record-terminal</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-record-terminal</guid>
        
        <category>security</category>
        
        <category>asciinema</category>
        
        
      </item>
    
      <item>
        <title>Vault - Блокировка пользователя</title>
        <description>&lt;p&gt;Как и во многих системах в &lt;strong&gt;Vault Hashicorp&lt;/strong&gt; есть встроенный функционал &lt;code class=&quot;highlighter-rouge&quot;&gt;блокировки пользователя&lt;/code&gt; после нескольких неудачных попыток входа. Если пользователь заблокировался, то при попытке входа он получит ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;Authentication failed: permission denied&lt;/code&gt;. Как обычно пользователь блокируется на определённое время. После истечения этого времени пользователь снова может авторизоваться, если конечно введёт правильный пароль.&lt;/p&gt;

&lt;p&gt;По умолчанию функция блокировка активна и имеет следующие пороговые значения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;количество неудачных авторизаций для блокировки - 5&lt;/li&gt;
  &lt;li&gt;продолжительность блокировки - 15 минут&lt;/li&gt;
  &lt;li&gt;сброс счетчика блокировки - 15 минут&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;отключение-функции-блокировки-пользователя&quot;&gt;Отключение функции блокировки пользователя&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы отключить блокировку в целом можно запустить сервис с переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;VAULT_DISABLE_USER_LOCKOUT = true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Или можно отключить для конкретного метода аутентификации в файле конфигурации самого &lt;strong&gt;Vault&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/vault/config.hcl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;user_lockout &quot;userpass&quot; { disable_lockout = &quot;true&quot; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;изменить-продолжительность-блокировки&quot;&gt;Изменить продолжительность блокировки&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Опять-таки нам понадобиться отредактировать файл конфигурации самого &lt;strong&gt;Vault&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/vault/config.hcl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;user_lockout &quot;userpass&quot; { lockout_duration = &quot;5m&quot; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;изменить-количество-неудачных-авторизаций-для-блокировки&quot;&gt;Изменить количество неудачных авторизаций для блокировки&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Опять-таки нам понадобиться отредактировать файл конфигурации самого &lt;strong&gt;Vault&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/vault/config.hcl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;user_lockout &quot;userpass&quot; { lockout_threshold  =  &quot;25&quot; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;изменить-значение-сброса-счетчика-блокировки&quot;&gt;Изменить значение сброса счетчика блокировки&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Опять-таки нам понадобиться отредактировать файл конфигурации самого &lt;strong&gt;Vault&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/vault/config.hcl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;user_lockout &quot;userpass&quot; { lockout_counter_reset  =  &quot;10m&quot; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;изменить-значения-через-vault-tune&quot;&gt;Изменить значения через vault tune&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Помимо редактирования файла конфигурации таже можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;vault auth tune&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vault auth tune -user-lockout-threshold&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;25  -user-lockout-duration&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;5m -user-lockout-counter-reset&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;10m userpass/

vault &lt;span class=&quot;nb&quot;&gt;read &lt;/span&gt;sys/auth/userpass/tune
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;user_lockout_disable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user_lockout_duration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user_lockout_threshold&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user_lockout_counter_reset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;разблокировать-пользователя&quot;&gt;Разблокировать пользователя&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;О том как разблокировать пользователя можно почитать &lt;a href=&quot;https://tipoit.kz/vault-user-unlock&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 03 Apr 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ault-user-lock-config</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ault-user-lock-config</guid>
        
        <category>vault</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Vault - Разблокировать пользователя</title>
        <description>&lt;p&gt;Впервые столкнулся с тем что разработчик не может авторизоваться в &lt;strong&gt;vault&lt;/strong&gt;. При попытке авторизоваться он получал ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;Authentication failed: permission denied&lt;/code&gt; в vault.&lt;/p&gt;

&lt;p&gt;В итоге оказалось, что его пользователь просто заблокировался после нескольких неудачных попытках авторизации. Как так получилось это конечно хороший вопрос, но не разгаданный.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;просмотр-заблокированных-пользователей-в-vault&quot;&gt;Просмотр заблокированных пользователей в vault&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;set history&lt;/span&gt; +o
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;your_token_here

curl &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --header &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$token&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --request GET &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    https://vault.example.lan/v1/sys/locked-users
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если в выводе видите пользователей, то значит они заблокированы.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;разблокировать-пользователя-в-vault&quot;&gt;Разблокировать пользователя в vault&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;set history&lt;/span&gt; +o
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;your_token_here

curl &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --header &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$token&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --request POST &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    https://vault.example.lan/v1/sys/locked-users/auth_userpass_e58bede8/unlock/username_here
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;auth_userpass_e58bede8&lt;/code&gt; меняем на свое, получить его можно в выводе команды просмотра заблокированных пользователей&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 03 Apr 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vault-user-unlock</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vault-user-unlock</guid>
        
        <category>vault</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Microsoft SQL Server - Что такое xp_cmdshell</title>
        <description>&lt;p&gt;Если частенько сталкивались с бэкапом или восстановлением бд по локальной сети скорее всего вы использовали эту команду. Но использование этой команды крайне не рекомендуется. Да, всё в стиле microsoft использовать мы конечно не рекомендуем, но вот как восстановить бэкап который лежит где-то в сетевой папке и доступ к ней у конкретного пользователя без &lt;code class=&quot;highlighter-rouge&quot;&gt;xp_cmdshell&lt;/code&gt; мы рассматривать не будем.&lt;/p&gt;

&lt;p&gt;Так вот используя &lt;code class=&quot;highlighter-rouge&quot;&gt;xp_cmdshell&lt;/code&gt; мы можем выполнять &lt;code class=&quot;highlighter-rouge&quot;&gt;cmd команды&lt;/code&gt; в локальной системе через &lt;strong&gt;ms sql server&lt;/strong&gt;, при этом от учетной записи самого ms sql server. Теперь понимаете почему не рекомендуется включать эту функцию?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;включаем-xp_cmdshell&quot;&gt;Включаем xp_cmdshell&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как я говорил выше по умолчанию эта функция выключена, чтобы включить выполняем от пользователя с правами &lt;code class=&quot;highlighter-rouge&quot;&gt;sysadmin&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;-- To allow advanced options to be changed.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sp_configure&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'show advanced options'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- To update the currently configured value for advanced options.&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;RECONFIGURE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- To enable the feature.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sp_configure&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'xp_cmdshell'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- To update the currently configured value for this feature.&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;RECONFIGURE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- To set &quot;show advanced options&quot; back to false&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sp_configure&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'show advanced options'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- To update the currently configured value for advanced options.&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;RECONFIGURE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;учётная-запись-прокси-для-xp_cmdshell&quot;&gt;Учётная запись прокси для xp_cmdshell&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Дело в том, что обычный пользователь, который не имеет права &lt;code class=&quot;highlighter-rouge&quot;&gt;sysadmin&lt;/code&gt; не сможет выполнять команды через &lt;code class=&quot;highlighter-rouge&quot;&gt;xp_cmdshell&lt;/code&gt;. Для этого ему понадобится прокси с учетными данными пользователя с ролью &lt;code class=&quot;highlighter-rouge&quot;&gt;sysadmin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если никаких прокси нет, то вы получите ошибку:&lt;/p&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Msg&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;15153&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Level&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;State&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Procedure&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xp_cmdshell&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Line&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Batch&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Start&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Line&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;The&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xp_cmdshell&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;proxy&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;account&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;information&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cannot&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;be&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;retrieved&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;invalid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Verify&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;that&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'##xp_cmdshell_proxy_account##'&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;credential&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;exists&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;contains&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;valid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;information&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы создать прокси выполняем:&lt;/p&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;EXEC&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sp_xp_cmdshell_proxy_account&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'server&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\А&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;дминистратор'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'pwd'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;server\Администратор&lt;/strong&gt; - собственно, пользователь у которого есть права &lt;code class=&quot;highlighter-rouge&quot;&gt;sysadmin&lt;/code&gt; и который является также локальным пользователем ОС&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;pwd&lt;/strong&gt; - пароль от этого пользователя&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если вдруг нужно удалить прокси:&lt;/p&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;EXEC&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sp_xp_cmdshell_proxy_account&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;выдать-разрешения-на-xp_cmdshell&quot;&gt;Выдать разрешения на xp_cmdshell&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь, когда есть прокси можно разрешить пользователю выполнять команды через &lt;code class=&quot;highlighter-rouge&quot;&gt;xp_cmdshell&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xp_cmdshell&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&amp;lt;some_user&amp;gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Чтобы проверить что всё работает выполняем команду от пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;some_user&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;EXEC&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xp_cmdshell&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'whoami.exe'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 02 Apr 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/mssql-xp-cmdshell</link>
        <guid isPermaLink="true">http://www.tipoit.kz/mssql-xp-cmdshell</guid>
        
        <category>microsoft</category>
        
        <category>mssql</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - Перевыпуск сертификатов или HTTP Status 500</title>
        <description>&lt;p&gt;Если вы вдруг неожиданно получаете ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTP Status 500 – Internal Server Error vcenter&lt;/code&gt; при авторизации в &lt;strong&gt;Vcenter Server&lt;/strong&gt;, то возможно, что причина в просроченных сертификатов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;http-status-500--internal-server-error-vcenter&quot;&gt;HTTP Status 500 – Internal Server Error vcenter&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Заходим на сервер по ssh и выполняем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/lib/vmware-vmca/bin/certificate-manager&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;Enter proper value for ‘Hostname’ - dns имя сервера&lt;/li&gt;
      &lt;li&gt;Enter proper value for VMCA ‘Name’ - тут либо dns имя, либо имя сервера (hostname -f)&lt;/li&gt;
      &lt;li&gt;Yes&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;После выполнения команды все сервисы перезапустятся и после можно пробовать авторизоваться.&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Apr 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-cert-renew-http-500</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-cert-renew-http-500</guid>
        
        <category>vcenter</category>
        
        <category>cert</category>
        
        
      </item>
    
      <item>
        <title>Linux - Таймаут sudo</title>
        <description>&lt;p&gt;Я использую &lt;a href=&quot;https://www.tipoit.kz/freeipa-install&quot;&gt;FreeIpa&lt;/a&gt;, на котором подключил &lt;a href=&quot;https://www.tipoit.kz/freeipa-otp-enable&quot;&gt;OTP&lt;/a&gt;. Да это крутая штука и улучшает безопасность в организации, но вот только если всё выполняется через sudo, то постоянно вводить этот &lt;strong&gt;OTP&lt;/strong&gt; надоедает. Здесь выхода только 2:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;отключить его на..р, но это не мой вариант&lt;/li&gt;
  &lt;li&gt;увеличить время запроса пароля, т.е. таймаут сессии &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;увеличиваем-таймаут-сессии-sudo&quot;&gt;Увеличиваем таймаут сессии sudo&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo visudo&lt;/code&gt; и выставляем время через переменную &lt;code class=&quot;highlighter-rouge&quot;&gt;timestamp_timeout&lt;/code&gt;. Переменная принимает время в минутах, например, 10 или даже 2.5.&lt;/p&gt;

&lt;p&gt;Можно дописать к существующей строке:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;env_reset,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;timestamp_timeout=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Или добавить ниже новую строку:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;timestamp_timeout=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. в итоге после ввода пароля для &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt; мы можем в течении 15 минут выполнять команды без запроса пароля.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;пароль-для-каждой-команды-sudo&quot;&gt;Пароль для каждой команды sudo&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы вдруг очень сильно зациклены на безопасности и хотите, чтобы пароль запрашивался для каждой команды &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt; просто выставите значение &lt;code class=&quot;highlighter-rouge&quot;&gt;timestamp_timeout&lt;/code&gt; в нуль.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo visudo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;timestamp_timeout=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 29 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-sudo-timeout</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-sudo-timeout</guid>
        
        <category>linux</category>
        
        <category>sudo</category>
        
        
      </item>
    
      <item>
        <title>Grafana - Canvas Dashboard Добавляем свои собственные svg иконки</title>
        <description>&lt;p&gt;Используя canvas в &lt;strong&gt;Grafana&lt;/strong&gt; можно создавать что-то &lt;a href=&quot;https://play.grafana.org/d/7p7JkqWVz/panel-tests-canvas-examples?orgId=1&quot;&gt;подобное&lt;/a&gt;. Но не так уж и много информации про то, как собственно это делать.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;добавляем-свои-собственные-svg-иконки&quot;&gt;Добавляем свои собственные svg иконки&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;При использовании canvas вы можете добавить на &lt;code class=&quot;highlighter-rouge&quot;&gt;dashboard&lt;/code&gt; иконки &lt;code class=&quot;highlighter-rouge&quot;&gt;svg&lt;/code&gt;.  Лично для меня плюс этих иконок что я могу подсвечивать их в зависимости от метрик. &lt;strong&gt;Т.е. если сервер, который отправляет метрики доступен то иконка будет зелёной, а если нет - то другого цвета&lt;/strong&gt;. Но по умолчанию выбор этих иконок &lt;code class=&quot;highlighter-rouge&quot;&gt;svg&lt;/code&gt; не такой уж и большой.&lt;/p&gt;

&lt;p&gt;Для того чтобы добавить свою иконку нужно поместить её в любую вложенную папку в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/share/grafana/public/img/icons/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для докера можно примонтировать локальную папку к вложенную папке в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/share/grafana/public/img/icons/&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;grafana:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volumes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/grafana-bg/ico:/usr/share/grafana/public/img/icons/iot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;свои-собственные-svg-иконки-не-окрашиваются&quot;&gt;Свои собственные svg иконки не окрашиваются&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вдруг вы устанавливает цвет заливки иконки в зависимости от метрик, но иконка не окрашивается возможно у вас цвет линий задан по умолчанию в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;svg&lt;/code&gt;. Для этого открываем файл в редакторе и удаляем всё связанное с цветом.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim icon.svg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;path4442&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fill:green&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;must&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;deleted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;m430.88 592.9c6.15-10.03 15.9-17.1 25.17-24.07 0.92-0.69 1.84-1.37 2.75-2.06l0.74 0.87c-0.84 0.77-1.69 1.53-2.53 2.3-8.15 7.6-16.23 15.38-23.33 23.98l-2.8-1.02z&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После этого копируем иконку снова и радуемся жизни.&lt;/p&gt;

&lt;p&gt;Пример того, какого цвета у меня зерно кофе если узел доступен и шлёт метрики.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2024-03-28_17-01.png&quot; alt=&quot;green&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Пример того, какого цвета у меня зерно кофе если узел недоступен и не шлёт метрики.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2024-03-28_17-02.png&quot; alt=&quot;brown&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 28 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/grafana-your-own-svg-in-canvas</link>
        <guid isPermaLink="true">http://www.tipoit.kz/grafana-your-own-svg-in-canvas</guid>
        
        <category>grafana</category>
        
        <category>canvas</category>
        
        <category>svg</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - WAN-ускорители</title>
        <description>&lt;p&gt;&lt;strong&gt;WAN-ускоритель (WAN Accelerator)&lt;/strong&gt; – это компонент &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt;, предназначенный для оптимизации передачи данных по медленным или загруженным WAN-каналам. Он снижает объем передаваемых данных за счет дедупликации и кэширования.&lt;/p&gt;

&lt;p&gt;WAN-ускоритель — это промежуточный компонент между компонентом Veeam Data Mover источника и Veeam Data Mover конечной стороны. Как правило WAN-ускорители используются для работ с резервными копиями между удалёнными дата-центрами.&lt;/p&gt;

&lt;p&gt;Самое главное если у вас нет под рукой лицензии Enterprise Plus то использовать этот компонент вы не сможете.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-WANaccelerators.drawio.png&quot; alt=&quot;WAN Accelerator&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;как-работает-wan-ускоритель-wan-accelerator&quot;&gt;🪚Как работает WAN-ускоритель (WAN Accelerator)&lt;/h2&gt;

&lt;p&gt;При создании задачи работающей с удаленным хранилищем вы можете выбрать ускоритель в настройках.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Digest (дайджест файл)&lt;/strong&gt; – это &lt;strong&gt;уникальный хеш-суммарный идентификатор&lt;/strong&gt; для каждого блока данных в файле резервной копии. Он помогает определить, изменился ли блок данных по сравнению с предыдущими резервными копиями.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Veeam Backup &amp;amp; Replication распаковывает файл резервной копии для анализа его содержимого&lt;/li&gt;
  &lt;li&gt;Служба Veeam WAN Accelerator Service на сервере с компонентном WAN Accelerator (source) анализирует блоки данных файла, который необходимо передать, и создает дайджест файл для этих блоков данных. Созданный дайджест файл сохраняется в папке VeeamWAN на исходном WAN Accelerator (source)&lt;/li&gt;
  &lt;li&gt;Veeam Backup &amp;amp; Replication сжимает данные файла резервной копии (для резервной копии) или данные ВМ (для репликации) и копирует их на целевую сторону (target).&lt;/li&gt;
  &lt;li&gt;В процессе передачи данных служба Veeam WAN Accelerator Service на целевом WAN-акселераторе (target) заполняет глобальное кэш-хранилище блоками данных из скопированного файла&lt;/li&gt;
  &lt;li&gt;Во время следующего цикла работы служба Veeam WAN Accelerator Service на исходном WAN-акселераторе (source) анализирует блоки данных в файле, которые необходимо передать на этот раз, и создает дайджесты для этих блоков данных.&lt;/li&gt;
  &lt;li&gt;Служба Veeam WAN Accelerator Service (source) сравнивает созданные дайджесты с дайджестами, которые были ранее сохранены в папке VeeamWAN на исходном WAN-акселераторе . Если обнаружены дублирующиеся блоки данных, фактический блок данных в файле резервной копии не копируется по WAN. Вместо этого он берется из глобального кэша и записывается в точку восстановления в папке резервной копии или на целевом томе данных.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В результате такого подхода Veeam Backup &amp;amp; Replication копирует только новые блоки данных в целевую сторону (target)  и используется уже имеющиеся в глобальном кэше.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-WANacceleratorWorks.drawio.png&quot; alt=&quot;WAN Accelerator working&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;️-настройка-wan-ускорителей-в-veeam&quot;&gt;🛠️ Настройка WAN-ускорителей в Veeam&lt;/h2&gt;

&lt;p&gt;Для начала необходимо добавить WAN-ускоритель в инфраструктуру:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; откройте &lt;strong&gt;Backup Infrastructure&lt;/strong&gt; → &lt;strong&gt;WAN Accelerators&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Нажмите &lt;strong&gt;Add WAN Accelerator&lt;/strong&gt;.
 &lt;img src=&quot;/static/img/veeam/2025-02-26_12-53.png&quot; alt=&quot;WAN Accelerator 1&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Укажите сервер и операционную систему (Windows).&lt;/li&gt;
  &lt;li&gt;Введите &lt;strong&gt;IP-адрес или DNS-имя&lt;/strong&gt; сервера.&lt;/li&gt;
  &lt;li&gt;Выберите &lt;strong&gt;кэш-диск&lt;/strong&gt; (нужен &lt;strong&gt;SSD или быстрый HDD&lt;/strong&gt;).&lt;/li&gt;
  &lt;li&gt;Укажите &lt;strong&gt;размер кэша&lt;/strong&gt; (рекомендуется &lt;strong&gt;не менее 100 ГБ&lt;/strong&gt;).
 &lt;img src=&quot;/static/img/veeam/2025-02-26_12-54.png&quot; alt=&quot;WAN Accelerator 2&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Подтвердите параметры → &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Теперь когда у нас есть WAN-ускоритель назначим его какому-либо заданию:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В &lt;strong&gt;Backup &amp;amp; Replication&lt;/strong&gt; создайте новое &lt;strong&gt;репликационное задание&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;В разделе &lt;strong&gt;Traffic Rules&lt;/strong&gt; выберите &lt;strong&gt;WAN Accelerator&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Укажите &lt;strong&gt;Source WAN Accelerator&lt;/strong&gt; (на стороне резервного копирования).&lt;/li&gt;
  &lt;li&gt;Укажите &lt;strong&gt;Target WAN Accelerator&lt;/strong&gt; (на стороне получателя).&lt;/li&gt;
  &lt;li&gt;Подтвердите параметры и запустите задание.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;-рекомендации&quot;&gt;💡 Рекомендации&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Для кэширования лучше использовать SSD накопители&lt;/li&gt;
  &lt;li&gt;Размещайте WAN Accelerator как можно ближе к репозиторию&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 16 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-wan-accelerators</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-wan-accelerators</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - vPower NFS</title>
        <description>&lt;p&gt;&lt;strong&gt;Veeam vPower NFS&lt;/strong&gt; – это сервис в &lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt;, который позволяет запускать виртуальные машины напрямую из резервных копий пропуская процесс восстановления. Эта технология используется при мгновенном восстановлении ВМ (Instant VM Recovery).&lt;/p&gt;

&lt;h2 id=&quot;как-работает&quot;&gt;Как работает?&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Эмуляция NFS-хранилища - сервер с компонентом vPower NFS создаёт специальную директорию - виртуальное NFS-хранилище, которое в последствии использует целевой ESXI хост&lt;/li&gt;
  &lt;li&gt;При старте задачи восстановления или проверки восстановления (SureBackup) в эту директорию копируются VMDK файлы ВМ, т.е. виртуальные диски. Эти диски продолжают находится в резервной копии и последующие манипуляции с восстанавливаемой ВМ не влияют на них.&lt;/li&gt;
  &lt;li&gt;ESXI хост подключается к созданному выше NFS-хранилищу (монтирует) и запускает виртуальную машину прямо из резервной копии. Т.е. по сути создаваемая ВМ в качестве хранилища использует NFS-хранилище.&lt;/li&gt;
  &lt;li&gt;После того как ВМ запущена пользователь может получить доступ к восстанавливаемым данным&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Поэтому иногда вы можете заметить, что на ESXI хосте может присутствовать непонятное хранилище. Если вы размонтируете хранилище вручную, то оно будет автоматически перемонтировано повторно при необходимости.&lt;/p&gt;

&lt;h2 id=&quot;где-используется&quot;&gt;Где используется&lt;/h2&gt;

&lt;p&gt;Сервис Veeam vPower NFS используется при:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Мгновенном восстановлении ВМ (Instant VM Recovery)&lt;/li&gt;
  &lt;li&gt;Автоматическая проверка целостности резервных копий (SureBackup)&lt;/li&gt;
  &lt;li&gt;Восстановление данных приложений (Universal Application-Item Recovery)&lt;/li&gt;
  &lt;li&gt;Создание тестовой среды из резервных копий (On-Demand Sandbox)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;рекомендации&quot;&gt;Рекомендации&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;У сервера с vPower NFS должен быть сетевой доступ к ESXI хосту, на котором будет восстанавливаться ВМ&lt;/li&gt;
  &lt;li&gt;Также у хоста ESXI должен быть доступ к серверу с vPower NFS&lt;/li&gt;
  &lt;li&gt;Диск на котором создаётся NFS-хранилище должен иметь необходимое свободное пространство&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;настройка-veeam-vpower-nfs&quot;&gt;Настройка Veeam vPower NFS&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Открываем консоль Veeam Backup &amp;amp; Replication&lt;/li&gt;
  &lt;li&gt;Переходим в &lt;strong&gt;Backup Infrastructure → Backup Repositories&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;На необходимом репозитории &lt;strong&gt;наживаем ПКМ&lt;/strong&gt; → &lt;strong&gt;Properties&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Переходим на вкладку &lt;strong&gt;Mount server&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем директорию, где хранить кеш&lt;/li&gt;
  &lt;li&gt;Активируем галочку &lt;strong&gt;Enable vPower NFS&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Применяем настройки и сохраняем&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://www.tipoit.kz/static/img/veeam/2025-02-20_15-43.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-vpower-nfs</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-vpower-nfs</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Установка и обновление</title>
        <description>&lt;p&gt;Для начала убедитесь что ваш сервер соответствует &lt;a href=&quot;https://helpcenter.veeam.com/docs/backup/vsphere/system_requirements.html&quot;&gt;системным требованиям&lt;/a&gt; и также открыты &lt;a href=&quot;https://helpcenter.veeam.com/docs/backup/vsphere/used_ports.html&quot;&gt;сетевые порты&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;запуск-установки&quot;&gt;Запуск установки&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Если все рекомендации соблюдены качаем файл установщика по &lt;a href=&quot;https://www.veeam.com/downloads.html&quot;&gt;ссылке&lt;/a&gt; и запускаем процесс установки через файл Setup.exe.&lt;/li&gt;
  &lt;li&gt;В окне выбора компонентов выбираем Install Veeam Backup &amp;amp; Replication
&lt;img src=&quot;/static/img/veeam/2025-02-14_11-36.png&quot; alt=&quot;Veeam Backup &amp;amp; Replication install 1&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Конечно же соглашаемся со всеми лицензионными соглашениями&lt;/li&gt;
  &lt;li&gt;В окне лицензирования указываем лицензию либо просто нажимаем NEXT если нет лицензии
&lt;img src=&quot;/static/img/veeam/2025-02-14_11-37.png&quot; alt=&quot;Veeam Backup &amp;amp; Replication install 2&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;На этом шаге установщик проверяет все ли необходимые программы установлены на сервер и ставит их при необходимости&lt;/li&gt;
  &lt;li&gt;В следующем окне выдаётся информация о настройках по умолчанию, которые вы при необходимости можете изменить. Подробнее о настройках &lt;a href=&quot;https://helpcenter.veeam.com/docs/backup/vsphere/install_vbr_settings.html?ver=120&quot;&gt;тут&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Если всё готово нажимаем Install&lt;/li&gt;
  &lt;li&gt;В окне Service account выбираем сервисную учетную запись и нажимаем Next
&lt;img src=&quot;/static/img/veeam/2025-02-14_11-38.png&quot; alt=&quot;Veeam Backup &amp;amp; Replication install 3&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Далее выбираем какой тип бд использовать и как подключаться к бд&lt;/li&gt;
  &lt;li&gt;В следующем окне идёт проверка конфигурации&lt;/li&gt;
  &lt;li&gt;В следующем окне выбираем директории для:
    - Путь установки
    - Каталог гостевой файловой системы
    - Instant recovery write cache - хранится кэш записи для машин, которые запускаются из резервных копий во время проверки восстановления или операций восстановления&lt;/li&gt;
  &lt;li&gt;В следующем окне можно изменить порты по умолчанию&lt;/li&gt;
  &lt;li&gt;Далее нажимаем Install и ждём пока всё установится&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;запуск-обновления&quot;&gt;Запуск обновления&lt;/h2&gt;

&lt;p&gt;Перед самим обновлением необходимо удостоверится что все &lt;a href=&quot;https://helpcenter.veeam.com/docs/backup/vsphere/system_requirements.html#backup_server&quot;&gt;системные требования&lt;/a&gt; для новой версии соблюдены и что ваша лицензия поддерживает новую версию Veeam Backup &amp;amp; Replication.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Если все рекомендации соблюдены качаем файл установщика по &lt;a href=&quot;https://www.veeam.com/downloads.html&quot;&gt;ссылке&lt;/a&gt; и запускаем процесс установки через файл Setup.exe.&lt;/li&gt;
  &lt;li&gt;В окне выбора компонентов выбираем Upgrade Veeam Backup &amp;amp; Replication
&lt;img src=&quot;/static/img/veeam/2025-02-14_11-39.png&quot; alt=&quot;Veeam Backup &amp;amp; Replication install 2&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Конечно же соглашаемся со всеми лицензионными соглашениями&lt;/li&gt;
  &lt;li&gt;Проверяем какие компоненты будут обновлены&lt;/li&gt;
  &lt;li&gt;В окне лицензирования указываем лицензию либо просто нажимаем NEXT если нет лицензии
&lt;img src=&quot;/static/img/veeam/2025-02-14_11-37.png&quot; alt=&quot;Veeam Backup &amp;amp; Replication install 5&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;На этом шаге установщик проверяет все ли необходимые программы установлены на сервер и ставит их при необходимости&lt;/li&gt;
  &lt;li&gt;В окне Service account выбираем сервисную учетную запись и нажимаем Next
&lt;img src=&quot;/static/img/veeam/2025-02-14_11-38.png&quot; alt=&quot;Veeam Backup &amp;amp; Replication install 6&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Далее выбираем какой тип бд использовать и как подключаться к бд&lt;/li&gt;
  &lt;li&gt;В следующем окне идёт проверка конфигурации&lt;/li&gt;
  &lt;li&gt;Запускаем процесс обновления нажатием Upgrade&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если же вы хотите просто установить какой-то патч не переходя на новую версию, то просто качаете этот патч с &lt;a href=&quot;https://www.veeam.com/knowledge-base.html&quot;&gt;сайта&lt;/a&gt;. Далее распаковываете архив на сервер с установленным Veeam Backup &amp;amp; Replication и нажимаете Install.&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-simple-install</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-simple-install</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Масштабируемый репозиторий резервного копирования</title>
        <description>&lt;p&gt;Если у вас в инфраструктуре для хранения резервных копий используется множество репозиториев то компонент &lt;strong&gt;Масштабируемый репозиторий резервного копирования (Scale-out Backup Repository)&lt;/strong&gt; рекомендован к использованию.&lt;/p&gt;

&lt;p&gt;В некоторых случаях для хранения резервных копий используются различные устройства хранения, такие как локальные диски серверов, файловые хранилища, разделы на СХД и т.д. В итоге репозиториев хранения резервных копий может оказаться с несколько десятков, что конечно усложняет работу с репозиториями. например при выборе подходящего для задачи резервного копирования. Также необходимо проверять свободное место на каждом из репозиториев.&lt;/p&gt;

&lt;p&gt;Еще одной проблемой большого количества репозиториев является то, что вы не можете использовать несколько репозиториев в одной задаче резервного копирования. Т.е. у вас как минимум задач резервного копирования будет столько же сколько и самих репозиториев.&lt;/p&gt;

&lt;p&gt;В итоге принимая все эти проблемы команда разработчик Veeam добавила компонент &lt;strong&gt;Scale-out Backup Repository&lt;/strong&gt;, который объединяет все репозитории в один глобальный репозиторий. Для расширения этого глобального репозитория просто добавляется новый репозиторий, что-то в стиле LVM в Linux.&lt;/p&gt;

&lt;p&gt;Также при добавлении обычного репозитория в &lt;strong&gt;Scale-out Backup Repository&lt;/strong&gt; вы можете указать какой тип резервных копий должен хранится на добавляемом репозитории. Например, для инкрементальных бэкапов можно использовать быстрые all-flash хранилища.&lt;/p&gt;

&lt;p&gt;Также это удобно для облачных провайдеров, так как конечный пользователь не должен разбираться какой именно репозиторий ему выбирать для хранения резервных копий, если их несколько конечно.&lt;/p&gt;

&lt;h2 id=&quot;примеры-использования&quot;&gt;🔹Примеры использования&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Вариант использования&lt;/th&gt;
      &lt;th&gt;Конфигурация&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Быстрое локальное резервное копирование и долгосрочное хранение&lt;/td&gt;
      &lt;td&gt;Локальные SSD-накопители (уровень производительности) + AWS S3 (емкость)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Высокоскоростное дедуплицированное резервное копирование&lt;/td&gt;
      &lt;td&gt;Устройства дедупликации (уровень производительности)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Экономичное хранение&lt;/td&gt;
      &lt;td&gt;Недорогой NAS (производительность) + Локальные диски(емкость)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;ограничения&quot;&gt;🔹Ограничения&lt;/h2&gt;

&lt;p&gt;Стоит обратить внимание на некоторые ограничения при использовании Enterprise лицензии:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Вы можете создать 2 масштабируемых репозитория резервных копий&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;В каждый масштабируемый репозиторий можно добавить з активных репозитория и один неактивный&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ограничения выше снимаются только если вы используете лицензию Enterprise Plus.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-19_15-14.png&quot; alt=&quot;Scale-out Backup Repository limit 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также вы не сможете добавить обычный репозиторий в Масштабируемый если в процессе добавления репозиторий используется, например, идёт процесс восстановления или резервного копирования.&lt;/p&gt;

&lt;h2 id=&quot;создание-scale-out-backup-repository&quot;&gt;🔹Создание Scale-out Backup Repository&lt;/h2&gt;

&lt;p&gt;Первым делом нужно убедится что обычные репозитории, которые вы хотите объединить уже добавлены в Veeam Backup &amp;amp; Replication.&lt;/p&gt;

&lt;p&gt;1️⃣ На панели &lt;code class=&quot;highlighter-rouge&quot;&gt;Inventory&lt;/code&gt; щелкните правой кнопкой на &lt;code class=&quot;highlighter-rouge&quot;&gt;Scale-out Repositories&lt;/code&gt; и выберите &lt;code class=&quot;highlighter-rouge&quot;&gt;Добавить масштабируемый репозиторий резервных копий&lt;/code&gt; (Add Scale-out Backup Repository).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-19_15-02.png&quot; alt=&quot;Add Scale-out Backup Repository 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ Введите имя&lt;/p&gt;

&lt;p&gt;3️⃣ В окне &lt;code class=&quot;highlighter-rouge&quot;&gt;Performance Tier&lt;/code&gt; выберите репозитории, которые вы хотите объединить&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-19_15-03.png&quot; alt=&quot;Add Scale-out Backup Repository 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ В окне &lt;code class=&quot;highlighter-rouge&quot;&gt;Placement Policy&lt;/code&gt; вы можете задать какой тип резервных копий хранить на конкретном репозитории&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-19_15-21.png&quot; alt=&quot;Add Scale-out Backup Repository 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ В окне &lt;code class=&quot;highlighter-rouge&quot;&gt;Capacity Tier&lt;/code&gt; вы можете указать блочное хранилище S3 куда можно перемещать либо копировать резервные копии с Масштабируемого репозитория.&lt;/p&gt;

&lt;p&gt;6️⃣ Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Apply&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;Finish&lt;/code&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-scale-out-backup-repository</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-scale-out-backup-repository</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Сервер монтирования (Mount Server)</title>
        <description>&lt;p&gt;Сервер монтирования (Mount Server) - один из компонентов Veeam Backup &amp;amp; Replication, который используется при восстановление данных из резервных копий. Например, когда вы пытаетесь восстановить файлы, приложение или запускаете задачу проверки восстановления (SureBackup).&lt;/p&gt;

&lt;p&gt;Сервер монтирования (Mount Server) - это промежуточное звено между репозиторием резервных копий и целевым сервером, куда необходимо восстановить данные. Считается что это помогает оптимизировать траффик. Но самое главная идея как мне кажется это то, что вы можете восстановить конкретный файл из ВМ при этом не восстанавливая полностью ВМ.&lt;/p&gt;

&lt;p&gt;Дело в том, что при попытке восстановить файлы или приложения Veeam Backup &amp;amp; Replication монтирует данные с резервной копии на сервере монтирования (&lt;a href=&quot;https://www.tipoit.kz/veeam-vpower-nfs&quot;&gt;vPower NFS&lt;/a&gt;), к которым вы дальше можете получить доступ через консоль Veeam Backup &amp;amp; Replication. Только после того как всё смонтировано Veeam Backup &amp;amp; Replication получает доступ к данным и может их восстановить.&lt;/p&gt;

&lt;p&gt;Для снижения нагрузки на локальную сеть рекомендуется размещать сервера монтирования ближе к репозиториям резервного копирования.&lt;/p&gt;

&lt;h2 id=&quot;🅱ключевые-функции&quot;&gt;🅱Ключевые функции&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Ускоряет восстановление на уровне файлов и приложений за счет локальной обработки резервных копий вместо передачи данных по сети, если репозиторий на том же сервере&lt;/li&gt;
  &lt;li&gt;Снижает нагрузку на Veeam Backup Server, если компонент установлен на другом сервере&lt;/li&gt;
  &lt;li&gt;Возможность восстановить конкретные файлы, не восстанавливая при этом сам ВМ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;развертывание-сервера-монтирования&quot;&gt;🚀Развертывание Сервера монтирования&lt;/h2&gt;

&lt;p&gt;⚡Развернуть компонент Сервер монтирования  вы можете на 64-битном Windows сервере.&lt;/p&gt;

&lt;p&gt;Для начала необходимо добавить сервер в инфраструктуру Veeam Backup &amp;amp; Replication:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В  &lt;strong&gt;Backup Infrastructure&lt;/strong&gt;  нажимаем правой кнопкой мыши на  &lt;strong&gt;Managed Servers&lt;/strong&gt;  и выбираем  &lt;strong&gt;Add Server&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем  &lt;strong&gt;Microsoft Windows&lt;/strong&gt;  или  &lt;strong&gt;Linux&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Прописываем  &lt;strong&gt;DNS имя или IP-адрес сервера&lt;/strong&gt;  для подключения&lt;/li&gt;
  &lt;li&gt;Указываем данные для подключения к серверу&lt;/li&gt;
  &lt;li&gt;В окне  &lt;strong&gt;Review&lt;/strong&gt;  нажимаем  &lt;strong&gt;Apply&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Запустится процесс установки необходимого ПО на добавляемый сервер&lt;/li&gt;
  &lt;li&gt;Нажимаем  &lt;strong&gt;Finish&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Далее в процессе создания репозитория во вкладке Mount Server выбираем необходимый сервер в одноименном параметре. Если репозиторий уже добавлен, то переходим в его свойства и меняем Mount server.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-20_15-43.png&quot; alt=&quot;veeam select mount server&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-mount-server</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-mount-server</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication -  Сервер шлюза (Gateway Server)</title>
        <description>&lt;p&gt;Сервер шлюза (Gateway Server) один из компонентов Veeam Backup &amp;amp; Replication, который используется для обмена трафиком между прокси-серверами и репозиторием резервных копий. По сути Сервер шлюза (Gateway Server) выступает в качестве посредника при передаче данных между прокси-серверами и репозиториями. Если в качестве репозитория вы используете CIFS/SMB сетевую папку или блочное хранилище, то Veeam Backup &amp;amp; Replication будет использовать компонент Сервер шлюза (Gateway Server) для работы с репозиторием.&lt;/p&gt;

&lt;p&gt;Плюс использования Сервера шлюза (Gateway Server) в том, что он оптимизирует траффик кэшируя метаданные и эффективно обрабатывая соединения.&lt;/p&gt;

&lt;p&gt;Использование компонента Сервер шлюза (Gateway Server) необходимо при использовании одного из следующих типов репозитория:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Репозиторий CIFS/SMB&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tipoit.kz/veeam-scale-out-backup-repository&quot;&gt;Масштабируемый репозиторий резервного копирования&lt;/a&gt; с SMB репозиторием&lt;/li&gt;
  &lt;li&gt;Облачное хранилище/Хранилище объектов (AWS, Azure, Wasabi, S3)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;процесс-взаимодействия&quot;&gt;📌Процесс взаимодействия&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Запуск задачи резервного копирования либо восстановление&lt;/li&gt;
  &lt;li&gt;Прокси-сервер обращается к ESXI хосту, чтобы понять с каким хранилищем работать&lt;/li&gt;
  &lt;li&gt;Прокси-сервер обращается к Серверу шлюза (Gateway Server)&lt;/li&gt;
  &lt;li&gt;Сервер шлюза (Gateway Server) обращается к репозиторию&lt;/li&gt;
  &lt;li&gt;Чтение/запись метаданных и оптимизирование траффика&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;🅱️-рекомендации&quot;&gt;🅱️ Рекомендации&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Не устанавливайте компонент на слабый сервер (CPU/RAM)&lt;/li&gt;
  &lt;li&gt;Сервер с компонентом Сервер шлюза (Gateway Server) должен находится максимально близко к репозиторию (одна стойка, одна подсеть и т.д.)&lt;/li&gt;
  &lt;li&gt;Естественно сервер должен иметь доступ к репозиторию&lt;/li&gt;
  &lt;li&gt;Используйте несколько Серверов шлюза (Gateway Server) для &lt;a href=&quot;https://www.tipoit.kz/veeam-scale-out-backup-repository&quot;&gt;Масштабируемого репозитория&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Если в качестве репозитория используется устройство с встроенной функцией дедупликации рекомендуется расположить Сервер шлюза (Gateway Server) ближе к прокси-серверу&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;-развертывание&quot;&gt;🚀 Развертывание&lt;/h2&gt;

&lt;p&gt;Для начала необходимо добавить сервер в инфраструктуру Veeam Backup &amp;amp; Replication:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В &lt;strong&gt;Backup Infrastructure&lt;/strong&gt; нажимаем правой кнопкой мыши на &lt;strong&gt;Managed Servers&lt;/strong&gt; и выбираем &lt;strong&gt;Add Server&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;strong&gt;Microsoft Windows&lt;/strong&gt; или &lt;strong&gt;Linux&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Прописываем &lt;strong&gt;DNS имя или IP-адрес сервера&lt;/strong&gt; для подключения&lt;/li&gt;
  &lt;li&gt;Указываем данные для подключения к серверу&lt;/li&gt;
  &lt;li&gt;В окне &lt;strong&gt;Review&lt;/strong&gt; нажимаем &lt;strong&gt;Apply&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Запустится процесс установки необходимого ПО на добавляемый сервер&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;strong&gt;Finish&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Далее в процессе создания репозитория во вкладке Share выбираем необходимый сервер в Gateway Server. Если репозиторий уже добавлен, то переходим в его свойства и меняем Gateway Server.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2025-02-21_14-44.png&quot; alt=&quot;veeam select Gateway server&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-gateway-server</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-gateway-server</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Виды транспорта</title>
        <description>&lt;p&gt;Транспортный метод - это метод, который использует Veeam Data Mover для того, чтобы доставить данные виртуальной машины источника на целевой хост. И конечно же время, которое необходимо для этого зависит от вида транспорта.&lt;/p&gt;

&lt;p&gt;Для Veeam Data Mover в Veeam Backup &amp;amp; Replication предлагается использовать следующие виды транспорта:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Прямой доступ к хранилищу&lt;/li&gt;
  &lt;li&gt;Виртуальное устройство (HotAdd)&lt;/li&gt;
  &lt;li&gt;Сеть&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Зачастую конечно используется именно сетевой вид транспорта, что не всегда выгодно в плане времени.&lt;/p&gt;

&lt;p&gt;Veeam Data Mover, отвечающий за извлечение данных, работает на прокси-сервере VMware. Тип транспорта может быть указан в настройках прокси-сервера, указанного для конкретной задачи резервного копирования.&lt;/p&gt;

&lt;p&gt;При настройке прокси-сервера VMware вы можете вручную установить тип транспорта или отдать это право настройки самому Veeam Backup &amp;amp; Replication, который автоматом выберет самый подходящий (или единственный). Для этого Veeam Backup &amp;amp; Replication проверит каким образом прокси-сервер может получить доступ к VMware vSphere и выберет самый оптимальный. Если прокси-сервер имеет доступ по нескольким типам транспорта, то оптимальный выбирается методом:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Прямой доступ к хранилищу&lt;/li&gt;
  &lt;li&gt;Виртуальное устройство (HotAdd)&lt;/li&gt;
  &lt;li&gt;Сеть&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В таблице перечислены рекомендации по использованию того или иного метода в зависимости от используемого типа хранилища данных.&lt;/p&gt;

&lt;style&gt;
  .tttt {
    background-color: #e3e3e3; 
  }
  table, th, td {
    border: 1px solid #cecece;
    padding: 4px 10px;
  }
  table {
    border-collapse: collapse;
    overflow-x: auto;
    max-width: 100%;
    min-width: 600px;
    }
&lt;/style&gt;

&lt;table&gt;
&lt;tr&gt; &lt;th class=&quot;tttt&quot;&gt;Тип хранилища данных&lt;/th&gt; &lt;th class=&quot;tttt&quot;&gt;Прямой доступ к хранилищу&lt;/th&gt; &lt;th class=&quot;tttt&quot;&gt;Виртуальное устройство&lt;/th&gt; &lt;th class=&quot;tttt&quot;&gt;Сеть &lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt;Оптоволоконный канал (FC) SAN&lt;/th&gt; &lt;td&gt;Установите прокси-сервер VMware на физическом сервере, с доступом к хранилищу по FC&lt;/td&gt; &lt;td rowspan=&quot;3&quot;&gt;Установите прокси-сервер VMware в виртуальной машине на ESXI хосте имеющем доступ к хранилищу&lt;/td&gt; &lt;td rowspan=&quot;6&quot;&gt;Рекомендуется использовать только если скорость сети не ниже 10 Gb. Установите прокси-сервер VMware на любом сервере в локальной сети.&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt; iSCSI SAN или NFS Storage &lt;/th&gt; &lt;td&gt;Установите прокси-сервер VMware на физическом сервере или виртуальной машине&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt; Shared SAS &lt;/th&gt; &lt;td&gt;Установите прокси-сервер VMware на физическом сервере, с доступом к SAS&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt; vSAN &lt;/th&gt; &lt;td rowspan=&quot;3&quot;&gt; Не поддерживается &lt;/td&gt; &lt;td&gt; Установите прокси-сервер VMware в виртуальной машине на ESXI хосте имеющем доступ к хранилищу vSAN &lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt; vVol &lt;/th&gt; &lt;td&gt; Установите прокси-сервер VMware в виртуальной машине на ESXI хосте имеющем доступ к хранилищу vVol &lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt; Local Storage &lt;/th&gt; &lt;td&gt; Установите прокси-сервер VMware в виртуальной машине на каждом ESXI хосте &lt;/td&gt; &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Важное замечание если вы используете VMware Cloud в AWS единственный доступный тип - это Виртуальное устройство.&lt;/p&gt;
</description>
        <pubDate>Fri, 15 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-transport-types</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-transport-types</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric CA - выдача сертификатов</title>
        <description>&lt;p&gt;Для начала прочитайте про &lt;a href=&quot;https://tipoit.kz/hyperledger-what-is-msp&quot;&gt;MSP&lt;/a&gt; и &lt;a href=&quot;https://tipoit.kz/hyperledger-identity&quot;&gt;identity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Теперь, когда мы понимаем, что к чему прейдём к схеме:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Для каждой организации у нас будет по два ЦС: &lt;strong&gt;rca&lt;/strong&gt; и &lt;strong&gt;tls-ca&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;В каждой организации у нас будет по два узла&lt;/li&gt;
  &lt;li&gt;В каждой организации у нас будут пользователи: &lt;strong&gt;admin&lt;/strong&gt; и &lt;strong&gt;user&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Также у нас будет пользователь &lt;strong&gt;admin&lt;/strong&gt; для ЦС, чтобы выпускать сертификаты&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/hyperledger-ca-enroll-1.drawio.png&quot; alt=&quot;fabric ca map&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-зависимостей&quot;&gt;Установка зависимостей&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы нам создать запросы на создание сертификатов, собственно, как и выдачу нам понадобятся утилиты. Так что первым делом нужно убедится, что они присутствуют.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf -y install go wget vim docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable&lt;/span&gt; --now docker
sudo usermod -aG docker &lt;span class=&quot;nv&quot;&gt;$USER&lt;/span&gt;

go install github.com/hyperledger/fabric-ca/cmd/...@latest
sudo cp /home/admin/go/bin/fabric-ca-client /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Далее в &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/hosts&lt;/code&gt; прописываем &lt;strong&gt;dns имена&lt;/strong&gt; чтобы не обращаться постоянно по &lt;code class=&quot;highlighter-rouge&quot;&gt;ip&lt;/code&gt;. В production конечно лучше воспользоваться dns.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;172.31.144.2 rca.ordererOrg1.example.com&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;172.31.144.2 tls-ca.ordererOrg1.example.com&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;172.31.144.4 rca.org1.example.com&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;172.31.144.4 tls-ca.org1.example.com&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;172.31.144.5 rca.org2.example.com&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;172.31.144.5 tls-ca.org2.example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Да рекомендуется использовать для &lt;strong&gt;tls&lt;/strong&gt; и &lt;strong&gt;rca&lt;/strong&gt; разные сервера, но я особо в этом смысла не вижу. Тут на ваше усмотрение.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;поднимаем-цс&quot;&gt;Поднимаем ЦС&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В каждой организации мы запускаем контейнер с двумя ЦС.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir -p /usr/local/ordererOrg1 &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1

sudo vim /usr/local/ordererOrg1/docker-compose.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fabric-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-ca:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;services:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tls-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container_name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tls-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ca:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-c&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'fabric-ca-server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-b&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tlsadmin:tlspwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--csr.cn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tls-ca.ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.example.com&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--csr.hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tls-ca.ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.example.com'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;environment:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_HOME=/usr/local/hyperledger/fabric-ca/crypto&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_TLS_ENABLED=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_CSR_CN=tls-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_CSR_HOSTS=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_DEBUG=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_PORT=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17054&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TZ=Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volumes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/local/ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tls-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:/usr/local/hyperledger/fabric-ca&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fabric-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-ca&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ports:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rca-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container_name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rca-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;image:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ca:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-c&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'fabric-ca-server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-b&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rcaadmin:rcapwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--csr.cn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rca.ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.example.com&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--csr.hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rca.ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.example.com'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;environment:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_HOME=/usr/local/hyperledger/fabric-ca/crypto&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_TLS_ENABLED=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_CSR_CN=rca-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_CSR_HOSTS=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_DEBUG=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_PORT=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17055&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TZ=Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volumes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/local/ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/rca-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:/usr/local/hyperledger/fabric-ca&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;networks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fabric-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-ca&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ports:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В файле мы также указываем пользователя и пароль, под которым будем выпускать сертификаты (&lt;code class=&quot;highlighter-rouge&quot;&gt;tlsadmin&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;tlspwd&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;rcaadmin&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;rcapwd&lt;/code&gt;). Думаю, понятно, что эти значения нужно заменить на свои, также, как и dns имена &lt;code class=&quot;highlighter-rouge&quot;&gt;rca.ordererOrg1.example.com&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;tls-ca.ordererOrg1.example.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После того, как файл создан можем приступать к запуску контейнеров с ЦС.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo docker-compose -f /usr/local/ordererOrg1/docker-compose.yaml up -d
sudo docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;94316&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ca:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:::&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7053&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7054&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rca-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;88810&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ca:latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:::&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7052&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7054&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tls-ordererOrg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также мы поступаем и со всеми остальными ЦС, просто меняем пароли и dns имена в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;данные-корневого-сертификата&quot;&gt;Данные корневого сертификата&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При старте ЦС сгенерировали сами себе сертификаты, так как являются корневыми. Если вас что-то не устраивает в этих сертификатах, то можно это изменить. Тут каждый решает сам делать это или нет.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1
sudo vim rca-ordererOrg1/crypto/fabric-ca-server-config.yaml
sudo vim tls-ordererOrg1/crypto/fabric-ca-server-config.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Например, можно изменить время жизни сертификата, чтобы не обновлять сертификаты каждый год.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;'expiry:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8760&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;h'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'expiry:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;87600&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;h'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'expiry:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;43800&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;h'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'expiry:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;87600&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;h'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Удаляем контейнеры, я добавил &lt;code class=&quot;highlighter-rouge&quot;&gt;volumes&lt;/code&gt; а значит важные данные останутся.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo docker-compose -f /usr/local/ordererOrg1/docker-compose.yaml down
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1/tls-ordererOrg1/crypto
sudo rm ca-cert.pem tls-cert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И снова запускаем ЦС, сертификаты пересоздадутся.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo docker-compose -f /usr/local/ordererOrg1/docker-compose.yaml up -d
sudo docker ps

openssl x509 -in ca-cert.pem -text -noout | grep &lt;span class=&quot;s1&quot;&gt;'Not After'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;After&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2039&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GMT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;выпускаем-сертификат-админа-цс&quot;&gt;Выпускаем сертификат админа ЦС&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Помните я говорил о том что в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose.yaml&lt;/code&gt; задаётся логин и пароль? Так вот используя как раз этот логин и пароль мы получаем сертификат админа ЦС, который дальше будем использовать для генерации сертификатов другим узлам и пользователям в организации.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1/tls-ordererOrg1
sudo chown -R admin  /usr/local/ordererOrg1
sudo mkdir admin &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;admin

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../crypto/tls-cert.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.
fabric-ca-client enroll -d -u https://tlsadmin:tlspwd@tls-ca.ordererOrg1.example.com:7052

ls -la
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rwxr-xr-x.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7173&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fabric-ca-client-config.yaml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;122&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Тоже самое мы выполняем для &lt;code class=&quot;highlighter-rouge&quot;&gt;rca-ca.ordererOrg1.example.com&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1/rca-ordererOrg1
sudo mkdir admin &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;admin
sudo chown -R admin  /usr/local/ordererOrg1

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../crypto/ca-cert.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.
fabric-ca-client enroll -d -u https://rcaadmin:rcapwd@rca.ordererOrg1.example.com:7053

ls -la
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rwxr-xr-x.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7173&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fabric-ca-client-config.yaml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;122&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для всех остальных организаций (org1, org2) в таком же порядке выпускаем сертификаты для администраторов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;регистрируем-сертификаты&quot;&gt;Регистрируем сертификаты&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В статье про &lt;a href=&quot;https://tipoit.kz/hyperledger-what-is-msp&quot;&gt;MSP&lt;/a&gt; и &lt;a href=&quot;https://tipoit.kz/hyperledger-identity&quot;&gt;identity&lt;/a&gt; я писал для чего нужны сертификаты.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;rcaordererorg1examplecom&quot;&gt;rca.ordererOrg1.example.com&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Нам понадобятся сертификаты админа ЦС, которые мы выпускали выше поэтому. Каталог, в котором они хранятся передаётся через &lt;code class=&quot;highlighter-rouge&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1/rca-ordererOrg1/admin

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;caUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;rca.ordererOrg1.example.com:7053
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../crypto/ca-cert.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.

fabric-ca-client register -d --id.name orderer1-ordererOrg1 --id.secret orderer1PWD --id.type orderer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name orderer2-ordererOrg1 --id.secret orderer2PWD --id.type orderer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name admin-ordererOrg1 --id.secret adminPWD --id.type admin -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;tls-caordererorg1examplecom&quot;&gt;tls-ca.ordererOrg1.example.com&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1/tls-ordererOrg1/admin/

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;caUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tls-ca.ordererOrg1.example.com:7052
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../crypto/ca-cert.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.

fabric-ca-client register -d --id.name orderer1-ordererOrg1 --id.secret orderer1PWD --id.type orderer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name orderer2-ordererOrg1 --id.secret orderer2PWD --id.type orderer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name admin-ordererOrg1 --id.secret adminPWD --id.type admin -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;tls-caorg1examplecom&quot;&gt;tls-ca.org1.example.com&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для организации &lt;strong&gt;org1&lt;/strong&gt; мы делаем тоже самое, только меняем &lt;code class=&quot;highlighter-rouge&quot;&gt;id.type&lt;/code&gt; и еще добавляем пользователя &lt;strong&gt;user&lt;/strong&gt;, от которого рекомендуется запускать функции смарт-контракта.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/org1/tls-org1/admin/

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;caUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tls-ca.org1.example.com:7052
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../crypto/ca-cert.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.

fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PWD --id.type peer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PWD --id.type peer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name admin-org1 --id.secret adminPWD --id.type admin -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name user-org1 --id.secret userPWD --id.type client -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для организации &lt;strong&gt;org2&lt;/strong&gt; делаем тоже самое, конечно меняя имя организации с &lt;strong&gt;org1&lt;/strong&gt; на &lt;strong&gt;org2&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;rcaorg1examplecom&quot;&gt;rca.org1.example.com&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/org1/rca-org1/admin

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;caUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;rca.org1.example.com:7053
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../crypto/ca-cert.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.

fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PWD --id.type peer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PWD --id.type peer -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name admin-org1 --id.secret adminPWD --id.type admin -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
fabric-ca-client register -d --id.name user-org1 --id.secret userPWD --id.type client -u https://&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для организации &lt;strong&gt;org2&lt;/strong&gt; делаем тоже самое, конечно меняя имя организации с &lt;strong&gt;org1&lt;/strong&gt; на &lt;strong&gt;org2&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;выпускаем-сертификаты&quot;&gt;Выпускаем сертификаты&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала подготовим директории, в которые будем сохранять все необходимые сертификаты.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1
mkdir -p msp/&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;cacerts,tlscacerts&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; orderers/orderer&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;1,2&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; users/admin-ordererOrg1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;сертификаты-для-orderer&quot;&gt;Сертификаты для orderer&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/tls-ordererOrg1/admin/msp/cacerts/tls-ca-ordererOrg1-example-com-7052.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/orderers/orderer1.ordererOrg1.example.com
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_MSPDIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tls-msp
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;caUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tls-ca.ordererOrg1.example.com:7052

fabric-ca-client enroll -d -u https://orderer1-ordererOrg1:orderer1PWD@&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt; --enrollment.profile tls --csr.hosts orderer1.ordererOrg1.example.com --csr.hosts orderer1.ordererOrg1 --csr.hosts localhost

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/orderers/orderer2.ordererOrg1.example.com
fabric-ca-client enroll -d -u https://orderer2-ordererOrg1:orderer2PWD@&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt; --enrollment.profile tls --csr.hosts orderer2.ordererOrg1.example.com --csr.hosts orderer2.ordererOrg1 --csr.hosts localhost

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/users/admin-ordererOrg1
fabric-ca-client enroll -d -u https://admin-ordererOrg1:adminPWD@&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt; --enrollment.profile tls

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_TLS_CERTFILES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/rca-ordererOrg1/admin/msp/cacerts/rca-ordererOrg1-example-com-7053.pem
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_MSPDIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;msp
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;caUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;rca.ordererOrg1.example.com:7053
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/orderers/orderer1.ordererOrg1.example.com

fabric-ca-client enroll -d -u https://orderer1-ordererOrg1:orderer1PWD@&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/orderers/orderer2.ordererOrg1.example.com
fabric-ca-client enroll -d -u https://orderer2-ordererOrg1:orderer2PWD@&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CA_CLIENT_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local/ordererOrg1/users/admin-ordererOrg1
fabric-ca-client enroll -d -u https://admin-ordererOrg1:adminPWD@&lt;span class=&quot;nv&quot;&gt;$caUrl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;По умолчанию некоторые сертификаты имеют не особо удобочитаемый формат. Поэтому переименуем их для удобства.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1
cp orderers/orderer1.ordererOrg1.example.com/tls-msp/tlscacerts/tls-tls-ca-ordererOrg1-example-com-7052.pem orderers/orderer1.ordererOrg1.example.com/tls-msp/tlscacerts/tls-ca-cert.pem
cp orderers/orderer2.ordererOrg1.example.com/tls-msp/tlscacerts/tls-tls-ca-ordererOrg1-example-com-7052.pem orderers/orderer2.ordererOrg1.example.com/tls-msp/tlscacerts/tls-ca-cert.pem

cp orderers/orderer1.ordererOrg1.example.com/tls-msp/keystore/f0b1b8b10a3017a5f5c52a4f0d19bef23f5811036102c61b0c4d19cf36836b88_sk orderers/orderer1.ordererOrg1.example.com/tls-msp/keystore/tls-key.pem
cp orderers/orderer2.ordererOrg1.example.com/tls-msp/keystore/71d960ff3dad8dc1c8148e1d618f41c85474a40135d4886f416631458acf6fea_sk orderers/orderer2.ordererOrg1.example.com/tls-msp/keystore/tls-key.pem

cp orderers/orderer1.ordererOrg1.example.com/msp/cacerts/rca-ordererOrg1-example-com-7053.pem orderers/orderer1.ordererOrg1.example.com/msp/cacerts/ca-cert.pem
cp orderers/orderer2.ordererOrg1.example.com/msp/cacerts/rca-ordererOrg1-example-com-7053.pem orderers/orderer2.ordererOrg1.example.com/msp/cacerts/ca-cert.pem

cp orderers/orderer1.ordererOrg1.example.com/msp/keystore/2806edd93b6fde172553c93a463a3f44e814f3dc6d547cf60d868a71cc16ff7a_sk orderers/orderer1.ordererOrg1.example.com/msp/keystore/key.pem
cp orderers/orderer2.ordererOrg1.example.com/msp/keystore/0e19f9860d55f1de8ae22b72fba32ad43def7a48c22532c86c1c930ab10be3d3_sk orderers/orderer2.ordererOrg1.example.com/msp/keystore/key.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также нужно будет скопировать сертификаты ЦС в одну директорию, msp директорию всех организаций собираются в одном месте чтобы создать нулевой блок канала. Не беспокойтесь там только публичные сертификаты.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/ordererOrg1
cp orderers/orderer1.ordererOrg1.example.com/msp/cacerts/ca-cert.pem msp/cacerts/ca-cert.pem
cp orderers/orderer1.ordererOrg1.example.com/tls-msp/tlscacerts/tls-ca-cert.pem msp/tlscacerts/tls-ca-cert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;сертификаты-для-peer&quot;&gt;Сертификаты для peer&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Таким же способом мы выпускаем все сертификаты для других организаций.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создаём-файл-configyaml&quot;&gt;Создаём файл config.yaml&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если не понятно зачем он нужен, то можно почитать про &lt;a href=&quot;https://tipoit.kz/hyperledger-what-is-msp&quot;&gt;MSP&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim orderers/orderer1.ordererOrg1.example.com/msp/config.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;NodeOUs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Enable:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ClientOUIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Certificate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cacerts/ca-cert.pem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OrganizationalUnitIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PeerOUIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Certificate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cacerts/ca-cert.pem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OrganizationalUnitIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AdminOUIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Certificate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cacerts/ca-cert.pem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OrganizationalUnitIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OrdererOUIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Certificate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cacerts/ca-cert.pem&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OrganizationalUnitIdentifier:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;orderer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cp orderers/orderer1.ordererOrg1.example.com/msp/config.yaml orderers/orderer2.ordererOrg1.example.com/msp/config.yaml
cp orderers/orderer1.ordererOrg1.example.com/msp/config.yaml msp/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Эту процедуру нужно будет сделать и для всех других организаций, например:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/org1
cp peers/peer1/msp/config.yaml peers/peer2/msp/config.yaml
cp eers/peer1/msp/config.yaml msp/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь всё готово для запуска узлов организаций.&lt;/p&gt;
</description>
        <pubDate>Mon, 04 Mar 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-fabric-ca-enroll</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-fabric-ca-enroll</guid>
        
        <category>hyperledger</category>
        
        <category>identity</category>
        
        <category>pki</category>
        
        <category>blockchain</category>
        
        <category>ca</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric - что такое Identity (личность)</title>
        <description>&lt;p&gt;Блокчейн сеть в &lt;strong&gt;Hyperledger&lt;/strong&gt; включает в себя различных участников: &lt;code class=&quot;highlighter-rouge&quot;&gt;пиры&lt;/code&gt; (peers), &lt;code class=&quot;highlighter-rouge&quot;&gt;заказчики&lt;/code&gt; (orderers), клиентские приложения, администраторы и т.д. Каждый из этих элементов сети имеет свой собственный цифровой идентификатор - &lt;code class=&quot;highlighter-rouge&quot;&gt;X.509 сертификат&lt;/code&gt;. Этот идентификатор очень важен так как благодаря ему понятно какие права есть в сети у того или иного участника сети и действительно ли он тот, за кого себя выдаёт.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;так-как-это-работает&quot;&gt;Так как это работает?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Представьте, что вы пришли в свой любимый магазин чтобы купить свои любимые вкусняшки. И вот вы стоите на кассе уже воображая, как вы сидите дома и хрумкаете всё это, и вдруг замечаете, что оплата принимается только картой Kaspi банка. И не важно сколько у вас денег на других картах, вы можете оплатить только одной определённой картой. Другие не принимаются.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/hyperledger-msp-1.drawio.png&quot; alt=&quot;msp example&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Правило 1: &lt;strong&gt;Не важно сколько у вас карт и сколько в общем денег, не все карты одобрены&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Если перевести это правило в Hyperledger:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Центр сертификации PKI выступает в роли поставщика карт (выдает сертификаты множеству узлов, пользователей и т.д.)&lt;/li&gt;
  &lt;li&gt;MSP - список карт, которыми вы можете оплатить (список организаций)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;что-такое-pki&quot;&gt;Что такое PKI?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Инфраструктура открытых ключей (PKI)&lt;/strong&gt; это набор технологий, который обеспечивает безопасную связь в сети. В частности, благодаря этой &lt;strong&gt;PKI&lt;/strong&gt; появился &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTPS&lt;/code&gt;. Благодаря &lt;strong&gt;PKI&lt;/strong&gt; вы можете быть уверены в валидности источника.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/hyperledger-pki-1.drawio.png&quot; alt=&quot;msp example&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Если рассматривать картинку выше тут есть основной &lt;strong&gt;центр сертификации&lt;/strong&gt;, который выдаёт человеку сертификат. Основная идея в том, что это не просто &lt;strong&gt;ЦС&lt;/strong&gt; в локальной сети, а доверенный (например, закреплённый законом). И для того чтобы получить сертификат пользователь ввёл о себе всю необходимую информацию, подтверждая, что это он. И конечно &lt;strong&gt;ЦС&lt;/strong&gt; всё тщательно проверил перед тем как выдать этот сертификат.&lt;/p&gt;

&lt;p&gt;Технология блокчейн также опирается на &lt;strong&gt;PKI&lt;/strong&gt; для обеспечения безопасной коммуникации между узлами в сети.&lt;/p&gt;

&lt;p&gt;Правило 2: &lt;strong&gt;Не всем ЦС можно доверять&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4 основных элемента PKI:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Как мы уже поняли во главе всего стоит центр сертификации&lt;/li&gt;
  &lt;li&gt;Пара закрытого и открытого ключа (берётся с сертификата)&lt;/li&gt;
  &lt;li&gt;Сам сертификат, выданный центром сертификации&lt;/li&gt;
  &lt;li&gt;Списки отзыва сертификатов&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В этой статье мы просто бегло пробежимся по всем элементам, просто для понимания как это работает.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;сертификаты-цифровые-сертификаты&quot;&gt;Сертификаты (Цифровые сертификаты)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Цифровой сертификат&lt;/strong&gt; - это цифровой документ, который содержит множество атрибутов, связанных с владельцем. В Hyperledger каждый сертификат соответствует стандарту X.509. &lt;a href=&quot;https://en.wikipedia.org/wiki/X.509&quot;&gt;Если есть желание поковыряться в стандарте&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для примера представим ситуацию что Гогиев Гога имеет свой собственный электронный сертификат. При этом он работает в org1, в отделе разработки и живёт в великолепной стране - Казахстан. Так вот при запросе сертификата он обозначил следующие данные: C=KZ, ST=Astana, O=org1, OU=Developers, CN=Гогиев Гога. Конечно он мог написать какую-то чушь, но тогда центр сертификации просто отклонил бы его заявку, и он остался без сертификата.&lt;/p&gt;

&lt;p&gt;Всё что он заполнил хранится в сертификате, собственно подтверждая своего владельца. Для просмотра содержимого сертификата можно выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;openssl x509 -in personal.crt -text -noout&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;openssl x509 -in personal.crt -text -noout | grep Subject
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Subject:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KZ,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Astana,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Astana,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OU&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Developers,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Goga&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gogiyev,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;emailAddress&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;goga@org&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.com&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И самое главное подделать этот сертификат не получится, так как присутствует приватный (закрытый) ключ, который использовался для генерации сертификата. Поэтому если вы экспортируете этот приватный ключ желательно его не терять.&lt;/p&gt;

&lt;p&gt;Правило 3: &lt;strong&gt;Никогда не отдавайте свой сертификат третьим лицам&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;аутентификация-открытые-ключи-и-закрытые-ключи&quot;&gt;Аутентификация, открытые ключи и закрытые ключи&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы обменятся сообщениями узлы в сети должны пройти &lt;strong&gt;аутентификацию&lt;/strong&gt;. Это необходимо чтобы все узлы в сети были уверенны в том, что они коммуницируют с действительно тем узлом. Т.е. узел, который, например, выдаёт себя за &lt;code class=&quot;highlighter-rouge&quot;&gt;peer1.org3&lt;/code&gt; является им. Если же мы продолжаем примера с Гогой, то допустим он отправил вам файл с секретной информацией. И вот чтобы вы не сомневались, что это его сообщение он подписал его своим приватным ключом. Тем самым подтверждая свою личность.&lt;/p&gt;

&lt;p&gt;Традиционные механизмы аутентификации основаны на цифровых подписях, которые позволяют узлам (пользователям) подписывать свои сообщения &lt;strong&gt;цифровой подписью&lt;/strong&gt; (приватный ключ). &lt;strong&gt;Цифровые подписи&lt;/strong&gt; также обеспечивают гарантии целостности подписанного сообщения.&lt;/p&gt;

&lt;p&gt;Мы уже говорили, что один из основных элементов &lt;strong&gt;PKI&lt;/strong&gt; это &lt;strong&gt;закрытый (private)&lt;/strong&gt; и &lt;strong&gt;открытый (public)&lt;/strong&gt; ключ. Так вот если возвращаться к примеру, то Гога подписал свой файл приватным ключом и отправил файл другому человеку. Человек получив файл должен ещё проверить что файл действительно от Гоги. Для этого ему понадобится публичный сертификат (ключ) Гоги, который Гога ему любезно предоставил ещё ранее.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Гога подписывает файл приватным ключом&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Очень секрктая информация&quot;&lt;/span&gt; &amp;gt; message.txt
openssl dgst -sha256 -sign goga_private.key -out signature.sha256 message.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Вторая сторона, получив файл проверяет что подписано именно Гогой&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;openssl dgst -sha256 -verify public.pem -signature signature.sha256 message.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Verified&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Хорошо мы проверили что файл действительно от Гоги, но что если его изменили? Для того, чтобы такого не было Гога при подписи создал файл &lt;strong&gt;signature.sha256&lt;/strong&gt;, который был сгенерирован тоже при помощи приватного ключа. Конечно же Гога передал этот файл вместе с секретным файлом. Давайте попробуем внести изменения в файл и снова проверить его.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Кто-то что-то поменял&quot;&lt;/span&gt; &amp;gt;&amp;gt; message.txt
openssl dgst -sha256 -verify public.pem -signature signature.sha256 message.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Verification&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Failure&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Конечно понятное дело, что мы сейчас рассмотрели базовый ручной вариант. Есть много приложений. которые делают всю эту процедуру проверки сами а вам уже выводят подтверждение валидности файла или нет. Но нам важно было понять саму основную суть.&lt;/p&gt;

&lt;p&gt;Важный момент если кто-то раньше генерировал Hash файла может подумать что это именно он содержится в файле signature.sha256, но это не совсем так. Да там хэш файла, но также подписанный (зашифрованный) приватным ключом.&lt;/p&gt;

&lt;p&gt;Правило 4: &lt;strong&gt;Никогда не отдавайте свой приватный ключ третьим лицам&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;центр-сертификации&quot;&gt;Центр сертификации&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Не раз уже упоминал о нём в своих статьях про &lt;strong&gt;Hyperledger&lt;/strong&gt;, так как является основным компонентом. Как вы уже поняли узел или пользователь может коммуницировать с остальными узлами в сети используя цифровой сертификат. Так вот выдают эти сертификаты в Hyperledger именно &lt;strong&gt;центры сертификации&lt;/strong&gt;. Рекомендуется использовать свой центр сертификации для каждой организации, даже по два. Сертификаты, выдаваемые ЦС соответствуют стандарту X.509.&lt;/p&gt;

&lt;p&gt;В интернете очень много доверенных ЦС: &lt;code class=&quot;highlighter-rouge&quot;&gt;GeoTrust&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;DigiCert&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;GoDaddy&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Comodo&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Sectigo&lt;/code&gt; и т.д. Мы сейчас не будем затрагивать тему кто решил, что они доверенные, об этом писать долго.&lt;/p&gt;

&lt;p&gt;Каждый узел, либо пользователь коммуницирующий с сетью обязан получить сертификат, иначе просто не получит доступ к каналу.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;корневые-центры-сертификации-промежуточные-центры-сертификации-и-цепочки-доверия&quot;&gt;Корневые центры сертификации, промежуточные центры сертификации и цепочки доверия&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сами ЦС можно разделить на два вида:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Корневой&lt;/strong&gt; (&lt;strong&gt;Root&lt;/strong&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Промежуточный&lt;/strong&gt; (&lt;strong&gt;Intermediate&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Представьте себе ситуации что вы владеете ЦС и вам нужно выдать сертификаты миллионам людей. Согласитесь, что для одной организации — это будет слишком сложно? Так вот один из выходов — это найти дочерние организации, выдать им сертификаты от своего ЦС и дать право раздавать сертификаты другим лица. В такой схеме ваш ЦА будет &lt;strong&gt;корневым (root)&lt;/strong&gt; а все дочерние ЦС будут уже &lt;strong&gt;промежуточными (Intermediate)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Второй вариант для чего использовать &lt;strong&gt;корневой&lt;/strong&gt; ЦС и &lt;strong&gt;промежуточный&lt;/strong&gt; это безопасность. Идея в том, что вы выпускаете сертификат для промежуточного ЦС используя корневой ЦС. Далее корневой ЦС выключается и включается только по необходимости. Тут вы оберегаете свой корневой ЦС от кибератак, а если вдруг ваш промежуточный взломали вы просто включаете корневой ЦС и отзываете сертификаты промежуточного ЦС, в таком случае все сертификаты выданные промежуточным ЦС станут не валидными. Ну и опять-таки если у вас десятки промежуточных ЦС взломав один злоумышленник получит к 100-1000 сертификатам вместо миллионов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/hyperledger-pki-2.drawio.png&quot; alt=&quot;intermediate ca example&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;fabric-ca&quot;&gt;Fabric CA&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь, когда мы понимаем насколько важны цифровые сертификаты и центры сертификации, которые их выдают понятное дело, что не использовать их не получится. Так вот чтобы было проще с выпуском сертификатов конечному пользователю Hyperledger добавил компонент &lt;strong&gt;Fabric CA&lt;/strong&gt;. С помощью него вы легко можете поднять для своей организации ЦС и выдавать сертификаты узлам или пользователем в сети. Но если вы хотите использовать его и для выдачи SSL сертификатов для своего сайта, то не получится.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;списки-отзыва-сертификатов&quot;&gt;Списки отзыва сертификатов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я уже упоминал что сертификаты можно отозвать и отозванный сертификат перестанет быть валидным. Но как конечный пользователь должен понять, что сертификат не валидный? Для этого используется &lt;strong&gt;список отзыва сертификатов&lt;/strong&gt; - по сути просто список с сертификатами, которые отозвал ЦС по разным причинам. Да, причины обычно указываются. Если возвращаться к примеру, с кредитными картами, то можно представить &lt;strong&gt;список отзыва сертификатов&lt;/strong&gt; как список с утерянными или украденными картами.&lt;/p&gt;

&lt;p&gt;Теперь как конечный пользователь перед тем как проверить личность используя цифровой сертификат сначала обращается к спискам отзыва сертификатов ЦС, который выдал этот сертификат. Как правило это ссылка в интернете, которая прописана в самом цифровом сертификате. И если сертификат находится в этом списке пользователь получит об этом сообщение.&lt;/p&gt;

&lt;p&gt;Правило 4: &lt;strong&gt;CRL должен быть доступен для всех пользователей&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/hyperledger-pki-3.drawio.png&quot; alt=&quot;crl example&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Теперь, когда вы прочитали эту статью, рекомендую также к прочтению статью про MSP.&lt;/p&gt;

&lt;p&gt;Автор черпал знания с сайта https://hyperledger-fabric.readthedocs.io/.&lt;/p&gt;
</description>
        <pubDate>Thu, 29 Feb 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-identity</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-identity</guid>
        
        <category>hyperledger</category>
        
        <category>identity</category>
        
        <category>pki</category>
        
        <category>blockchain</category>
        
        
      </item>
    
      <item>
        <title>Openssl - Собираем сертификат pfx из публичного (pem) и приватного сертификата (key)</title>
        <description>&lt;p&gt;Для начала проверим что у нас стоит Openssl. В linux он как правило стоит по умолчанию, если используете windows, то можно скачать &lt;a href=&quot;https://slproweb.com/products/Win32OpenSSL.html&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;собираем-сертификат&quot;&gt;Собираем сертификат&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы собрать pfx сертификат:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\o&lt;/span&gt;penssl.exe pkcs12 -export -out e1.pfx -inkey 1.key -in 1.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;iis---сетевой-пароль-указан-неверно&quot;&gt;IIS - Сетевой пароль указан неверно&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если при импорте сертификата в IIS получаете эту ошибку, то значит ваш IIS не поддерживает тот алгоритм шифрования, который задан в сертификате.&lt;/p&gt;

&lt;p&gt;Проверить алгоритмы можно командой:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\o&lt;/span&gt;penssl.exe pkcs12 -in .&lt;span class=&quot;se&quot;&gt;\e&lt;/span&gt;1.pfx -info | findstr &lt;span class=&quot;s2&quot;&gt;&quot;PKCS7 Encrypted data&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;MAC:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Iteration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PKCS&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Encrypted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PBES&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PBKDF&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AES&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-CBC,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Iteration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PRF&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hmacWithSHA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shrouded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Keybag:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PBES&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PBKDF&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AES&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-256&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-CBC,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Iteration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PRF&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hmacWithSHA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Следующая команда скорее всего исправит эту ошибку:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\o&lt;/span&gt;penssl.exe pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -out e1.pfx -inkey 1.key -in 1.pem
.&lt;span class=&quot;se&quot;&gt;\o&lt;/span&gt;penssl.exe pkcs12 -in .&lt;span class=&quot;se&quot;&gt;\e&lt;/span&gt;1.pfx -info | findstr &lt;span class=&quot;s2&quot;&gt;&quot;PKCS7 Encrypted data&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;MAC:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Iteration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PKCS&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Encrypted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pbeWithSHA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;And&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-KeyTripleDES-CBC,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Iteration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Shrouded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Keybag:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pbeWithSHA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;And&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-KeyTripleDES-CBC,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Iteration&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если не помогло, то:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\o&lt;/span&gt;penssl.exe pkcs12 -macalg SHA1  -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -out e1.pfx -inkey 1.key -in 1.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 28 Feb 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/openssl-convert-pem-key-to-pfx-iis</link>
        <guid isPermaLink="true">http://www.tipoit.kz/openssl-convert-pem-key-to-pfx-iis</guid>
        
        <category>openssl</category>
        
        <category>iis</category>
        
        
      </item>
    
      <item>
        <title>Linux - Смена часового пояса в Казахстане на UTC +5</title>
        <description>&lt;p&gt;В общем в нашей стране, а именно в Казахстане правительство решило, что негоже иметь несколько часовых поясов. Тут сугубо технический блог, не политический поэтому пишу только о том, как попытаться минимизировать проблемы при переходе с &lt;strong&gt;UTC +6&lt;/strong&gt; на &lt;strong&gt;UTC +5&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;определяем-текущий-часовой-пояс&quot;&gt;Определяем текущий часовой пояс&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;timedatectl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выдаче вы получите текущий часовой пояс. В моём случае:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zone:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0600&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выводе мы видим &lt;strong&gt;+06&lt;/strong&gt;. Не начинайте паниковать это ещё не значит, что, когда всё переведут на &lt;strong&gt;UTC +5&lt;/strong&gt; ваши сервера будут впереди на час.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;история-изменений-часового-пояса&quot;&gt;История изменений часового пояса&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Следующая команда покажет нам историю изменений часового пояса.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zdump -v Asia/Almaty
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если вы в конце не видите &lt;strong&gt;+05&lt;/strong&gt;, как в моём случае, то вам всего лишь нужно обновить пакет &lt;code class=&quot;highlighter-rouge&quot;&gt;tzdata&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;обновляем-tzdata&quot;&gt;Обновляем tzdata&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Rhel, CentOS, Fedora, AlmaLinux, Rocky
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum -y update tzdata
sudo dnf -y update tzdata
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ubuntu
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget http://archive.ubuntu.com/ubuntu/pool/main/t/tzdata/tzdata_2024a-1ubuntu1_all.deb
sudo dpkg -i tzdata_2024a-1ubuntu1_all.deb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Debian
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://ftp.debian.org/debian/pool/main///t/tzdata/tzdata_2024a-1_all.deb
sudo dpkg -i tzdata_2024a-1ubuntu1_all.deb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;история-изменений-часового-пояса-1&quot;&gt;История изменений часового пояса&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Следующая команда покажет нам историю изменений часового пояса.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zdump -v Asia/Almaty
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;26&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2003&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2004&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UTC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Thu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2024&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isdst=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gmtoff=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если в выводе вы видите последнюю строку вы счастливчик и время переведётся автоматом.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ничего-не-поменялось&quot;&gt;Ничего не поменялось&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если у вас совсем старая ОС, то и обновлений скорее под неё уже нет. В таком случае придётся просто выставлять другой регион с &lt;strong&gt;UTC +5&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;timedatectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-timezone Asia/Aqtau
timedatectl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 28 Feb 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-kz-timezone-changing-utc-5</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-kz-timezone-changing-utc-5</guid>
        
        <category>linux</category>
        
        <category>timedate</category>
        
        
      </item>
    
      <item>
        <title>Linux - Смена директорий по умолчанию MsSql Server 2022</title>
        <description>&lt;p&gt;На оффсайте есть конечно информация по поводу того как поменять директории для файлов бд, логов и т.д. Но вот самое гадкое это то что там все примеры с &lt;code class=&quot;highlighter-rouge&quot;&gt;/tmp&lt;/code&gt;, а когда ты пытаешься указать другую директорию при включенном &lt;code class=&quot;highlighter-rouge&quot;&gt;selinux&lt;/code&gt; встречаешь ошибку в стиле Microsoft.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создаём-директории&quot;&gt;Создаём директории&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я уже привык не хранить важные данные в директориях по умолчанию. Я считаю правильное монтировать отдельные диски и уже там хранить данные.&lt;/p&gt;

&lt;p&gt;Поэтому у меня в системе присутствуют три отдельных диска:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdj&lt;/code&gt; - для файлов бд (/datavolume)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdk&lt;/code&gt; - для логов (/logvolume)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdl&lt;/code&gt; - для временных бд (/tempdb)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для каждого раздела создадим директории в корне.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir -p /datavolume/data /logvolume/log /tempdb/temp
sudo chown mssql:mssql -R /datavolume /logvolume /tempdb
sudo chmod -R 770 /datavolume /logvolume /tempdb
sudo ls -la /datavolume /logvolume /tempdb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;подготовим-разделы&quot;&gt;Подготовим разделы&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сам Microsoft рекомендует использовать файловую систему &lt;code class=&quot;highlighter-rouge&quot;&gt;xfs&lt;/code&gt;. Если не понятно, что я делаю советую &lt;a href=&quot;https://www.tipoit.kz/linux-managing-partitiones-with-parted&quot;&gt;почитать&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sdj mklabel gpt
sudo parted /dev/sdk mklabel gpt
sudo parted /dev/sdl mklabel gpt

sudo parted /dev/sdj mkpart primary xfs 0% 100%
sudo parted /dev/sdk mkpart primary xfs 0% 100%
sudo parted /dev/sdl mkpart primary xfs 0% 100%

sudo mkfs.xfs /dev/sdj1 -f -L datavolume
sudo mkfs.xfs /dev/sdk1 -f -L logvolume
sudo mkfs.xfs /dev/sdl1 -f -L tempdb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также рекомендуется выставить атрибут &lt;code class=&quot;highlighter-rouge&quot;&gt;noatime&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;fstav&lt;/code&gt;. Атрибут &lt;code class=&quot;highlighter-rouge&quot;&gt;noatime&lt;/code&gt; не позволяет файловой системе обновлять время доступа (atime) к файлам при каждом их чтении.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;934660&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;af-/datavolume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rw,attr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,noatime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UUID=f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;57711&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-aaad---/logvolume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rw,attr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,noatime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cbb-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9377&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tempdb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rw,attr&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,noatime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount -a
df -h
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;указываем-директории-для-хранения-по-умолчанию-в-mssql-server-2022&quot;&gt;Указываем директории для хранения по умолчанию в MsSQL Server 2022&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На самом сервере с &lt;strong&gt;MsSQL&lt;/strong&gt; выполняем:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setenforce 0
sudo /opt/mssql/bin/mssql-conf &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;filelocation.defaultlogdir /logvolume/log
sudo /opt/mssql/bin/mssql-conf &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;filelocation.defaultdatadir /datavolume/data
sudo setenforce 1
sudo systemctl restart mssql-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также можно прописать директории в конфиг файле:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/opt/mssql/mssql.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filelocation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaultdatadir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/datavolume/data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaultlogdir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/logvolume/log&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Пробуем создать бд (да, sa должен быть отключен, но у меня тест)&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sqlcmd -S localhost -U sa -C
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dsads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CONTAINMENT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NONE&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'dsads'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILENAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'/datavolume/data/dsads.mdf'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8192&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;KB&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILEGROWTH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;KB&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;LOG&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'dsads_log'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILENAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'/logvolume/log/dsads_log.ldf'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8192&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;KB&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILEGROWTH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;KB&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И тут я получил ошибку:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Validation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;setting&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'filelocation.defaultdatadir'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'/datavolume/data'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;valid&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;начинаем-искать-логи&quot;&gt;Начинаем искать логи&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно идём в &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/messages&lt;/code&gt; и видим:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gr-db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-56-165&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sqlservr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32954&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0152024-02-01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;21.39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;spid&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;information,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1073741772&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gr-db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-56-165&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sqlservr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32954&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0152024-02-01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;21.39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;spid&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;information,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1073741772&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gr-db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-56-165&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sqlservr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32954&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0152024-02-01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;21.39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;spid&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Error:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5123&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Severity:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;State:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gr-db&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-56-165&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sqlservr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32954&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0152024-02-01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;21.39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;spid&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CREATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;encountered&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;operating&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(Access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied.)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;attempting&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;physical&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'/datavolume/data/dsads.mdf'.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Понятное дело, что первым делом нужно отрубить &lt;strong&gt;selinux&lt;/strong&gt; и попробовать еще раз. И если бд создалась, то нужно добавить правило для &lt;strong&gt;selinux&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;правило-для-selinux&quot;&gt;Правило для selinux&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Проверим что у нас есть на &lt;strong&gt;mssql&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo tail -f /var/log/audit/audit.log | grep mssql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;type=AVC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg=audit(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1706764257.978&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13060&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;avc:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;34201&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;comm=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Wt-760&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dev=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sdj1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ino=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;128&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scontext=system_u:system_r:mssql_server_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Проверим какое правила можно создать:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install policycoreutils-python-utils
sudo audit2allow -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#=============&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mssql_server_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==============&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#!!!!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;avc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allowed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mssql_server_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unlabeled_t:dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;remove_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#!!!!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;avc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allowed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mssql_server_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unlabeled_t:file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lock&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unlink&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Создаём правило и применяем его:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo grep mssql_server_t /var/log/audit/audit.log | sudo audit2allow -M mssql_server_t
sudo semodule -i mssql_server_t.pp
sudo systemctl restart mssql-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После этого всё должно работать. Немного подробнее о создании правила для selinux можно почитать &lt;a href=&quot;https://www.tipoit.kz/fail2ban-selinux-contextl&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 02 Feb 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-ms-sql-server-2022</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-ms-sql-server-2022</guid>
        
        <category>microsoft</category>
        
        <category>sql</category>
        
        
      </item>
    
      <item>
        <title>MsSql Server 2022 - Установка на Linux</title>
        <description>&lt;p&gt;Рассмотрим как установить MsSql Server 2022 на Linux.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/YGI7q11NZtA?si=uEIrphZpQ1RJROYq&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Для начала скажу что это уже официально возможно, не какой-то тестовый вариант, а прям production.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;репозиторий&quot;&gt;Репозиторий&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала добавим репозиторий:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo
curl https://packages.microsoft.com/config/rhel/9/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно начнем установку &lt;strong&gt;MsSql Server 2022&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install -y mssql-tools18 unixODBC-devel mssql-server openldap-compat compat-openssl11 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;корневая-директория&quot;&gt;Корневая директория&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию все исполняемые файлы находятся в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/opt/mssql/bin/&lt;/code&gt;. Чтобы каждый раз не искать этот путь можно сразу добавить в &lt;strong&gt;PATH&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'export PATH=&quot;$PATH:/opt/mssql-tools18/bin&quot;'&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'export PATH=&quot;$PATH:/opt/mssql/bin/&quot;'&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;первоначальная-настройка&quot;&gt;Первоначальная настройка&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы стартануть сервис нам необходимо для начала задать тип лицензии и пароль от пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;sa&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo /opt/mssql/bin/mssql-conf setup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге получаем:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Setup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;completed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SQL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;starting.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;last-errno-text-permission-denied&quot;&gt;Last errno text: Permission denied&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если получаете эту ошибку – то на время установки можно отключить &lt;code class=&quot;highlighter-rouge&quot;&gt;selinux&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setenforce 0
sudo /opt/mssql/bin/mssql-conf setup
sudo setenforce 1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;настраиваем-firewall&quot;&gt;Настраиваем firewall&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы клиент мог подключаться выполняем:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --zone&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;public --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1433/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 02 Feb 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-ms-sql-server-2022-install</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-ms-sql-server-2022-install</guid>
        
        <category>microsoft</category>
        
        <category>sql</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Все методы развертывания</title>
        <description>&lt;p&gt;В этой статье распишу о том какие методы развертывания Veeam Backup &amp;amp; Replication можно использовать для своей инфраструктуры. Каждый из них имеет свои преимущества и недостатки.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;простое-развертывание&quot;&gt;Простое развертывание&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Скажу сразу что этот метод используется довольно часто, потому как тут не надо особо о чем-то думать, просто установил и работает.  Но в дальнейшем могут появиться проблемы с нагрузкой на сервер резервного копирования.&lt;/p&gt;

&lt;p&gt;Если у вас небольшая инфраструктура, то вы можете воспользоваться методом простого развертывания Veeam Backup &amp;amp; Replication, все службы необходимые для работы с резервными копиями можно установить на одном Windows сервере.&lt;/p&gt;

&lt;p&gt;Кстати рекомендуется при использовании метода простого развёртывания использовать виртуальный сервер Windows. Это даёт вам возможность использовать транспортный режим Virtual appliance и, как следствие, передача данных не будет идти по сети.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-SimpleDeployment.drawio.png&quot; alt=&quot;veeam Simple Deployment&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При простом развёртывании на сервере Veeam Backup &amp;amp; Replication используются следующие сервисы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Сервер резервных копий&lt;/strong&gt;, который управляет задачами резервного копирования&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Прокси-сервер резервного копирования&lt;/strong&gt;, который обрабатывает задачи и пересылает трафик резервного копирования&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Репозиторий резервных копий по умолчанию&lt;/strong&gt;. Во время установки Veeam Backup &amp;amp; Replication находит в системе диск с максимально свободным дисковым пространством, и использует его как репозиторий по умолчанию. На этом диске создается директория Backup, где хранятся все файлы резервных копий.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Сервер монтирования&lt;/strong&gt;, необходимый для восстановления файлов гостевой ОС&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Прокси-сервер гостевого взаимодействия&lt;/strong&gt;, необходимый для работы с приложениями, индексации гостевой файловой системы и обработки журнала транзакций&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;При использования простого развертывания сразу после установки Veeam Backup &amp;amp; Replication готов для использования, нужно будет лишь добавить целевые хосты для резервного копирования.&lt;/p&gt;

&lt;p&gt;При таком подходе все данные резервных копий хранятся на том же сервер где установлен Veeam Backup &amp;amp; Replication. Если же у вас большая инфраструктура, где ресурсов одного сервера Veeam Backup &amp;amp; Replication недостаточно для работы, рекомендуется использовать расширенный сценарий развертывания.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;расширенное-развертывание&quot;&gt;Расширенное развертывание&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При спользовании простого развертывания в среде с большим количеством серверов, виртуальных машин нагрузка на сервер может быть огромной, что в итоге может привести к замедлению создания резервных копий.&lt;/p&gt;

&lt;p&gt;При использовании расширенного сценария развертывания нагрузка перемещается на выделенные сервера для разных компонентов Veeam Backup &amp;amp; Replication. Т.е. тут уже в отличии от простого развертывания используется несколько серверов (виртуальных машин). Сам сервер где установлен Veeam Backup &amp;amp; Replication становится менеджером для всех остальных компонентов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-AdvancedDeployment.drawio.png&quot; alt=&quot;veeam Advanced Deployment&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Расширенное развертывание включает в себя следующие компоненты:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Сервер резервных копий&lt;/strong&gt;, который управляет задачами резервного копирования. Используется как центр настройки и управления инфраструктурой резервного копирования.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Прокси-сервер резервного копирования&lt;/strong&gt;, который обрабатывает задачи и пересылает трафик резервного копирования&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Репозиторий резервных копий&lt;/strong&gt; где хранятся файлы резервного копирования&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Выделенные серверы монтирования&lt;/strong&gt;, необходимые для восстановления файлов гостевой ОС виртуальной машины и элементов приложений в исходное местоположение&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Выделенные прокси-сервера гостевого взаимодействия&lt;/strong&gt;, необходимые для работы с приложениями, индексации гостевой файловой системы и обработки журнала транзакций&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Преимуществом использования расширенного сценария развертывания является масштабируемость. В дальнейшем при расширении вашей инфраструктуры вы легко можете добавить еще по паре узлов необходимых компонентов, что приведёт к снижению нагрузки на существующие, вместо того чтобы дублировать сами сервера резервного копирования.&lt;/p&gt;

&lt;p&gt;При использовании нескольких прокси-серверов Veeam Backup &amp;amp; Replication динамически распределяет траффик между ними. Вы конечно можете задать конкретный прокси-сервер для задачи, но тем не менее Veeam Backup &amp;amp; Replication может выбрать сам. Конечно сами прокси-сервера должны иметь доступ к необходимым хостам и также доступ к репозиторию.&lt;/p&gt;

&lt;p&gt;Использование расширенного сценария развертывания будет идеальным выбором для работы вне основной площадки. Например, вы имеете второй резервный дата-центр, куда время от времени необходимо восстанавливать резервные копии. В таком случае вам в резервном дата-центре необходимо будет всего лишь установить компонент прокси-сервера. При запуске задачи прокси-сервер с основного дата-центра создаст связь с резервным. Но конечно тут создаётся нагрузка на канал связи между дата-центрами, так что возможно лучшим вариантом будет использовать распределенное развертывание.&lt;/p&gt;

&lt;p&gt;Чтобы прокси-сервер не брал на себя много можно настроить максимальное количество конкурентных задач для прокси-серверов.&lt;/p&gt;

&lt;p&gt;Ну и конечно еще одно преимущество - это то, что при недоступности одного прокси-сервера для задач могут использоваться другие, что в итоге не приведёт к простою.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;распределенное-развертывание&quot;&gt;Распределенное развертывание&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот метод рекомендуется использовать для большой инфраструктуры, с географически распределёнными дата-центрами. В таком случае на каждой площадке устанавливается Veeam Backup &amp;amp; Replication используя расширенное развертывание или простое развертывание и все сервера Veeam Backup &amp;amp; Replication управляются уже через Veeam Backup Enterprise Manager посредством web-интерфейса.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-DistributedDeployment.drawio.png&quot; alt=&quot;veeam Advanced Deployment&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Veeam Backup Enterprise Manager получает доступ ко всем событиям и данным конкретных узлов Veeam Backup &amp;amp; Replication, что позволяет вам управлять и мониторить все распределённые узлы Veeam Backup &amp;amp; Replication в одном месте, что конечно же удобно в первую очередь. Также это даёт преимущество в поиске резервной копии для конкретного сервера (виртуальной машины) если вы не знаете на каком узле Veeam Backup &amp;amp; Replication была сделана резервная копия. Просто делаете поиск VM в Veeam Backup Enterprise Manager и он сам найдёт его среди всех узлов Veeam Backup &amp;amp; Replication.&lt;/p&gt;

&lt;p&gt;Также при использовании Veeam Backup Enterprise Manager нет необходимости ставить лицензии на каждый узел Veeam Backup &amp;amp; Replication, вместо этого вы можете добавить все лицензии в Veeam Backup Enterprise Manager и уже оттуда присвоить эти лицензии узлам Veeam Backup &amp;amp; Replication.&lt;/p&gt;

&lt;p&gt;Также устанавливая плагин vSphere Web Client вы получаете возможность мониторить состояние виртуальной инфраструктуры в Veeam Backup Enterprise Manager.&lt;/p&gt;
</description>
        <pubDate>Tue, 30 Jan 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-deployment-methods</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-deployment-methods</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Зачем он вообще нужен?</title>
        <description>&lt;p&gt;&lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; - это комплексное решение для защиты данных и восстановления после сбоев. Используя Veeam Backup &amp;amp; Replication вы можете делать резервные копии виртуальных, физических и облачных машин, ну и конечно же восстанавливать их из резервных копий при необходимости. В Veeam Backup &amp;amp; Replication используются технологии, которые оптимизируют передачу данных и потребление ресурсов, что помогает минимизировать затраты на хранение и время восстановления при необходимости.&lt;/p&gt;

&lt;p&gt;Также предоставляется единая консоль для управления всеми задачами, такими как резервное копирование, восстановление и т.д. Вы также можете автоматизировать рутинные операции, например, проверка восстановления резервных копий.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;основные-функции&quot;&gt;Основные функции&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Резервное копирование&lt;/strong&gt;: создание резервных копий на уровне образов виртуальных, физических, облачных машин, а также резервных копий общих файловых ресурсов и репозиториев хранилищ объектов&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Восстановление&lt;/strong&gt;: предоставляется функция восстановления резервных копий в исходное или новое местоположение. Также вы можете восстановить полностью сервер, конкретные файлы, приложения и т.д.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Репликация&lt;/strong&gt;: функция создания полной копии виртуальной машины в другом месте (хост, дата-центр)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Непрерывная защита данных (CDP)&lt;/strong&gt;: репликация, которая помогает защитить критически важные виртуальные машины и достичь целевой точки восстановления (RPO) с точностью до нескольких секунд&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Копирование резервных копий&lt;/strong&gt;: функция копирования резервных копий в другое место во избежание потери резервных копий&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Поддержка систем хранения данных&lt;/strong&gt;: используя эту функцию вы можете использовать встроенный функционал снимков в системах хранения данных для создания и восстановления резервных копий&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Поддержка ленточных устройств&lt;/strong&gt;: можно хранить резервные копии на ленточных устройствах&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Проверка восстановления&lt;/strong&gt;: перед полным восстановлением можно проверить состояние сервера&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;с-чем-работает&quot;&gt;С чем работает&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;С помощью Veeam Backup &amp;amp; Replication вы можете создавать резервные копии и восстанавливать следующие объекты инфраструктуры:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Виртуальные машины:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;VMware vSphere&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft Hyper-V&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Nutanix AHV&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;oVirt&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Proxmox VE&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Облачные виртуальные машины:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AWS EC2&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft Azure&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Google Cloud&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Другое:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Физические сервера&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft Entra ID tenant data (Microsoft AD)&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Файловые ресурсы&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;MS SQL&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSQL&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Oracle, Exchange&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;OneDrive&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;SharePoint&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft 365&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;набор-решений&quot;&gt;Набор решений&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Совместно с Veeam Backup &amp;amp; Replication вы можете использовать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Veeam ONE&lt;/strong&gt;: решение, которое обеспечивает мониторинг в реальном времени, бизнес-документацию и управленческую отчетность для Veeam Backup &amp;amp; Replication, VMware vSphere и Microsoft Hyper-V&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam Backup Enterprise Manager&lt;/strong&gt;: предоставляет возможность управлять множеством узлов Veeam Backup &amp;amp; Replication с одной web консоли&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Management Pack for Veeam Backup &amp;amp; Replication&lt;/strong&gt;: компонент, который интегрирует инфраструктуру, сервисы и задания Veeam Backup &amp;amp; Replication в Microsoft System Center Operations Manager&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam Recovery Orchestrator&lt;/strong&gt;: решение, которое организует процессы аварийного восстановления в средах VMware vSphere, поддерживает восстановление критически важных приложений одним щелчком мыши и предоставляет функции для документирования и тестирования&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam App for Splunk&lt;/strong&gt;: можно мониторить состояние инфраструктуры Veeam в Splunk&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 20 Jan 2024 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-about</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-about</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>MinIo - Bucket replication</title>
        <description>&lt;p&gt;Да, сам &lt;strong&gt;MinIO&lt;/strong&gt; Server Pool считается отказоустойчивым если вы всё сделали по &lt;a href=&quot;https://www.tipoit.kz/minio-recomendtions&quot;&gt;рекомендациям&lt;/a&gt;. Но никто не отменял возможности того что у вас полностью выйдет из строя всё оборудование, находящееся в одном дата-центре, ну или же просто плановое отключение серверов.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/-5v0C_Eeedc?si=aixvqNTDpMGE2ddr&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;В таком случае вам будет необходимо наличие полной копии данных в другом дата-центре, желательно в другом городе. Благодаря репликации корзин вы можете копировать все данные на другой пул серверов. Т.е. повышаете уровень отказоустойчивости.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-bucket-replica.drawio.png&quot; alt=&quot;minio bucket replication&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;source-vs-target&quot;&gt;Source vs Target&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Давайте сразу определимся с этими понятиями: &lt;strong&gt;Source (Источник)&lt;/strong&gt; - это та корзина (bucket) на которой вы настраиваете репликацию, &lt;strong&gt;Target (Цель)&lt;/strong&gt; - это корзина (bucket) на другом пуле серверов, которая выбрана как место назначения.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-sourcetarget.drawio.png&quot; alt=&quot;minio bucket replication source target&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;версионность&quot;&gt;Версионность&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Крайне рекомендуется использовать одинаковые версии кластеров или пулов &lt;strong&gt;MinIO&lt;/strong&gt;. Т.е. если на &lt;strong&gt;Source&lt;/strong&gt; у вас стоит MinIO v1, то и на &lt;strong&gt;Target&lt;/strong&gt; тоже должен стоять MinIO v1. Да конечно работать будет и с разными версиями, но могут вылезти проблемы, которые придётся решать самому. Для примера у меня были&lt;br /&gt;
корзины ( bucket ) с большим количеством ошибок репликации и как только я обновил все пулы серверов до последней версии всё реплицировалось на ура.&lt;/p&gt;

&lt;p&gt;Также каждая корзина ( bucket ) должна быть создана с включенной опцией версионности.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;пользователь-для-репликации&quot;&gt;Пользователь для репликации&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно же самым правильным решением перед настройкой репликации будет создание отдельного пользователя, учетные данные которого будут использоваться &lt;strong&gt;MinIO&lt;/strong&gt; для доступа к файлам и их дальнейшей репликации.&lt;/p&gt;

&lt;p&gt;Политика для пользователя, под которым будет производится репликация:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetReplicationConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ListBucket&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ListBucketMultipartUploads&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetBucketLocation&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetBucketVersioning&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetBucketObjectLockConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetEncryptionConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Sid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;EnableReplicationOnBucket&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetReplicationConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ReplicateTags&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:AbortMultipartUpload&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetObjectVersion&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetObjectVersionTagging&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:PutObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:PutObjectRetention&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:PutBucketObjectLockConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:PutObjectLegalHold&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:DeleteObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ReplicateObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ReplicateDelete&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Sid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;EnableReplicatingDataIntoBucket&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Чтобы выдать права пользователю для создания правил репликации применяется следующая политика:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;admin:SetBucketTarget&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;admin:GetBucketTarget&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Sid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;EnableRemoteBucketConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetReplicationConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ListBucket&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ListBucketMultipartUploads&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetBucketLocation&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetBucketVersioning&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetObjectRetention&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetObjectLegalHold&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:PutReplicationConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Sid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;EnableReplicationRuleConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli admin user add minio1 repluser
mcli admin policy create minio1 repluser /tmp/repluser.json
mcli admin policy attach minio1 repluser --user&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;repluser 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Достаточно будет создать на одном сервере ( &lt;strong&gt;Source&lt;/strong&gt; ), но если репликация будет двухсторонней то на обоих пулах серверов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;server-side-bucket-replication&quot;&gt;Server-Side Bucket Replication&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как мы уже поняли для репликации необходимо указать &lt;strong&gt;Target&lt;/strong&gt;. Под &lt;strong&gt;Target&lt;/strong&gt; подразумевается корзина ( bucket ) на другом пуле серверов. При этом имя корзины ( bucket ) может отличаться от имени &lt;strong&gt;Source&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;При каждой записи объекта в &lt;strong&gt;Source&lt;/strong&gt; корзину &lt;strong&gt;MinIO&lt;/strong&gt; проверяет правила репликации и применяет их. При необходимости можно настроить репликацию уже существующих объектов и также репликацию операций удаления.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-deleterepl.drawio.png&quot; alt=&quot;minio file delete replication &quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Для начала создадим корзины для &lt;strong&gt;Source&lt;/strong&gt; и &lt;strong&gt;Target&lt;/strong&gt;. Напоминаю имеется в виду то что это два разных пула серверов.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli mb minio1/testbucketsource
mcli mb minio2/testbuckettarget
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;На &lt;strong&gt;Source&lt;/strong&gt; пуле выполняем ( !!!! Перед созданием прочтите всю статью до конца ):&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate add minio1/testbucketsource --remote-bucket &lt;span class=&quot;s1&quot;&gt;'http://ROOTUSER:CHANGEME123@172.31.144.8:9000/testbucket
target'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Проверяем что обе корзины пусты:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli ls minio1/testbucketsource
mcli ls minio2/testbuckettarget
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Загрузим файл на &lt;strong&gt;Source&lt;/strong&gt; :&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli cp /tmp/repluser.json minio1/testbucketsource
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Проверяем что файл присутствует на обоих пулах серверов:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli ls minio1/testbucketsource
mcli ls minio2/testbuckettarget
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2023-10-11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STANDARD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repluser.json&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2023-10-11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STANDARD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repluser.json&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;active-active-two-way-bucket-replication&quot;&gt;Active-Active (Two-Way) Bucket Replication&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На первой схеме видно, что я нарисовал стрелки в обе стороны. Это не ошибка так как одна корзина может быть, как &lt;strong&gt;Source&lt;/strong&gt; так и &lt;strong&gt;Target&lt;/strong&gt;. Соответственно всё что записывается в Server Pool1 попадает и в Server Pool2 и наоборот.&lt;/p&gt;

&lt;p&gt;Для того чтобы создать двухстороннюю репликацию делаем всё тоже самое только также выполняем команду  &lt;code class=&quot;highlighter-rouge&quot;&gt;mcli replicate&lt;/code&gt; и на &lt;strong&gt;Target&lt;/strong&gt; ( !!!! Перед созданием прочтите всю статью до конца ).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate add minio1/testbucketsource --remote-bucket &lt;span class=&quot;s1&quot;&gt;'http://ROOTUSER:CHANGEME123@172.31.144.8:9000/testbuckettarget'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate add minio1/testbuckettarget --remote-bucket &lt;span class=&quot;s1&quot;&gt;'http://ROOTUSER:CHANGEME123@172.31.144.11:9000/testbucketsource'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ресинхронизация&quot;&gt;Ресинхронизация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вдруг по, какой-то причине подключение между пулами серверов прервалось и ваши данные не синхронизируются можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;mc replicate resync bucket&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;При использовании данной команды происходит проверка всех объектов в &lt;strong&gt;Source&lt;/strong&gt;, после чего каждый объект помещается в очередь на репликацию не зависимо от того был ли он реплицирован ранее. Но если в &lt;strong&gt;Target&lt;/strong&gt; есть объекты, которые полностью соответствуют объектам в &lt;strong&gt;Source&lt;/strong&gt; включая метаданные, то естественно эти объекты не будут синхронизироваться заново.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;minio1/testbucketsource | grep arn
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Destination&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;Bucket&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:minio:replication::ff92a1d3-324b-4e35-a7e6-d7319e51f1d8:testbuckettarget&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate resync start minio1/testbucketsource --remote-bucket &lt;span class=&quot;s2&quot;&gt;&quot;arn:minio:replication::ff92a1d3-324b-4e35-a7e6-d7319e51f1d8:testbuckettarget&quot;&lt;/span&gt;
mcli replicate resync status minio1/testbucketsource
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Resync&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;summary:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;arn:minio:replication::ff&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;92&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3-324&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7319&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:testbuckettarget&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Status:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Pending&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Replication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(Bytes)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Replicated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;репликация-операций-удаления&quot;&gt;Репликация операций удаления&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как я уже говорил выше есть возможность реплицировать операция удаления. Т.е. если удалить какой-то объект на &lt;strong&gt;Source&lt;/strong&gt; он также удалится и на &lt;strong&gt;Target&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;По умолчанию эта опция при создании репликации корзин включена. Если мы настраиваем репликацию в графике, то необходимо включать эту опцию руками через &lt;code class=&quot;highlighter-rouge&quot;&gt;nmcli&lt;/code&gt;. Но всё зависит ещё и от версии самого сервера MinIO.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate add minio1/testbucketsource --remote-bucket &lt;span class=&quot;s1&quot;&gt;'http://ROOTUSER:CHANGEME123@172.31.144.8:9000/testbuckettarget'&lt;/span&gt; --replicate &lt;span class=&quot;s2&quot;&gt;&quot;delete,delete-marker&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;репликация-существующих-объектов&quot;&gt;Репликация существующих объектов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также, как и с ситуацией выше Репликация существующих объектов по умолчанию включена.&lt;/p&gt;

&lt;p&gt;Для включения используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;mc replicate add --replicate&lt;/code&gt; с опцией &lt;code class=&quot;highlighter-rouge&quot;&gt;existing-objects&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если же у вас уже настроена репликация, то всегда можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;mc replicate update --replicate&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate add minio1/testbucketsource --remote-bucket &lt;span class=&quot;s1&quot;&gt;'http://ROOTUSER:CHANGEME123@172.31.144.8:9000/testbuckettarget'&lt;/span&gt; --replicate &lt;span class=&quot;s2&quot;&gt;&quot;existing-objects&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;изменение-настроек-репликации&quot;&gt;Изменение настроек репликации&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы уже настроили правило репликации, но вам вдруг понадобилось что-то изменить можно использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;mcli replicate export alias&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Но не забываем, что перед изменением любой конфигурации лучше сделать сперва бэкап.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;minio1/testbucketsource &amp;gt; /tmp/repl.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;minio1/testbucketsource
mcli replicate update minio1/testbucketsource --id ckjdbncv4aqg10tqmbcg --replicate &lt;span class=&quot;s2&quot;&gt;&quot;delete&quot;&lt;/span&gt;
mcli replicate &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;minio1/testbucketsource
mcli replicate update minio1/testbucketsource --id ckjdbncv4aqg10tqmbcg --replicate &lt;span class=&quot;s2&quot;&gt;&quot;delete,delete-marker,existing-objects&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;синхронная-и-асинхронная-репликация&quot;&gt;Синхронная и асинхронная репликация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При использовании асинхронной репликации объект помещается в корзину сразу и только потом добавляется в очередь. Т.е. если &lt;strong&gt;Target&lt;/strong&gt; недоступен, то в любом случае объект будет записан.&lt;/p&gt;

&lt;p&gt;При использовании синхронной репликации важно чтобы &lt;strong&gt;Target&lt;/strong&gt; всегда был доступен, иначе вы потратите больше времени на загрузку объекта. При синхронной репликации MinIO пытается реплицировать объект до завершения исходной операции &lt;code class=&quot;highlighter-rouge&quot;&gt;PUT&lt;/code&gt;. MinIO возвращает успешную операцию &lt;code class=&quot;highlighter-rouge&quot;&gt;PUT&lt;/code&gt; независимо от того, были ли успешной попытка репликации. Хотя у меня была ситуация, когда файл не удавалось загрузить из-за того, что на &lt;strong&gt;Target&lt;/strong&gt; не хватало места на HDD.&lt;/p&gt;

&lt;p&gt;Рекомендуется использовать асинхронную репликацию. Да есть конечно возможность потерять какие-то количество данных при выходе из строя &lt;strong&gt;Source&lt;/strong&gt; но по крайней мере чаще встречаются обрывы на каналах связи между дата-центрами.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-проходит-репликация&quot;&gt;Как проходит репликация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже ни раз в этой статье затрагивали тему постановки в очередь на репликацию. Если какой-то объект не удаётся реплицировать трижды, то этот объект исключается из очереди. Также через какое-то время при сканировании объектов эти исключенные объекты будут снова помещены в очередь.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mcli replicate status minio1/testbucketsource
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Replication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;since&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;172.31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Replicated:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KiB)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Queued:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;objects,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(avg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;objects,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;max:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;objects,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Workers:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(avg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;max:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Transfer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Rate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B/s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(avg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B/s;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;max:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B/s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Latency:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(avg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;max:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Link:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;online&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(total&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;downtime:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Errors:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minute;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hr;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;since&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uptime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Статусы репликации:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Статус&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PENDING&lt;/td&gt;
      &lt;td&gt;Это состояние говорит о том, что объект еще не реплицирован. Объекты с этим статусом помещаются в очередь репликации. Также если объект настроен на множественную репликацию, то статус не изменится пока не пройдёт репликация на все Target&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;COMPLETED&lt;/td&gt;
      &lt;td&gt;Объект успешно реплицирован&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;FAILED&lt;/td&gt;
      &lt;td&gt;Объект не удалось реплицировать. Объекты с этим статусом снова помещаются в очередь при возможности&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;REPLICA&lt;/td&gt;
      &lt;td&gt;Объект сам по себе является копией из удаленного источника&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Собственно, сам процесс можно разбить на 2 варианта:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;PENDING  -&amp;gt;  COMPLETED&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;PENDING  -&amp;gt;  FAILED  -&amp;gt;  COMPLETED&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Также для проверки наличия неудачных попыток можно использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;mcli replicate backlog minio1/testbucketsource --full&lt;/code&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 12 Oct 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-bucket-replication</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-bucket-replication</guid>
        
        <category>minio</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Логирование событий в Elasticsearch</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/exV1Enn_hI4?si=OaoiYKjyxHImlUkk&amp;amp;start=141&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Знакома ситуация, когда от вас требуют, чтобы записывался каждый чих? Если да, то мы свами одной крови. В этой статье распишу свой опыт настройки аудита действий пользователя в &lt;strong&gt;MinIO&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для начала конечно у вас уже должен быть работающий кластер &lt;strong&gt;Elasticsearch&lt;/strong&gt;. Как его ставить в этой статье я рассматривать не буду.&lt;/p&gt;

&lt;p&gt;Также о том как поставить &lt;strong&gt;MinIO&lt;/strong&gt; клиент и создать &lt;code class=&quot;highlighter-rouge&quot;&gt;alias&lt;/code&gt; вы можете посмотреть &lt;a href=&quot;https://www.tipoit.kz/minio-distribution-mode&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;включаем-мониторинг-действий-с-корзиной-bucket&quot;&gt;Включаем мониторинг действий с корзиной (bucket)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Самым первым делом нам необходимо добавить узел &lt;strong&gt;Elasticsearch&lt;/strong&gt;, на который будем слать логи.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc admin config &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;minio_alias/ notify_elasticsearch:1    &lt;span class=&quot;nv&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://elkhost:9122&quot;&lt;/span&gt;    &lt;span class=&quot;nv&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;minio-index&quot;&lt;/span&gt;    &lt;span class=&quot;nv&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;access&quot;&lt;/span&gt;    &lt;span class=&quot;nv&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk_user&quot;&lt;/span&gt;    &lt;span class=&quot;nv&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk_pwd&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;К сожалению, после добавления узла &lt;strong&gt;Elasticsearch&lt;/strong&gt; необходимо перезапустить весь Server Pool MinIO.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc admin service restart minio_alias
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Далее нам необходимо получить arn для &lt;strong&gt;Elasticsearch&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc admin info --json minio_alias | grep sqsARN
mc admin info --json minio_alias | jq  .info.sqsARN
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Собственно, настраиваем аудит для &lt;strong&gt;корзины (bucket)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc event add minio_alias/mybucket arn:aws:sqs:us-west-2:444455556666:your-queue
mc event ls minio_alias/mybucket
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Можно применить фильтр по маске, например, производит аудит действий только для jpg файлов&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc event add minio_alias/mybucket arn:aws:sqs:us-west-2:444455556666:your-queue --suffix .jpg
mc event ls minio_alias/mybucket
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 12 Oct 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-bucket-audit-elk</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-bucket-audit-elk</guid>
        
        <category>minio</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Файлы не удаляются с диска</title>
        <description>&lt;p&gt;Для того чтобы удалить файлы используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;mc rm -r --force&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Но может так случиться что после удаления в самом bucket файлов нет, но они всё также лежать на диске в ОС. Может это произойти если вы используете версионность в bucket, чтобы полностью удалить файлы и их версии добавляем опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--versions&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc rm -r --force --versions &lt;span class=&quot;nb&quot;&gt;alias&lt;/span&gt;/bucketname
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 05 Oct 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-cant-delete-files-from-disk</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-cant-delete-files-from-disk</guid>
        
        <category>minio</category>
        
        
      </item>
    
      <item>
        <title>Linux - Права на файлы</title>
        <description>&lt;p&gt;Благодаря правам на файлы вы можете ограничивать их использование пользователями. В этой статье только теория если вас интересуют команды, то вам &lt;a href=&quot;%D1%80%D0%B5%D0%B5%D0%B7&quot;&gt;сюда&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Каждый файл имеет три категории по которым можно раздать права на файл:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Владелец файла, обычно тот, кто создал файл&lt;/li&gt;
  &lt;li&gt;Группа владелец файла, обычно основная группа создателя файла&lt;/li&gt;
  &lt;li&gt;Остальные пользователя, все кто не вошёл в список первых двух&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-15_17-04.png&quot; alt=&quot;linux perms&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В иерархии самый большой вес привилегий имеет владелец файла (5), затем идёт группа владелец (6) и уже самый минимальный вес у остальных.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;расшифровка-rwx&quot;&gt;Расшифровка RWX&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Существуют три категории доступа к файлам: read, write, execute. При этом они по-разному влияют на файлы и директории. Таблица ниже расшифровывает каждый из них.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Право&lt;/th&gt;
      &lt;th&gt;Файлы&lt;/th&gt;
      &lt;th&gt;Директории&lt;/th&gt;
      &lt;th&gt;Цифра&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;r (read)&lt;/td&gt;
      &lt;td&gt;Файл может быть прочитан&lt;/td&gt;
      &lt;td&gt;Возможен просмотр списка документов в каталоге&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;w&lt;/td&gt;
      &lt;td&gt;Контент файла может быть изменён&lt;/td&gt;
      &lt;td&gt;Можно создавать или удалять файлы в каталоге&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;x&lt;/td&gt;
      &lt;td&gt;Файл может быть исполняемым&lt;/td&gt;
      &lt;td&gt;Можно переместиться в каталог (cd)&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;На картинке ниже права представлены в цифровом виде:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;7 - означает что пользователь имеет все права (rwx)&lt;/li&gt;
  &lt;li&gt;4 - означает что пользователь имеет права только на чтение файла ( r )&lt;/li&gt;
  &lt;li&gt;0 - права на файл отсутствуют&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/file-perms.png&quot; alt=&quot;file permissions in linux&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Получается у нас есть 2 пользователя и одно группа &lt;code class=&quot;highlighter-rouge&quot;&gt;all&lt;/code&gt;. В группе состоит пользователь &lt;code class=&quot;highlighter-rouge&quot;&gt;Ivan&lt;/code&gt;. В итоге мы имеем:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Пользователь Ivan имеет полный доступ к файлу FILE1, так как он его владелец и для владельца выставлены максимальные права - цифра 7&lt;/li&gt;
  &lt;li&gt;Пользователь Valera не имеет прав на FILE1 так как для него действует 3 цифра 0, потому что он входит в категорию остальные пользователи&lt;/li&gt;
  &lt;li&gt;Пользователь Ivan имеет полный доступ к файлу FILE2, так как он входит в группу владельцев файла - All. А для этой группы выставлены полные права - цифра 7&lt;/li&gt;
  &lt;li&gt;Пользователь Valera имеет права на чтение файла FILE2 так как для него действует 3 цифра 4, потому что он входит в категорию остальные пользователи&lt;/li&gt;
  &lt;li&gt;Ни Ivan, ни Valera не имеют никаких прав на FILE3 потому что не являются владельцами файла, а для остальных пользователей права выставлены в 0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Т.е. когда вы видите цифры 740 это и есть обозначение прав на файл, где порядковый номер цифры соответствует категории, которые мы рассматривали в самом начале статьи.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;просмотр-прав-на-файл&quot;&gt;Просмотр прав на файл&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы посмотреть какие права выставлены для файла мы можем воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;ls -la&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ls -l 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ivan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ivan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwxrwxr--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;All&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwxrwx---.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В ОС права представляются в виде букв по три штуки, т.е. полные права обозначаются как &lt;code class=&quot;highlighter-rouge&quot;&gt;rwx&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;421&lt;/code&gt;. Первая буква &lt;code class=&quot;highlighter-rouge&quot;&gt;d&lt;/code&gt; обозначает что это директория.&lt;/p&gt;

&lt;p&gt;Рассмотрим подробнее строку &lt;code class=&quot;highlighter-rouge&quot;&gt;drwxrwxr--.  2 Huan  All     19 Nov  3 14:37 folder2&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;d&lt;/code&gt;rwxrwxr–.  2 Huan  All     19 Nov  3 14:37 folder2 - означает что это директория&lt;/li&gt;
  &lt;li&gt;d&lt;code class=&quot;highlighter-rouge&quot;&gt;rwx&lt;/code&gt;rwxr–.  2 Huan  All     19 Nov  3 14:37 folder2 - права для владельца&lt;/li&gt;
  &lt;li&gt;drwx&lt;code class=&quot;highlighter-rouge&quot;&gt;rwx&lt;/code&gt;r–.  2 Huan  All     19 Nov  3 14:37 folder2 - права для группы владельца&lt;/li&gt;
  &lt;li&gt;drwxrwx&lt;code class=&quot;highlighter-rouge&quot;&gt;r--&lt;/code&gt;.  2 Huan  All     19 Nov  3 14:37 folder2 - права для всех остальных&lt;/li&gt;
  &lt;li&gt;drwxrwxr–.  2 &lt;code class=&quot;highlighter-rouge&quot;&gt;Huan&lt;/code&gt;  All     19 Nov  3 14:37 folder2 - владелец директории&lt;/li&gt;
  &lt;li&gt;drwxrwxr–.  2 Huan  &lt;code class=&quot;highlighter-rouge&quot;&gt;All&lt;/code&gt;     19 Nov  3 14:37 folder2 - группа владелец директории&lt;/li&gt;
  &lt;li&gt;drwxrwxr–.  2 Huan  All     19 Nov  3 14:37 &lt;code class=&quot;highlighter-rouge&quot;&gt;folder2&lt;/code&gt; - имя директории&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;права-на-файл-по-умолчанию&quot;&gt;Права на файл по умолчанию&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда вы создаёте файл ему назначаются права по умолчанию, или как их еще называют начальные права.&lt;/p&gt;

&lt;p&gt;Когда вы создайте директорию то права по умолчанию у неё выставляются в 0777, а для файла 0666. Права на исполнение файла всегда задаются самим пользователем.&lt;/p&gt;

&lt;p&gt;И так если верить теории выше, то сейчас мы создадим файл и права у него будут 666.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;touch umask.txt
ls -la umask.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rw-rw-r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;umask.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но мы видим, что права у нас 664. Так в чем же дело? Дело в том, что тут вмешался &lt;code class=&quot;highlighter-rouge&quot;&gt;umask&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;демонстрация-всего-выше-описанного&quot;&gt;Демонстрация всего выше описанного&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;IVAN - FILE1&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls -l
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ivan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ivan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwxrwxr--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;All&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwxrwx---.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo su - Ivan
ls folder1/
cat folder1/FILE1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;Ivan &amp;gt;&amp;gt; folder1/FILE1
cat folder1/FILE1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ivan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mv folder1/FILE1 folder1/FILE1-1
ls folder1/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;IVAN - FILE2&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls folder2/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat folder2/FILE2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;Ivan &amp;gt;&amp;gt; folder2/FILE2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-bash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;VALERA - FILE1&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo su - Valera
ls folder1/
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;folder1/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ls:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/':&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-bash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;VALERA - FILE2&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls folder2/
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;folder2/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ls:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;':&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-bash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls folder2/
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;folder2/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ls:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;':&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-bash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls folder2/
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;folder2/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;cat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cat:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При выводе содержимого файла мы получаем ошибку хотя мы имеем права на чтение файла. Дела в том, что на каталог &lt;code class=&quot;highlighter-rouge&quot;&gt;folder2&lt;/code&gt; у нас права &lt;code class=&quot;highlighter-rouge&quot;&gt;r--&lt;/code&gt;. Но для того чтобы открыть файл нам надо попасть в каталог, а для этого нам нужен еще &lt;code class=&quot;highlighter-rouge&quot;&gt;x&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chmod a+x folder2/
ls -l folder2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwxrwxr-x.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Huan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;All&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat folder2/FILE2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;Valera &amp;gt;&amp;gt; folder2/FILE2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-bash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;folder&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/FILE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 21 Sep 2023 02:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-file-perms</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-file-perms</guid>
        
        <category>linux</category>
        
        <category>permissions</category>
        
        
      </item>
    
      <item>
        <title>Linux - Управление паролями пользователей</title>
        <description>&lt;p&gt;Как я писал ранее все пароли пользователей, зашифрованные лежат в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/shadow&lt;/code&gt;. Доступ к этому фалу имеет только &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ls -la /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;----------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;943&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;36&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/shadow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;etcshadow&quot;&gt;/etc/shadow&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рассмотрим подробнее строку из этого файла.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-11-02_15-51.png&quot; alt=&quot;/etc/shadow line&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Имя пользователя&lt;/li&gt;
  &lt;li&gt;Зашифрованный пароль&lt;/li&gt;
  &lt;li&gt;День, когда пароль последний раз был изменён. Для того чтобы перевести в наши дни надо добавить эти дни к дате 01.01.1970&lt;/li&gt;
  &lt;li&gt;Минимальное время в днях которое должно пройти от последней смены пароля для возможности очередной смены пароля&lt;/li&gt;
  &lt;li&gt;Срок действия пароля&lt;/li&gt;
  &lt;li&gt;Период уведомлений о необходимости смены пароля. Отнимается от даты смена пароля&lt;/li&gt;
  &lt;li&gt;Период неактивности пользователя, по истечении которого пользователь будет заблокирован&lt;/li&gt;
  &lt;li&gt;Период в днях после которого аккаунт заблокируется. Отсчет идёт опять-таки от 01.01.1970&lt;/li&gt;
  &lt;li&gt;Пустое поле для будущих изысканий RedHat&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;формат-зашифрованного-пароля&quot;&gt;Формат зашифрованного пароля&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Зашифрованный пароль, разбитый на части:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;$6&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;$6q63QkCry59G3VG5&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;$s.O.Lmx5c.ynqHkuWAqiWfCXnvluw85NKkVjJUeQfTP8M8wecl.wTixpCqqoGoIJfA7lgF2fpDkGjVECgAPr90&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Получается, что строка состоит из 3 частей, разделённых знаком &lt;code class=&quot;highlighter-rouge&quot;&gt;$&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Обозначает какой алгоритм хэширования применен. Номер 6 означает что это SHA-512, который используется по умолчанию в RHEL 8. Номер 1 означает MD5, а 5 - SHA-256.&lt;/li&gt;
  &lt;li&gt;Соль (sault), которая используется для декодирования пароля. Генерируется рандомно.&lt;/li&gt;
  &lt;li&gt;Хэш пароля пользователя. Хэш и незашифрованный пароль объединяются для создания хэша пароля.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Суть объединения соли с паролем пользователя заключается в защите хэша от всяких переборов пароля по хэшу. Т.е. если у вас пароль &lt;code class=&quot;highlighter-rouge&quot;&gt;123456&lt;/code&gt; то хэш этого пароля легко найти в интернете, но если у вас добавляется еще моль к этому паролю то найти его уже гораздо сложнее.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;верификация-пароля&quot;&gt;Верификация пароля&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда пользователь пытается залогиниться система проверяет наличие записи для него в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/shadow&lt;/code&gt;, потом объединяет соль с паролем, который ввёл пользователь и шифрует его используя установленный алгоритм.  И если полученный результат аналогичен хэшу в файле значит пользователь ввёл правильный пароль и может авторизоваться в ОС. Этот метод позволяет определить, что пользователь вводит правильный или не правильный пароль без хранения пароля в открытом виде.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;устаревание-пароля&quot;&gt;Устаревание пароля&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже косвенно затрагивали эту тему в ранних статьях и теперь рассмотрим это подробнее. Управление временем жизни пароля осуществляется через команду &lt;code class=&quot;highlighter-rouge&quot;&gt;chage&lt;/code&gt;. На картинке ниже рассмотрим весь цикл жизни пароля с опциями для &lt;code class=&quot;highlighter-rouge&quot;&gt;chage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/pwd-aging.png&quot; alt=&quot;password aging&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Например, мы хотим, чтобы пароль пользователя был активен 60 дней, при этом уведомление о смене должно выводиться за 7 дней до истечения пароля, и также выставим время неактивности после окончания срока действия пароля для блокировки неактивного пользователя в 30 дней.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chage -m 0 -M 60 -W 7 -I 30 user20
sudo chage -l user20
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;expires&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Jan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inactive&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Jan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;expires&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;never&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Minimum&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;between&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Maximum&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;between&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;warning&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;before&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;expires&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Мы видим тут дату последней смены пароля от которой и отчитывается срок действия пароля. И если мы хотим, чтобы пользователь при следующем входе в систему сменил пароль то нужно выставить это значение в 0.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chage -d 0 user20
sudo chage -l user20
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;must&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;expires&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;must&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inactive&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;must&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы установить время жизни пользователя используем опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;-E&lt;/code&gt;, которая принимает значение даты в будущем.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;date -d &lt;span class=&quot;s1&quot;&gt;'+20 days'&lt;/span&gt; +%F
sudo chage -E 2021-11-23 user20
sudo chage -l user20
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;expires&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;глобальные-настройки-пароля&quot;&gt;Глобальные настройки пароля&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно если у вас по 20-30 пользователей очень проблематично каждому выставлять руками политику паролей. Поэтому существует файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/login.defs&lt;/code&gt; в котором вы можете задать политику паролей для всех пользователей в ОС. Важное замечание политику будут подхватывать только пользователи, созданные после редактирования этого файла. Старым пользователям придётся менять руками командой &lt;code class=&quot;highlighter-rouge&quot;&gt;chage&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PASS_MAX_DAYS - максимальное время жизни пароля&lt;/li&gt;
  &lt;li&gt;PASS_MIN_DAYS - минимальное время жизни пароля&lt;/li&gt;
  &lt;li&gt;PASS_MIN_LEN - минимальное количество символов в пароле&lt;/li&gt;
  &lt;li&gt;PASS_WARN_AGE - время уведомления перед истечением пароля&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;блокировка-пользователя&quot;&gt;Блокировка пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы заблокировать пользователя можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;usermod&lt;/code&gt; о которой мы уже говорили тут. Для блокировки используется опция &lt;code class=&quot;highlighter-rouge&quot;&gt;-L&lt;/code&gt;, а для разблокировки - &lt;code class=&quot;highlighter-rouge&quot;&gt;-U&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod -L user20
sudo usermod -U user20
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 20 Sep 2023 02:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-user-password-control</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-user-password-control</guid>
        
        <category>linux</category>
        
        <category>users</category>
        
        <category>password</category>
        
        
      </item>
    
      <item>
        <title>Linux - Управление пользователями</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;создание-пользователя&quot;&gt;Создание пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для добавления пользователя в систему используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;useradd username&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;adduser username&lt;/code&gt;. Какую именно команду выполнять зависит от ОС. Также при выполнении этой команды создаётся и домашняя директория для пользователя и основная группа пользователя. Для установления пароля пользователя нужно выполнить отдельную команду &lt;code class=&quot;highlighter-rouge&quot;&gt;passwd username&lt;/code&gt;. Пока не зададите пароль пользователь не сможет войти в систему.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd admin2 &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; sudo adduser admin2
sudo passwd admin2 
sudo tail /etc/passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также при создании пользователя вы можете использовать опции, которые позволят задать дополнительные параметры.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Добавим описание для пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd admin2 -c &lt;span class=&quot;s2&quot;&gt;&quot;my test user&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавим время жизни пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd admin2 -e 2025-01-01
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Укажем UID пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd admin2 -u 1005
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;редактирование-пользователя&quot;&gt;Редактирование пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для редактирования уже созданного пользователя используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;usermod&lt;/code&gt;. Ниже рассмотрим основные примеры использования &lt;code class=&quot;highlighter-rouge&quot;&gt;usermod&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Добавим описание для пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod admin2 -c &lt;span class=&quot;s2&quot;&gt;&quot;my test user&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Изменим основную группу пользователя (старая группа затирается)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod admin2 -g admin
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавим дополнительные группы
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod admin2 -a -G admin,admin2,wheel
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Заблокируем пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod admin2 -L
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Разблокируем пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod admin2 -U
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Сменим оболочку shell
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod admin2 -c /bin/zsh
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Сменим uid пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod user3 -r 1005
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Все опции команды вы можете получить выполнив &lt;code class=&quot;highlighter-rouge&quot;&gt;man usermod&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;удаление-пользователя&quot;&gt;Удаление пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы удалить пользователя, не удаляя при этом его домашнюю директорию выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;userdel username&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы удалить пользователя и его домашнюю директорию выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;userdel -r username&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Удалять домашнюю директорию или нет зависит от политики иб вашей организации. Например, может быть так что вам необходимо сохранять все файлы пользователя даже если он уже больше не работает.&lt;/p&gt;

&lt;p&gt;Если вы удалите пользователя без удаления папки освободится UID, при этом владелец файлов в итоге назначается по UID. Т.е. новый пользователь может получить UID, который принадлежал удаленному пользователю, и он будет иметь доступ к не удалённым данным.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd user2
sudo ls -l /home/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;62&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo userdel user2
sudo ls -l /home/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1002&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;62&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd user3
sudo ls -l /home/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;62&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;62&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы найти все директорию у которых отсутствуют владельцы можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo find / -nouser -o -nogroup&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;задать-uid-для-пользователя&quot;&gt;Задать uid для пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы такой ситуации как сверху не происходило можно при создании пользователя сразу указать его uid.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo useradd user3 -r 1005
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если пользователь уже создан, то не беда можно использовать usermod.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo usermod user3 -r 1005
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;задать-пароль-пользователя&quot;&gt;Задать пароль пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я уже упоминал что для установки пароля пользователю используется &lt;code class=&quot;highlighter-rouge&quot;&gt;passwd username&lt;/code&gt;. Нужно дважды повторить свой пароль.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;верификация&quot;&gt;Верификация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как вы успели заметить некоторые команды не выводят ничего о итоге выполнения. Так вот чтобы проверить как выполнилась команда можно выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;echo $?&lt;/code&gt;. Выводом будет код результата (exit code), просмотреть что значит exit code можно используя man.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;EXIT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CODE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;passwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exits&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;following&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;codes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;success&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;passwd/libuser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;operation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;uid-диапазоны&quot;&gt;UID диапазоны&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;О том что такое UID можно почитать &lt;a href=&quot;https://tipoit.kz/linux-users-and-groups&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;В Redhat дистрибутивах для каждого типа пользователей зарезервированы диапазоны выдаваемого UID.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;0 - используется для root&lt;/li&gt;
  &lt;li&gt;1-200 - для системных пользователей (system user) именно для сервисов Redhat&lt;/li&gt;
  &lt;li&gt;201-999 - для системных пользователей (system user) сторонних приложений&lt;/li&gt;
  &lt;li&gt;1000+ - для обычных пользователей&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 16 Sep 2023 02:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-user-control</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-user-control</guid>
        
        <category>linux</category>
        
        <category>users</category>
        
        <category>useradd</category>
        
        <category>usermod</category>
        
        
      </item>
    
      <item>
        <title>Linux - Структура каталогов</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;---корневой-каталог-the-root-directory&quot;&gt;/ - Корневой каталог (The Root Directory)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Начнём с самого основного каталога /, который является корнем всех остальных. Все в вашей системе Linux находится в этом каталоге. Да, вы можете возразить что можно ведь создать раздел как в Windows. Но вот в Windows это будет уже диск D, а не C тогда как в Linux это будет новая директория, которая всё еще будет находится в корне, т.е. /.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;bin---директория-для-исполняемых-файлов&quot;&gt;/bin - Директория для исполняемых файлов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Директория /bin содержит основные пользовательские двоичные файлы (программы). Программы необходимые для работы с ОС находятся в данной директории. Но если пользователь ставит что-то другое, например, браузер то его исполняемые файлы уже помещаются в /usr/bin.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;boot---каталог-для-файлов-загрузки&quot;&gt;/boot - Каталог для файлов загрузки&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как нетрудно догадаться по названию эта директория связана с загрузкой, а именно там находятся файлы, благодаря которым происходит загрузка ОС. Например, загрузчик GRUB.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;cdrom&quot;&gt;/cdrom&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут в принципе всё понятно по названию, это временное место для компакт-дисков, вставленных в систему. Но вот файлов тут с диска вы не найдёте)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;dev---файлы-устройств&quot;&gt;/dev - Файлы устройств&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Так как в Linux всё это файл, то и устройства не исключение. Самое часто используемое это, например, жесткие диски. Каждый жёсткий диск будет предоставляться как файл с именем /dev/sd[a-z].&lt;/p&gt;

&lt;p&gt;Но помимо физических устройств тут присутствуют и виртуальные. Такие как /dev/random, /dev/null (черная дыра).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;etc---каталог-конфигураций&quot;&gt;/etc - Каталог конфигураций&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самый востребованный каталог в работе. Как правило все программы по умолчанию хранят свои файлы конфигураций в этой директории. Иногда бывает, что тут лежит файл конфигурации по умолчанию, а пользовательский может быть в другой директории.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;home---домашние-директории-пользователей&quot;&gt;/home - Домашние директории пользователей&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут вы можете найти домашние директории пользователей, что-то вроде C:/users в Windows. Но в Linux можно создать пользователя без домашней директории, если вдруг хочется.&lt;/p&gt;

&lt;p&gt;Когда вы авторизуетесь на сервере ваша директория по умолчании как раз находится тут, например, /home/user.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;lib&quot;&gt;/lib&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут собственно библиотеки, которые используют те самые исполняемые файлы с директории /bin.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;media&quot;&gt;/media&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если в директории /cdrom нет данных, то они как раз находятся тут) Директория /media содержит подкаталоги, в которых монтируются съемные носители, вставленные в компьютер.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;mnt--временные-точки-монтирования&quot;&gt;/mnt – временные точки монтирования&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Исторически сложилось так, что директория /mnt — это место, куда системные администраторы монтировали временные файловые системы во время их использования. Но некоторые используют его, как и постоянное место монтирования, если можно, то почему нет то)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;opt&quot;&gt;/opt&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Директория /opt содержит подкаталоги для дополнительных пакетов программного обеспечения.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;root&quot;&gt;/root&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это у нас корневая директория короля, т.е. пользователя root. Как вы поняли по пути /home/root ничего нет.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;run&quot;&gt;/run&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Эта директория где программы могут хранить различные временные файлы, например, сокеты. Они не хранят их в /tmp так как эта директория очищается.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;sbin&quot;&gt;/sbin&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каталог /sbin аналогичен каталогу /bin. Он содержит важные двоичные файлы, которые обычно предназначены для запуска пользователем root для системного администрирования.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;selinux&quot;&gt;/selinux&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Любите отключать selinux проходят мимо этой директории. Каталог /selinux содержит специальные файлы, используемые для работы SELinux. Может быть не во всех ОС.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;tmp---временные-файлы-temporary-files&quot;&gt;/tmp - Временные файлы (Temporary Files)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Приложения хранят тут обычно данные потеря которых не страшна. Ну и также администраторы любят кидать сюда временные файлы, так как можно не тратить время на их удаление. Всё равно само удалится.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;varlog&quot;&gt;/var/log&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Файлы журналов (лог файлы) для системы и приложений хранятся в каталоге /var/log. Также это директория для остальных данных. Например, apache хранит html файлы по пути /var/www.&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Sep 2023 02:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-directories</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-directories</guid>
        
        <category>linux</category>
        
        
      </item>
    
      <item>
        <title>FreeIpa - Активируем otp в качестве второго фактора аутентификации</title>
        <description>&lt;p&gt;Почему важно использовать двухфакторную аутентификацию:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Повышает уровень безопасности:&lt;/strong&gt; Даже если злоумышленник получит ваш пароль, он не сможет его использовать так как ему нужно еще получить значение второго типа аутентификации, например, одноразовый пароль (otp).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Снижение риска повторного использования пароля:&lt;/strong&gt; Многие любят использовать один и тот же пароль для нескольких сервисов. Конечно двухфакторная аутентификация не исправит эту проблему, но благодаря ей у вас будут разные otp для разных сервисов. Т.е. кто-то, узнав ваш пароль от одной системы может им воспользоваться для доступа к другой системе, но столкнётся со вторым этапом.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Соответствие требованиям:&lt;/strong&gt; Многие организации особенно государственные проходят проверки и одна из таких проверок — это соответствие требованиям аутентификации, а именно наличие двухфакторной аутентификации.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;включаем-otp&quot;&gt;Включаем OTP&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На самом деле всё очень просто:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;На телефон качаем приложение &lt;strong&gt;free otp&lt;/strong&gt; или &lt;strong&gt;google authentificator&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Добавляем токен &lt;strong&gt;OTP&lt;/strong&gt; для пользователя&lt;/li&gt;
  &lt;li&gt;Во &lt;em&gt;FreeIpa&lt;/em&gt; для конкретного пользователя активируем галочку &lt;strong&gt;Двухфакторная аутентификация (пароль + OTP)&lt;/strong&gt; или глобально&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавляем-токен-otp-для-пользователя&quot;&gt;Добавляем токен OTP для пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала пользователь может сам добавить себе токен. Для этого нужно авторизоваться в web интерфейсе и перейти во вкладку &lt;strong&gt;Токены OTP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-15_15-55.png&quot; alt=&quot;freeipa otp add&quot; /&gt;&lt;/p&gt;

&lt;p&gt;И второй вариант — это когда администратор добавляет &lt;strong&gt;Токены OTP&lt;/strong&gt; для другого пользователя.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-15_15-57.png&quot; alt=&quot;freeipa otp add&quot; /&gt;&lt;/p&gt;

&lt;p&gt;После чего выйдет всплывающее &lt;strong&gt;окно с qr кодом&lt;/strong&gt;, который нужно отсканировать приложением r&lt;strong&gt;ee otp&lt;/strong&gt; или &lt;strong&gt;google authentificator&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;активируем-двухфакторную-аутентификацию-web&quot;&gt;Активируем Двухфакторную аутентификацию (Web)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Редактируем конкретного пользователя и выставляем галочку &lt;strong&gt;Двухфакторная аутентификация (пароль + OTP)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-15_16-01.png&quot; alt=&quot;freeipa enable otp &quot; /&gt;&lt;/p&gt;

&lt;p&gt;Для того, чтобы задать глобально а не для конкретного пользователя переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;IPA-сервер &amp;gt; Конфигурация&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-15_16-04.png&quot; alt=&quot;freeipa enable otp &quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;активируем-двухфакторную-аутентификацию-cli&quot;&gt;Активируем Двухфакторную аутентификацию (Cli)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для конкретного пользователя:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ipa user-mod ivanov --user-auth-type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;otp
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы задать глобально:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ipa config-mod --user-auth-type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;otp
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 15 Sep 2023 06:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/freeipa-otp-enable</link>
        <guid isPermaLink="true">http://www.tipoit.kz/freeipa-otp-enable</guid>
        
        <category>linux</category>
        
        <category>freeipa</category>
        
        <category>otp</category>
        
        <category>2fa</category>
        
        
      </item>
    
      <item>
        <title>Linux - Пользователи и группы</title>
        <description>&lt;p&gt;Для того чтобы идентифицировать физического человека в ОС используются пользователи, в основном это конечно делается из соображения безопасности.&lt;/p&gt;

&lt;p&gt;Пользователи имеют имя пользователя (user name) для идентификации человека, и в идеале должно содержать настоящее имя человека. Внутри ОС ядро идентифицирует пользователя по уникальному идентификатору (&lt;code class=&quot;highlighter-rouge&quot;&gt;unique identificator&lt;/code&gt;) - &lt;code class=&quot;highlighter-rouge&quot;&gt;UID&lt;/code&gt;. Если пользователь ОС используется человеком, то необходимо также задать пароль пользователя, благодаря которому человек идентифицирует себя.&lt;/p&gt;

&lt;p&gt;Аккаунт пользователя — это фундаментальная вещь для обеспечения безопасности ОС. Каждый процесс в системе запускается под своим пользователем, так правильно. Каждый файл имеет своего владельца, что обеспечивает сохранность файла. Процесс запущенный под определённым пользователем будет иметь доступ только к тем файлам, к которым он имеет доступ.&lt;/p&gt;

&lt;p&gt;О том как управлять пользователями можно почитать &lt;a href=&quot;https://tipoit.kz/linux-user-control&quot;&gt;тут&lt;/a&gt;.
О том как управлять группами можно почитать &lt;a href=&quot;https://tipoit.kz/linux-group-control&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;типы-пользователей-ос-&quot;&gt;Типы пользователей ОС 👨‍💻&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Пользователи в основном делятся на 3 основных типа:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Superuser - для администрирования ОС. По умолчанию им является пользователь &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt; с уникальным &lt;code class=&quot;highlighter-rouge&quot;&gt;UID 0&lt;/code&gt;. У него все права в ОС которые только существуют, поэтому в идеале не стоит работать под ним и тем более раздавать пароль от него всем подряд.&lt;/li&gt;
  &lt;li&gt;System user - пользователи, предназначенные для запуска сервисов (daemons). Каждый сервис должен запускаться под своим пользователем, и ни в коем случае не должен быть запущен от &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;. Также эти пользователи не должны иметь права авторизации в ОС (&lt;code class=&quot;highlighter-rouge&quot;&gt;/sbin/nologin&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Regular user - обычные пользователи ОС, под которыми вы сидите каждый день.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;uid-&quot;&gt;UID 🆔&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для просмотра информации о текущем пользователе используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;id username&lt;/code&gt;. Где мы как раз-таки увидим наш &lt;code class=&quot;highlighter-rouge&quot;&gt;UID&lt;/code&gt;, для обычного пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;UID&lt;/code&gt; начинается с 1000.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;id admin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;uid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(admin)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(admin)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;groups=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(admin),&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(wheel)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;context=unconfined_u:unconfined_r:unconfined_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1023&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы посмотреть владельца файла можно использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;ls -la file&lt;/code&gt;, в выводе в 3 колонке будет имя владельца файла.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls -la /tmp/stderr.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rw-rw-r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;46&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/stderr.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также мы говорили о том, что каждый процесс запускается от своего пользователя, для просмотра этого используется команда ```ps -au``.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ps -au
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%CPU&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%MEM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VSZ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RSS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;STAT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;START&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TIME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;COMMAND&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;916&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13656&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tty&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ss+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/sbin/agetty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-o&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-p&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\u&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--noclear&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tty&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;145378&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24120&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2232&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pts/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ss&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-bash&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;154568&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55808&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3588&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pts/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;R+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;46&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-au&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В графе &lt;code class=&quot;highlighter-rouge&quot;&gt;USER&lt;/code&gt; мы видим пользователя, от которого запущен процесс, т.е. владельца процесса. Но само ядро привязывает пользователя к процессу по &lt;code class=&quot;highlighter-rouge&quot;&gt;UID&lt;/code&gt;. Соответственно где-то в системе хранится сопоставление имени пользователя с его &lt;code class=&quot;highlighter-rouge&quot;&gt;UID&lt;/code&gt; и находится это в файле /etc/passwd.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;etcpasswd-&quot;&gt;/etc/passwd 🔒&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждая строка хранит информацию о пользователе.  Каждая строка разбита на 7 колонок.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-11-02_10-55.png&quot; alt=&quot;/etc/passwd line&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Имя пользователя&lt;/li&gt;
  &lt;li&gt;Пароль пользователя, хранящийся в зашифрованном виде. Хранится в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/shadow&lt;/code&gt;. Это поле всегда имеет значение &lt;code class=&quot;highlighter-rouge&quot;&gt;х&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;UID&lt;/code&gt; для пользователя&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;GID&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; группы основной&lt;/li&gt;
  &lt;li&gt;Полное имя пользователя&lt;/li&gt;
  &lt;li&gt;Домашняя директория пользователя&lt;/li&gt;
  &lt;li&gt;Оболочка по умолчанию&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;etcshadow-&quot;&gt;/etc/shadow 🔑&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В этом файле хранятся зашифрованные значения паролей для каждого пользователя и уточняющая информация.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-15_15-05.png&quot; alt=&quot;/etc/shadow line&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Имя пользователя&lt;/li&gt;
  &lt;li&gt;Пароль&lt;/li&gt;
  &lt;li&gt;Через сколько дней можно сменить пароль&lt;/li&gt;
  &lt;li&gt;Дней до смены пароля&lt;/li&gt;
  &lt;li&gt;Дней до предупреждения пользователя о смене пароля&lt;/li&gt;
  &lt;li&gt;Дней до истечения срока действия аккаунта&lt;/li&gt;
  &lt;li&gt;Зарезервировано для возможного использования в будущем&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;среда-окружения-&quot;&gt;Среда окружения 🧖🏿&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый пользователь может изменять свои настройки по умолчанию. Например, можно задать новый umask или прокинуть какие-то переменные в своё окружение. Для этого пользователь может использовать файл ~/.bash_profile. Символ ~ обозначает домашнюю директорию пользователя /home/user.&lt;/p&gt;

&lt;p&gt;Но также системный администратор может выставить настройки для всех пользователей используя директорию /etc/profile.&lt;/p&gt;

&lt;p&gt;Также администратор ОС может использовать директорию /etc/skel. Все файлы находящиеся здесь будут скопированы в домашнюю директорию новых пользователей, при их создании.&lt;/p&gt;

&lt;h2 id=&quot;теперь-немного-про-группы-&quot;&gt;Теперь немного про группы 👯&lt;/h2&gt;

&lt;p&gt;Группы — это совокупность пользователей, и служат они в основном для раздачи прав на файлы многим пользователям. Т.е. группа объединяет нескольких пользователей для дальнейших манипуляций.&lt;/p&gt;

&lt;p&gt;Как и пользователи группы имеют свой собственный &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt;- &lt;code class=&quot;highlighter-rouge&quot;&gt;GID&lt;/code&gt; и также имеют своё имя группы (&lt;code class=&quot;highlighter-rouge&quot;&gt;Group name&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Также, как и пользователи имеют свой файл с сопоставлением имени группы и &lt;code class=&quot;highlighter-rouge&quot;&gt;GID&lt;/code&gt;. Этот файл находится по пути &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/group&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;etcgroup-&quot;&gt;/etc/group 🪄&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-11-02_11-14.png&quot; alt=&quot;/etc/group line&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Имя группы&lt;/li&gt;
  &lt;li&gt;Пароль группы, всегда имеет значение х&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;GID&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; группы&lt;/li&gt;
  &lt;li&gt;Список пользователей которые входят в группу разделённых запятыми&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;основные-и-дополнительные-группы-primary-and-supplementary-&quot;&gt;Основные и дополнительные группы (Primary and Supplementary) 🧙&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый пользователь имеет только одну основную группу. Это группа становится группой владельцем для создаваемых файлов от имени пользователя.&lt;/p&gt;

&lt;p&gt;По умолчанию, когда вы создаёте пользователя также и создаётся основная группа с одноименным названием. Создаваемая группа будет для пользователя основной, и по умолчанию только этот пользователь будет состоять в ней (&lt;code class=&quot;highlighter-rouge&quot;&gt;User Private Group&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Пользователи также могут иметь и дополнительные группы. Кто и в каких дополнительных группах состоит записывается в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/group&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы посмотреть в каких группах состоит пользователь можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; которую мы уже рассматривали выше или &lt;code class=&quot;highlighter-rouge&quot;&gt;groups&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 14 Sep 2023 06:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-users-and-groups</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-users-and-groups</guid>
        
        <category>linux</category>
        
        <category>users</category>
        
        <category>groups</category>
        
        
      </item>
    
      <item>
        <title>Linux - Sudo vs su</title>
        <description>&lt;p&gt;В &lt;em&gt;Linux&lt;/em&gt; существуют 3 типа пользователей: &lt;strong&gt;root&lt;/strong&gt;, &lt;strong&gt;стандартный пользователи (Regular user)&lt;/strong&gt; и сервисы (системные).&lt;/p&gt;

&lt;p&gt;Большинство ОС имеют своих суперпользователей, т.е. пользователя который наделён максимальными правами в ОС. Во многих ОС семейства &lt;code class=&quot;highlighter-rouge&quot;&gt;Linux&lt;/code&gt; этот пользователь &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;. Для установки приложений, изменения разрешений, создания пользователей, изменения системных файлов пользователи должны повысить свои привилегии до &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Пользователь с наивысшими правами у нас &lt;strong&gt;root&lt;/strong&gt;, как Администратор в &lt;em&gt;Windows&lt;/em&gt;. Считается дурным тоном заходить на сервер под этим пользователем так как пользователь имеет неограниченные права. По соображения иб лучше заходить под стандартным пользователем. Если пользователь root будет скомпрометированным, то у вас будут очень большие проблемы.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;права-стандартного-пользователя&quot;&gt;Права стандартного пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как вы поняли стандартный пользователь не имеет по умолчанию всех прав для администрирования. Тогда логичный вопрос: Как мне управлять сервером? После того как вы зашли под этим пользователем (именная учетная запись) выполняем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;su - root&lt;/code&gt; и вводим пароль от &lt;strong&gt;root&lt;/strong&gt;. После чего вы уже не стандартный пользователь, а &lt;strong&gt;root&lt;/strong&gt;. Для того, чтобы проверить кто вы, можно выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;whoami&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Вы заметили, что я конкретного написал &lt;code class=&quot;highlighter-rouge&quot;&gt;su - root&lt;/code&gt;, т.е. мы используем &lt;strong&gt;su&lt;/strong&gt; когда хотим переключится в другого пользователя. Обязательно конечно знать пароль пользователя, но если это делать под &lt;strong&gt;root&lt;/strong&gt;, то не надо.&lt;/p&gt;

&lt;p&gt;Но с таким подходом всё ещё остаются несколько проблем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Сложно понять потом кто и что выполнял на сервере&lt;/li&gt;
  &lt;li&gt;Мы никак не можем разграничить права. Любой, у кого есть пароль от root может сделать что угодно с сервером.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;sudo&quot;&gt;Sudo&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;И тут есть 2 выхода:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Добавить пользователя в группу &lt;strong&gt;wheel&lt;/strong&gt;, что даст ему возможность выполнять команды с повышением прав. Тут как минимум у вас в логах будет проще отыскать кто именно перезапустил сервис или сервер. Чтобы выполнять команду с повышенными правами нужно будет использовать &lt;strong&gt;sudo&lt;/strong&gt;, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo cat /var/log/secure&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Вторым этапом можно обозначить какие именно команды пользователь может выполнять. Делается это в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/sudoers&lt;/code&gt;, но об этом в другой статье.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;пример&quot;&gt;Пример&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Создадим стандартного пользователя &lt;strong&gt;user&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Попробуем выполнить что-то&lt;/li&gt;
  &lt;li&gt;Добавим его в &lt;strong&gt;wheel&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Попробуем выполнить что-то с использованием &lt;strong&gt;sudo&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;root@c-stream-9-vm1 ~]# useradd user
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;root@c-stream-9-vm1 ~]# passwd user
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;root@c-stream-9-vm1 ~]# su - user
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;user@c-stream-9-vm1 ~]&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;cat /var/log/secure
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;cat:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/log/secure:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;root@c-stream-9-vm1 ~]# usermod -aG wheel user
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;root@c-stream-9-vm1 ~]# su - user
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;user@c-stream-9-vm1 ~]&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo cat /var/log/secure
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Aug&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;53&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-stream&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;su&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2671889&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pam_unix(su-l:session):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;opened&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin(uid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;переключение-пользователя&quot;&gt;Переключение пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для переключения пользователя без выхода из системы используется команды &lt;code class=&quot;highlighter-rouge&quot;&gt;su - username&lt;/code&gt;, этакая смена пользователя как в &lt;code class=&quot;highlighter-rouge&quot;&gt;Winodws&lt;/code&gt;.  Если вы делаете это под стандартным пользователем то вам нужно будет ввести пароль нужного вам пользователя, если вы выполняете под root то пароль вводить не надо.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;su - root
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если ввести &lt;code class=&quot;highlighter-rouge&quot;&gt;su&lt;/code&gt; без имени пользователя, то по умолчанию вы пытаетесь логиниться под &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;su-vs-su--&quot;&gt;su vs su -&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Запомните раз и навсегда что правильно использовать команды &lt;code class=&quot;highlighter-rouge&quot;&gt;su&lt;/code&gt; со знаком &lt;code class=&quot;highlighter-rouge&quot;&gt;-&lt;/code&gt;. Разница в том, что когда вы используете &lt;code class=&quot;highlighter-rouge&quot;&gt;su -&lt;/code&gt; то подгружается окружение конечного пользователя, а просто &lt;code class=&quot;highlighter-rouge&quot;&gt;su&lt;/code&gt; оставляет окружение текущего пользователя.&lt;/p&gt;

&lt;p&gt;В примере ниже мы переключаемся в пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt; но при этом остаемся в окружении пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin@vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;su&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;su:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failure&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin@vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;su&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root@vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-la&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;total&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwx------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;115&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;58&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drwxr-xr-x.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Jun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3588&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bash_history&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Jul&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2020&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bash_logout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;141&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Jul&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2020&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bash_profile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;395&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;58&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bashrc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.lesshst&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2612&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;58&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.viminfo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В примере ниже мы переключаемся в пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt; по правильному.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin@vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;su&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;login:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Tue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pts/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root@vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-la&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;total&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dr-xr-x---.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;151&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dr-xr-xr-x.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;224&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;anaconda-ks.cfg&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;314&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bash_history&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bash_logout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;176&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bash_profile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;176&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.bashrc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.cshrc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;129&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.tcshrc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-------.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2296&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.viminfo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;конфигурация-sudo&quot;&gt;Конфигурация sudo&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я говорил о том, что вы можете задавать список разрешённых команд &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt; для пользователя. Правило по умолчанию находится в &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/sudoers&lt;/code&gt; и разрешает выполнение всех команд. Делает это строка &lt;code class=&quot;highlighter-rouge&quot;&gt;%wheel  ALL=(ALL)       ALL&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;%wheel&lt;/code&gt;  ALL=(ALL) ALL - группа к которой применяется правило&lt;/li&gt;
  &lt;li&gt;%wheel  &lt;code class=&quot;highlighter-rouge&quot;&gt;ALL&lt;/code&gt;=(ALL) ALL - означает, что данное правило применяется ко всем хостам&lt;/li&gt;
  &lt;li&gt;%wheel  ALL=&lt;code class=&quot;highlighter-rouge&quot;&gt;(ALL)&lt;/code&gt; ALL - означает, что пользователь &lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt; может запускать команды от лица всех пользователей&lt;/li&gt;
  &lt;li&gt;%wheel  ALL=(ALL) &lt;code class=&quot;highlighter-rouge&quot;&gt;ALL&lt;/code&gt; - означает, что данные правила применяются всем командам&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Добавление новых правил рекомендуется выполнять добавлением нового файла в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/sudoers.d&lt;/code&gt;. Например, для добавления прав пользователю &lt;code class=&quot;highlighter-rouge&quot;&gt;admin2&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo visudo /etc/sudoers.d/admin2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ALL=(ALL)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/bin/ls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo su - admin2
sudo ls -la
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;sudo-без-пароля&quot;&gt;Sudo без пароля&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы уже заметили, что когда мы выполняем команды &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt; у нас запрашивается пароль и если вас это очень сильно беспокоит, то запрос пароля можно и отключить, но только это не рекомендуется делать. Для этого добавляем &lt;code class=&quot;highlighter-rouge&quot;&gt;NOPASSWD&lt;/code&gt; перед командами.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo visudo /etc/sudoers.d/admin2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ALL=(ALL)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOPASSWD:/bin/ls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo su - admin2
sudo ls -la
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 14 Sep 2023 06:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-sudo-vs-su</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-sudo-vs-su</guid>
        
        <category>linux</category>
        
        <category>bash</category>
        
        <category>sudo</category>
        
        <category>su</category>
        
        
      </item>
    
      <item>
        <title>Linux - man, help, документация</title>
        <description>&lt;p&gt;Знакомая ситуация, когда вы знаете саму команду, но вот не помните её аргументы? Думаю, вполне распространённая ситуация. В такой ситуации у вас один выход - обратиться к команде man.&lt;/p&gt;

&lt;p&gt;Один из источников документации, который встроен в ОС Linux по умолчанию называется &lt;code class=&quot;highlighter-rouge&quot;&gt;system manual pages&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;man pages&lt;/code&gt;. Эти страницы идут совместно с устанавливаемыми пакетами и описывают все возможности приложения. Доступ к этим страницам документации как раз осуществляется при помощи утилиты &lt;code class=&quot;highlighter-rouge&quot;&gt;man&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Команда man всю документацию для той или иной команды. Для того чтобы вывести инструкцию для &lt;strong&gt;ls&lt;/strong&gt; мы вводим &lt;code class=&quot;highlighter-rouge&quot;&gt;man ls&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;обновление-инструкций&quot;&gt;Обновление инструкций&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рекомендую время от времени выполнять команду &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo mandb&lt;/code&gt;, которая обновляет документацию. Особенно если вдруг вы не нашли man для команды.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;разделы-документаций&quot;&gt;Разделы документаций&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сами страницы документации произошли из документации разработчиков Linux (Linux Programmer’s Manual), которые были огромными и делились на разделы.&lt;/p&gt;

&lt;p&gt;Некоторые команды имеют несколько разделов документаций , номер раздела пишется сверху в скобках рядом с самой командой &lt;strong&gt;LS(1)&lt;/strong&gt;. Для того чтобы получить эти номера мы можем выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;man -f command.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Если при выполнении команды вы получаете &lt;strong&gt;nothing appropriate&lt;/strong&gt; выполните &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo mandb&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man -f ip
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;manipulate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;routing,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;network&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;devices,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;interfaces&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tunnels&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Вот список всех разделов:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;# 1&lt;/strong&gt;👤 : Пользовательские команды&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 2&lt;/strong&gt;🌌 : Системные команды&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 3&lt;/strong&gt;📁 : Библиотеки&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 4&lt;/strong&gt;🧃 : Специальные файлы&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 5&lt;/strong&gt;📃 : Форматы файлов и соглашения&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 6&lt;/strong&gt;🎮 : Игры&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 7&lt;/strong&gt;🗞️ : Разное&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 8&lt;/strong&gt;🧸 : Команды системного администрирования (обычно только для root)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;# 9&lt;/strong&gt;⚗️ : Подпрограммы ядра&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для того чтобы вызвать документацию именно по команде нам нужно указать раздел №1.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man 1 passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы вызвать документацию по файлу /etc/passwd нам нужно указать раздел №5.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man 5 passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;просмотр-по-всем-категориям&quot;&gt;Просмотр по всем категориям&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы видите, что у команды несколько категорий и вы хотите просмотреть их сразу все одной командой можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;man -a command&lt;/code&gt;. Сперва выведется инструкция для первой категории, после выхода вам будет предложено просмотреть следующую категорию (&lt;strong&gt;ENTER&lt;/strong&gt;).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man -a passwd
q
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;--Man--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;next:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;passwd(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ssl)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(return)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;skip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(Ctrl-D)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;quit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(Ctrl-C)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;поиск-по-ключевым-словам&quot;&gt;Поиск по ключевым словам&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите узнать какие команды вы можете использовать для своей задачи можно поискать определённое слово в инструкциях man выполнив &lt;code class=&quot;highlighter-rouge&quot;&gt;man -k keyword&lt;/code&gt;. Например, я хочу задать пароль пользователя:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man -k pass
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;lpasswd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Change&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;openssl-passwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ssl)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;compute&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hashes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pam_localuser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;listed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/passwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;passwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user's&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда apropos pass выполнить тоже самое, пользуйтесь той которая больше нравится.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;навигация-в-man-️&quot;&gt;Навигация в man ⌨️&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При вызове команды &lt;code class=&quot;highlighter-rouge&quot;&gt;man&lt;/code&gt; вы получаете новое окно, по которому также нужно перемещаться, используя горячие клавиши либо команды.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Команда&lt;/th&gt;
      &lt;th&gt;Результат&lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Spacebar (пробел)&lt;/td&gt;
      &lt;td&gt;Пролистать вниз на одну страницу&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PageDown&lt;/td&gt;
      &lt;td&gt;Пролистать вниз на одну страницу&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PageUp&lt;/td&gt;
      &lt;td&gt;Пролистать вверх на одну страницу&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DownArrow&lt;/td&gt;
      &lt;td&gt;Пролистать вниз на одну линию&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;UpArrow&lt;/td&gt;
      &lt;td&gt;Пролистать вверх на одну линию&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;D&lt;/td&gt;
      &lt;td&gt;Пролистать вниз на половину страницы&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;U&lt;/td&gt;
      &lt;td&gt;Пролистать вверх на половину страницы&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;/string&lt;/td&gt;
      &lt;td&gt;Поиск определённого слова (string) по странице ниже. Есть поддержка регулярных выражений&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;N&lt;/td&gt;
      &lt;td&gt;Переход к следующему совпадению&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Shift+N&lt;/td&gt;
      &lt;td&gt;Переход к предыдущему совпадению&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;G&lt;/td&gt;
      &lt;td&gt;Переход в начало документации&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Shift+G&lt;/td&gt;
      &lt;td&gt;Переход в конец документации&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Q&lt;/td&gt;
      &lt;td&gt;Выход&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;структура-man&quot;&gt;Структура man&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Документация по каждому разделу также делиться на категории, наличие некоторых из них зависит от пакета. Например, у одной команды могут быть примеры, а у другой нет.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Заголовок&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;NAME&lt;/td&gt;
      &lt;td&gt;Имя команды или исполняемого файла&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SYNOPSIS&lt;/td&gt;
      &lt;td&gt;Строка со списком всех возможных атрибутов команды&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DESCRIPTION&lt;/td&gt;
      &lt;td&gt;Описание для чего используется команда&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;OPTIONS&lt;/td&gt;
      &lt;td&gt;Описание опций, которая может принимать команда&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;FILES&lt;/td&gt;
      &lt;td&gt;Список файлов и директорий, относящихся к команде&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BUGS&lt;/td&gt;
      &lt;td&gt;Собственно известные баги&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SEE ALSO&lt;/td&gt;
      &lt;td&gt;Дополнительные &lt;code class=&quot;highlighter-rouge&quot;&gt;man pages&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;EXAMPLES&lt;/td&gt;
      &lt;td&gt;Собственно примеры использования команды&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AUTHOR&lt;/td&gt;
      &lt;td&gt;Автор документации&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-11-01_17-06.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;онлайн-документация&quot;&gt;Онлайн документация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вам вдруг чем-то не подошёл &lt;strong&gt;man&lt;/strong&gt;, то вы может просмотреть инструкции в интернете.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://man7.org/&quot;&gt;man7.org&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tldp.org/&quot;&gt;tldp.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;usrsharedoc&quot;&gt;/usr/share/doc&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Еще одно место где вы можете просмотреть информацию о команде это директория &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/share/doc&lt;/code&gt;. В этой директории вы можете найти &lt;strong&gt;changelog&lt;/strong&gt; по команде, узнать кто автор и также почитать инструкцию (&lt;strong&gt;FAQ&lt;/strong&gt;).&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;find  /usr/share/doc/ -name FAQ
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/doc/bash/FAQ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/doc/zlib/FAQ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/doc/curl/FAQ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;more /usr/share/doc/curl/FAQ
cat /usr/share/doc/passwd/AUTHORS
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;используем-help&quot;&gt;Используем help&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также каждая команда имеет атрибут &lt;code class=&quot;highlighter-rouge&quot;&gt;--help&lt;/code&gt;, которым вы также можете воспользоваться для просмотра документации.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls --help | less
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;whatis&quot;&gt;whatis&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы также можете просмотреть для чего именно предназначена та или иная команда, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;whatis command&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;whatis ls
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ls&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;не-хватает-man&quot;&gt;Не хватает man?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Есть вторая команда, которая делает всё тоже самое, но только иногда может выдавать немного больше информации, но только иногда. Это команда &lt;strong&gt;info&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;info passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 14 Sep 2023 06:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-man-help</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-man-help</guid>
        
        <category>linux</category>
        
        <category>man</category>
        
        <category>help</category>
        
        <category>whatis</category>
        
        
      </item>
    
      <item>
        <title>Sonatype Nexus - Прокси для ansible galaxy</title>
        <description>&lt;p&gt;Для начала начнём с того, что по умолчанию прокси для &lt;strong&gt;ansible&lt;/strong&gt; нету. Но есть неофициальный плагин по &lt;a href=&quot;https://github.com/l3ender/nexus-repository-ansiblegalaxy/&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Скачиваем файл с расширением &lt;code class=&quot;highlighter-rouge&quot;&gt;.kar&lt;/code&gt; по &lt;a href=&quot;https://github.com/l3ender/nexus-repository-ansiblegalaxy/releases&quot;&gt;ссылке&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Копируем этот файл в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;deploy&lt;/code&gt;, которая находится в корне директории для &lt;strong&gt;nexus&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;nexus&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Добавляем прокси репозиторий&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://github.com/l3ender/nexus-repository-ansiblegalaxy/releases/download/0.3.0/nexus-repository-ansiblegalaxy-0.3.0-bundle.kar
sudo cp nexus-repository-ansiblegalaxy-0.3.0-bundle.kar /var/lib/nexus/deploy
sudo systemctl restart nexus
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-09-12_15-09.png&quot; alt=&quot;nexus ansible proxy&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы скачать пакеты через прокси используем опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;-s&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-galaxy collection install community.general -s https://nexus.example.lan:8443/repository/ansible-galaxy/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Или настроить репозиторий глобально:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/ansible/ansible.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;galaxy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server_list&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;example_lan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;galaxy_server.example_lan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;url=https://nexus.example.lan:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8443&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/repository/ansible-galaxy/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 13 Sep 2023 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/nexus-ansible-repo</link>
        <guid isPermaLink="true">http://www.tipoit.kz/nexus-ansible-repo</guid>
        
        <category>ansible</category>
        
        <category>ci/cd</category>
        
        <category>nexus</category>
        
        
      </item>
    
      <item>
        <title>Linux - Что такое LVM</title>
        <description>&lt;p&gt;Использование &lt;strong&gt;LVM&lt;/strong&gt; облегчает конфигурирование дискового пространства. Если нужно добавить больше дискового пространства в &lt;strong&gt;LVM&lt;/strong&gt;, достаточно расширить ваш &lt;strong&gt;LVM&lt;/strong&gt; раздел (&lt;strong&gt;LVM volume&lt;/strong&gt;) за счет свободного места в группе &lt;strong&gt;LVM&lt;/strong&gt; (&lt;strong&gt;LVM group&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Также если вдруг вы заметите что один их ваших физических дисков в &lt;strong&gt;LVM group&lt;/strong&gt; выходит из строя вы можете добавить новый физический жёсткий диск в &lt;strong&gt;LVM group&lt;/strong&gt; и перенести данные на новый жесткий диск. В целом можно сделать это и без &lt;strong&gt;LVM&lt;/strong&gt; копируя всё на внешний носитель, после заменить диск и вернуть все данные назад. Но в таком случае вам придётся останавливать сервисы, которые пишут на этот диск.&lt;/p&gt;

&lt;p&gt;Еще один плюс — это возможность объединить большое количество жестких дисков в один. Например, у вас есть 4 диска по 2ТБ и вам надо отдать их все под базы данных при этом гораздо проще будет если бд будут хранится на одном разделе, а не на 4. Вот в такой ситуации вы объединяете все 4 диска и получаете раздел размером в 8 ТБ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LVM&lt;/strong&gt; даёт возможность делать snapshots. Что означает что вы можете сделать снимок раздела на определённый момент и уже по необходимости откатится к нему в будущем. Особенно полезно для всяких экспериментов.&lt;/p&gt;

&lt;p&gt;Также в &lt;strong&gt;LVM&lt;/strong&gt; реализованы все уровни RAID, но считается что это не совсем прямое предназначение &lt;strong&gt;LVM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/lvm/LVM-base.png&quot; alt=&quot;lvm base scheme&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;pdphysical-devices&quot;&gt;PD/Physical devices&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Physical devices&lt;/strong&gt; - это физические устройства, которые предоставляются для &lt;strong&gt;LVM group&lt;/strong&gt; и где хранятся данные. Под &lt;strong&gt;Physical devices&lt;/strong&gt; подразумевается разделы жд, физические жд, &lt;code class=&quot;highlighter-rouge&quot;&gt;RAID массивы&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;SAN устройства&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Устройства должны быть инициализированы как &lt;strong&gt;LVM Physical volume&lt;/strong&gt; чтобы их можно было использовать в &lt;strong&gt;LVM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/lvm/PD.png&quot; alt=&quot;Physical devices&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;pvphysical-volumes-физические-тома&quot;&gt;PV/Physical volumes (Физические тома)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Physical volumes&lt;/strong&gt; - это базовое физическое хранилище используемое в &lt;strong&gt;LVM&lt;/strong&gt;. Первым делом нужно инициализировать ваше устройство хранения данных как &lt;strong&gt;Physical volume&lt;/strong&gt; для использования в &lt;strong&gt;LVM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Инструменты &lt;strong&gt;LVM&lt;/strong&gt; сегментируют &lt;strong&gt;Physical volumes&lt;/strong&gt; на &lt;strong&gt;физические экстенты (Physical extends)&lt;/strong&gt; которые представляют из себя небольшие фрагменты данных, которые действуют как минимальный блок хранения.&lt;/p&gt;

&lt;p&gt;По сути является специальной файловой системой для &lt;strong&gt;LVM&lt;/strong&gt;, где помимо прочего хранятся метаданные указывающие к какой &lt;strong&gt;VG&lt;/strong&gt; относится устройство.&lt;/p&gt;

&lt;p&gt;У каждого &lt;strong&gt;Physical volume&lt;/strong&gt; есть свой супер-блок где хранятся метаданные о &lt;strong&gt;VG&lt;/strong&gt;, который находится в начале диска.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/lvm/PV.png&quot; alt=&quot;Physical volumes&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;vgvolume-groups-группа-томов&quot;&gt;VG/Volume groups (Группа томов)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Volume groups&lt;/strong&gt; - это пулы хранения (Storage pools), состоящие из одного или множества &lt;strong&gt;Physical volume&lt;/strong&gt;. Т.е. можно сказать что &lt;strong&gt;Volume group&lt;/strong&gt; то же самое что и &lt;code class=&quot;highlighter-rouge&quot;&gt;LUN&lt;/code&gt; в схд, или одно общее единое пространство. Один &lt;strong&gt;Physical volume&lt;/strong&gt; может быть назначен только одной &lt;strong&gt;Volume group&lt;/strong&gt;. Может состоять из любого количества &lt;strong&gt;Physical Volumes&lt;/strong&gt; и также расширятся в будущем. Хранит метаданные о том в каком &lt;strong&gt;PV&lt;/strong&gt; находятся &lt;strong&gt;Physical extends&lt;/strong&gt; и в каком &lt;strong&gt;Logical Volume&lt;/strong&gt; находятся &lt;strong&gt;Logical extends&lt;/strong&gt; и сопоставляет их.&lt;/p&gt;

&lt;p&gt;Если разбирать преимущества &lt;strong&gt;LVM&lt;/strong&gt; которые я описывал ранее можно сказать что как раз благодаря &lt;strong&gt;VG&lt;/strong&gt; мы и получаем 4 диска объединённые в один, размером 8ТБ.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/lvm/VG.png&quot; alt=&quot;Volume groups&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;lvlogical-volumes-логические-тома&quot;&gt;LV/Logical Volumes (Логические тома)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Logical Volumes&lt;/strong&gt; - это набор из &lt;strong&gt;Logical extends&lt;/strong&gt;, который соответствует &lt;strong&gt;Physical extends&lt;/strong&gt; и имеют одинаковый размер. &lt;strong&gt;Logical extends&lt;/strong&gt; сопоставляются с &lt;strong&gt;Physical extends&lt;/strong&gt; и хранятся там же и не обязательно что  все &lt;strong&gt;Logical extends&lt;/strong&gt; одного &lt;strong&gt;LV&lt;/strong&gt; хранятся на &lt;strong&gt;Physical extends&lt;/strong&gt; одного &lt;strong&gt;PV&lt;/strong&gt;. Также можно расширять &lt;strong&gt;LV&lt;/strong&gt; благодаря наличию свободны &lt;strong&gt;Physical extends&lt;/strong&gt; в &lt;strong&gt;PV&lt;/strong&gt;. Каждый кусок &lt;strong&gt;Logical extends&lt;/strong&gt; можно перенести на другой &lt;strong&gt;Physical extends&lt;/strong&gt;, как раз имеется в виду ситуация с заменой диска не останавливая работу приложений.&lt;/p&gt;

&lt;p&gt;Получается при использовании обычных разделов вы не можете создать раздел который начинается в начале диска, потом прерывается на середине и потом снова продолжается в конце. В &lt;strong&gt;LVM&lt;/strong&gt; же благодаря &lt;strong&gt;Logical extends&lt;/strong&gt; и &lt;strong&gt;Physical extends&lt;/strong&gt; такое возможно.&lt;/p&gt;

&lt;p&gt;Именно их мы и монтируем в ОС как разделы, создаются они из пространства &lt;strong&gt;VG&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/lvm/LV.png&quot; alt=&quot;Logical Volumes&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создаём-lvm&quot;&gt;Создаём LVM&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;После всей теории мы наконец переходим к практике.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;подготовка-pd&quot;&gt;Подготовка PD&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя &lt;code class=&quot;highlighter-rouge&quot;&gt;parted&lt;/code&gt;, о котором я писал &lt;a href=&quot;https://www.tipoit.kz/linux-managing-partitiones-with-parted&quot;&gt;тут&lt;/a&gt; создаём новые разделы для &lt;strong&gt;LVM&lt;/strong&gt;. При использовании раздела для &lt;strong&gt;LVM&lt;/strong&gt; тип раздела должен быть &lt;strong&gt;Linux LVM&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выводим список всех дисков
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted -l
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём таблицу разделов и раздел&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sdd mklabel gpt
sudo parted /dev/sde mklabel gpt
sudo parted /dev/sdf mklabel gptsudo

sudo parted  /dev/sdd mkpart primary 1049kB 3220MB
sudo parted  /dev/sde mkpart primary 1049kB 3220MB
sudo parted  /dev/sdf mkpart primary 1049kB 3220MB

sudo parted /dev/sdd print
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3220&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3219&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sdd &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;1 lvm on
sudo parted /dev/sde &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;1 lvm on
sudo parted /dev/sdf &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;1 lvm on

sudo parted /dev/sdd print
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3220&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3219&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lvm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;set 1 lvm on&lt;/code&gt; - это просто маркер чтобы пользователю ОС было понятно, что это &lt;strong&gt;LVM диск&lt;/strong&gt;. Ядро же понимает, что это &lt;strong&gt;LVM&lt;/strong&gt; благодаря типу раздела в таблице разделов. Например Коды типов разделов для  &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C&quot;&gt;mbr&lt;/a&gt;  и GUID для &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2_GUID&quot;&gt;gpt&lt;/a&gt;. Но при использовании &lt;strong&gt;LVM&lt;/strong&gt; тип раздела прописывается в супер-блоке самого раздела и даже если в &lt;code class=&quot;highlighter-rouge&quot;&gt;MBR&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;GPT&lt;/code&gt; стоит другой тип, то ядро выберет тип, который в супер-блоке, т.е. &lt;strong&gt;LVM&lt;/strong&gt;. Про &lt;code class=&quot;highlighter-rouge&quot;&gt;MBR&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;GPT&lt;/code&gt; я также писал &lt;a href=&quot;https://www.tipoit.kz/linux-mbr-vs-gpt&quot;&gt;ранее&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-pv&quot;&gt;Создаём PV&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого используем &lt;code class=&quot;highlighter-rouge&quot;&gt;pvcreate&lt;/code&gt; и указываем наши &lt;strong&gt;PD&lt;/strong&gt;. Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;pvcreate&lt;/code&gt; делит наш &lt;strong&gt;PV&lt;/strong&gt; на &lt;strong&gt;Physical extends&lt;/strong&gt;, по умолчанию блоки по 4Мб.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo pvcreate /dev/sdd1 /dev/sde1 /dev/sdf1
sudo pvdisplay
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-vg&quot;&gt;Создаём VG&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vgcreate&lt;/code&gt; где указываем название группы и наши &lt;strong&gt;PV&lt;/strong&gt;. Если делать аналогии, то по сути вы получаете после &lt;code class=&quot;highlighter-rouge&quot;&gt;vgcreate&lt;/code&gt; один большой HDD.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vgcreate VG01 /dev/sdd1 /dev/sde1 /dev/sdf1
sudo vgdisplay
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Volume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lvm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Metadata&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Areas&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Metadata&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sequence&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;No&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read/write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;resizable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MAX&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cur&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Max&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cur&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Act&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.99&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Total&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2301&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Alloc&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Free&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2301&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.99&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UUID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-wMFp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xKi-HdVr-cKir&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;efI-Fv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;qMH&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда создаст &lt;strong&gt;VG&lt;/strong&gt; с именем &lt;code class=&quot;highlighter-rouge&quot;&gt;VG01&lt;/code&gt; и размером &lt;code class=&quot;highlighter-rouge&quot;&gt;6Гб&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-lv&quot;&gt;Создаём LV&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;LV&lt;/strong&gt; создаём используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;lvcreate&lt;/code&gt; и указываем &lt;strong&gt;имя LV&lt;/strong&gt; и его размеры и в конце &lt;strong&gt;имя VG&lt;/strong&gt;. При этом используя опцию -L вы задаёте размер в байтах, а при использовании -l в &lt;strong&gt;Physical extends&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo lvcreate -n LV01 -l 1000 VG01
sudo lvcreate -n LV02 -L 700M VG01
sudo lvdisplay
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Logical&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/PV&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PV&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UUID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HAxIpl-uJxf-YxdI-QIvT&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vbK-MHCi-ZmhjY&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read/write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Creation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021-10-02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;available&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.91&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Segments&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Allocation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inherit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ahead&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sectors&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;currently&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8192&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Block&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;253&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Logical&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/PV&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PV&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UUID&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ic&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;QE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-bKiB-SMua-OR&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c-Ax&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a-IrM&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-DKdP&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read/write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Creation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021-10-02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;available&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;700.00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MiB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Current&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;175&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Segments&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Allocation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;inherit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ahead&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sectors&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;currently&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8192&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Block&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;253&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-файловую-систему-на-lv&quot;&gt;Создаём файловую систему на LV&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого используем уже знакомую нам утилиту &lt;code class=&quot;highlighter-rouge&quot;&gt;mkfs&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkfs.ext4 /dev/VG01/LV02
sudo mkfs.ext4 /dev/VG01/LV01
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;монтируем-наш-lv&quot;&gt;Монтируем наш LV&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и последним шагом будет монтирование в ОС.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir /my-lvm-01
sudo mkdir /my-lvm-02

sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/dev/VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/LV&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/my-lvm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/VG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/LV&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/my-lvm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount -a
df -h
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;удаляем-lv&quot;&gt;Удаляем LV&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;lvremove&lt;/code&gt; и передаём ей полный путь к &lt;strong&gt;LV&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo umount /my-lvm-01
sudo umount  /my-lvm-02

sudo lvremove /dev/VG01/LV01
sudo lvremove /dev/VG01/LV02
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;удаляем-vg&quot;&gt;Удаляем VG&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vgremove&lt;/code&gt; и передаём ей имя &lt;strong&gt;VG&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vgremove VG01
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;удаляем-pv&quot;&gt;Удаляем PV&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;pvremove&lt;/code&gt; и передаём ей имя &lt;strong&gt;PD&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo pvremove /dev/sdd1 /dev/sde1 /dev/sdf1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 13 Sep 2023 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-what-is-lvm</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-what-is-lvm</guid>
        
        <category>linux</category>
        
        <category>lvm</category>
        
        <category>storage</category>
        
        
      </item>
    
      <item>
        <title>MsSql - Как мониторить действия пользователей</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/LBr0J95RgTc?si=WqHmF7TV59rtcHuf&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href=&quot;https://ru.freepik.com/free-vector/interrogation-of-criminal-man-in-police-station_5603550.htm#page=2&amp;amp;query=interrogation&amp;amp;position=43&amp;amp;from_view=search&amp;amp;track=sph&quot;&gt;Изображение от vectorpouch&lt;/a&gt; на Freepik&lt;/p&gt;

&lt;p&gt;Первый способ это создание триггеров и запись значений в таблицу, но мне такое не нравиться и здесь писать об этом я не буду, тем более у меня есть лицензия &lt;code class=&quot;highlighter-rouge&quot;&gt;Enterprise&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Мы же рассмотрим вариант с использованием &lt;strong&gt;Server Audit Specifications&lt;/strong&gt;, но только если у вас лицензия &lt;code class=&quot;highlighter-rouge&quot;&gt;Enterprise&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Аудит в &lt;em&gt;Ms SQL&lt;/em&gt; позволяет вам записывать и хранить действия пользователей как на уровне базы так и на уровне самого &lt;em&gt;SQL&lt;/em&gt; сервера. Также предоставляется возможность выбрать что именно мониторить, об этом чуть ниже.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;sql-server-audit&quot;&gt;SQL Server Audit&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала нам потребуется создать объект &lt;strong&gt;Audit&lt;/strong&gt;, вы можете создавать несколько объектов. Чтобы было проще это просто настройка как и где хранить события аудита.&lt;/p&gt;

&lt;p&gt;Для того чтобы создать &lt;strong&gt;Audit&lt;/strong&gt; переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Security &amp;gt; Audit &amp;gt; New audit&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Queue delay (in milliseconds)&lt;/strong&gt; - Указывает время в миллисекундах, которое может пройти до принудительной обработки действий аудита. Значение 0 указывает на синхронную доставку. Минимальное значение по умолчанию — 1000 (1 секунда)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;On Audit Log Failure&lt;/strong&gt; - Тут вы указываете что делать если вдруг события аудита не сохраняются.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Audit destination&lt;/strong&gt; - Тут мы выбираем куда именно сохранять события аудита. Можно выбрать журнал &lt;em&gt;Windows&lt;/em&gt; или просто локальную/сетевую директорию. Рекомендуется выбирать вариант с директорией, так как временами слишком много событий, которые будут вам мешать отлавливать другие события. Хотя с помощью прав можно например запретить чистку журнала &lt;em&gt;Windows&lt;/em&gt;, что гарантирует сохранность логов.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Maximum file size&lt;/strong&gt; - максимальный размер файла с событиями (если сохранять в файл)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-08-25_16-28.png&quot; alt=&quot;ms sql Server Audit create&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Либо можно воспользоваться запросом :&lt;/p&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;USE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;master&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERVER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AUDIT&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Test_Server_Audit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;--&amp;lt;&amp;lt; [Test_Server_Audit] must be changed&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILE&lt;/span&gt; 
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;FILEPATH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'G:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\D&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;atabases&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;  --&amp;lt;&amp;lt; must be changed
	,MAXSIZE = 0 MB
	,MAX_ROLLOVER_FILES = 2147483647
	,RESERVE_DISK_SPACE = OFF
) WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE, AUDIT_GUID = '&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23758&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ca3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;efb5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;97&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b099b3c7acf&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;')
ALTER SERVER AUDIT [Test_Server_Audit] WITH (STATE = ON) --&amp;lt;&amp;lt; [Test_Server_Audit] must be changed
GO
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;database-audit-specification&quot;&gt;Database audit specification&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как мы создали аудит (где хранить и как) нужно указать что именно мы хотим мониторить. Прямо сейчас мы рассматриваем аудит действий с конкретной БД, действия с сервером рассмотрим ниже.&lt;/p&gt;

&lt;p&gt;Для того чтобы создать &lt;strong&gt;Database audit specification&lt;/strong&gt; переходим &lt;code class=&quot;highlighter-rouge&quot;&gt;Databases &amp;gt; db_name &amp;gt; Security &amp;gt; Database Audit Specificationc &amp;gt; New&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Audit&lt;/strong&gt; - тут выбираем аудит, который мы создали выше.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Audit Action Type&lt;/strong&gt;- Список что именно нужно включить в аудит. Список групп и их предназначение можно глянуть &lt;a href=&quot;https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-ver16&quot;&gt;тут&lt;/a&gt; или &lt;a href=&quot;https://www.ultimatewindowssecurity.com/sqlserver/auditpolicy/auditactiongroups/default.aspx&quot;&gt;тут&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-08-25_16-41.png&quot; alt=&quot;ms sql Database audit specification create&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Благодаря таким настройкам я могу просмотреть что выполнял пользователи test или любой пользователь с правами sysadmin (dbo) при подключении к бд floob.&lt;/p&gt;

&lt;p&gt;Либо можно воспользоваться запросом :&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;USE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;master&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AUDIT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SPECIFICATION&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Test_Database_Audit&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;--&amp;lt;&amp;lt; Test_Database_Audit must be changed&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;FOR&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERVER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AUDIT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Test_Server_Audit&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;--&amp;lt;&amp;lt; Test_Server_Audit must be changed&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;UPDATE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DELETE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INSERT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbo&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;UPDATE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DELETE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INSERT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbo&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dbo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;STATE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-проверить&quot;&gt;Как проверить&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Во первый нужно от пользователя test выполнить запросы к бд, в моём случае это простой &lt;code class=&quot;highlighter-rouge&quot;&gt;select&lt;/code&gt;. После чего в зависимости от того что вы выбрали в качестве хранилища для аудита (файл или журнал Windows) получить эти события.&lt;/p&gt;

&lt;p&gt;Если вы храните в файлах, то они будут с расширением &lt;code class=&quot;highlighter-rouge&quot;&gt;.sqlaudit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы получить доступ к содержимому можно воспользоваться &lt;em&gt;Sql&lt;/em&gt; запросом:&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fn_get_audit_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'G:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\D&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;atabases&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\*&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.sqlaudit'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;database_name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'floob'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2023-08-25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;09&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;38&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;18.7476766&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;431&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;167&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;BF&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AB&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;57&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AD&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;373&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WIN-OCK&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TD&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MSK&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;floob&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TOP&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;floob&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dbo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dasdas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;G:\Databases\Test_Server_Audit_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;85&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9-5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42-4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C-CE&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;807711&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;928&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;133374297948610000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.sqlaudit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;server-audit-specification&quot;&gt;Server audit specification&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;По сути тут всё тоже самое как и в &lt;strong&gt;Database audit specification&lt;/strong&gt; только на уровне сервера.&lt;/p&gt;

&lt;p&gt;Для того чтобы создать &lt;strong&gt;Server audit specification&lt;/strong&gt; переходим &lt;code class=&quot;highlighter-rouge&quot;&gt;Security &amp;gt; Server Audit Specificationc &amp;gt; New&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Audit Action Type&lt;/strong&gt;- Список что именно нужно включить в аудит. Список групп и их предназначение можно глянуть &lt;a href=&quot;https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-ver16&quot;&gt;тут&lt;/a&gt; или &lt;a href=&quot;https://www.ultimatewindowssecurity.com/sqlserver/auditpolicy/auditactiongroups/default.aspx&quot;&gt;тут&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-08-25_17-01.png&quot; alt=&quot;ms sql server audit specification create&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;USE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;master&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERVER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AUDIT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SPECIFICATION&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Test_Server_Audit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;--&amp;lt;&amp;lt; Test_Server_Audit must be changed&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;FOR&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERVER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AUDIT&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Test_Server_Audit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;--&amp;lt;&amp;lt; Test_Server_Audit must be changed&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AUDIT_CHANGE_GROUP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;STATE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AUDIT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SPECIFICATION&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Test_Database_Audit&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;STATE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;OFF&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fn_get_audit_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'G:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\D&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;atabases&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\*&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.sqlaudit'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;statement&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;like&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'%AUDIT%'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2023-08-25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;57.9158665&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;			&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Test_Database_Audit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ALTER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DATABASE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AUDIT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SPECIFICATION&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Test_Database_Audit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WITH&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(STATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OFF)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;G:\Databases\Test_Server_Audit_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;23758&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-EFB&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5-4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ADD&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-97&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6-9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;099&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ACF_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;133374313105990000&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.sqlaudit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 01 Sep 2023 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/mssql-user-cmands-monitoring</link>
        <guid isPermaLink="true">http://www.tipoit.kz/mssql-user-cmands-monitoring</guid>
        
        <category>mssql</category>
        
        <category>security</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Docker - Настройка часовых поясов в контейнерах</title>
        <description>&lt;p&gt;Сразу скажу что я пробую с контейнером Ubuntu 20.04.6 LTS. На самом деле это контейнер hyperledger/fabric-orderer, но не важно.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;env-tzasiaalmaty&quot;&gt;ENV TZ=”Asia/Almaty”&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы можете создать свой собственный образ, то можно добавить строки в &lt;code class=&quot;highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ubuntu:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;20.04&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apt-get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-yq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tzdata&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TZ=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Asia/Almaty&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Тут устанавливается пакет tzdata, но можно обойтись и без него. Об этом ниже.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;tzasiaalmaty-в-docker&quot;&gt;TZ=”Asia/Almaty” в docker&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;По сути нам лишь достаточно передать переменную TZ с нужным значением. И по сути всё должно работать.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run  -e &lt;span class=&quot;nv&quot;&gt;TZ&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Asia/Almaty'&lt;/span&gt; -it hyperledger/fabric-orderer:latest bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;так-а-почему-не-работает&quot;&gt;Так а почему не работает?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;А не работает потому что как нам известно docker образы обычно урезаны, чтобы не занимать много места и т.д. Так вот всё временные зоны у нас хранятся в директории /usr/share/zoneinfo/, которой в контейнере конечно нет.&lt;/p&gt;

&lt;p&gt;Cамым простым будет будет проброс этой директории с хоста в контейнер:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run  -e &lt;span class=&quot;nv&quot;&gt;TZ&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Asia/Almaty'&lt;/span&gt; –volume /usr/share/zoneinfo/Asia:/usr/share/zoneinfo/Asia:ro -it hyperledger/fabric-orderer:latest bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;docker-compose-file&quot;&gt;Docker compose file&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;services:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;orderer&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;container_name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;orderer&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;environment:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TZ=Asia/Almaty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volumes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/zoneinfo/Asia:/usr/share/zoneinfo/Asia:ro&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 01 Sep 2023 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/winlogbeat-no-events-wil-be-read</link>
        <guid isPermaLink="true">http://www.tipoit.kz/winlogbeat-no-events-wil-be-read</guid>
        
        <category>docker</category>
        
        <category>timezone</category>
        
        
      </item>
    
      <item>
        <title>WinlogBeat - WARN EventLog[Security] Open() error. No events will be read from this source. The specified query is invalid.</title>
        <description>&lt;p&gt;Для доставки событий из &lt;strong&gt;Windows&lt;/strong&gt; в &lt;strong&gt;ELK&lt;/strong&gt; используется &lt;strong&gt;WinlogBeat&lt;/strong&gt;. В принципе по настройке всё и так есть на &lt;a href=&quot;https://www.elastic.co/guide/en/beats/winlogbeat/current/configuration-winlogbeat-options.html&quot;&gt;офсайте&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;warn-eventlogsecurity-open-error-no-events-will-be-read-from-this-source-the-specified-query-is-invalid&quot;&gt;WARN EventLog[Security] Open() error. No events will be read from this source. The specified query is invalid&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь про саму ошибку, с которой вы столкнётесь если вдруг решите отфильтровать что именно нужно слать.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;winlogbeat.event_logs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Security&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1102&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4624&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4625&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4723&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4724&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4728&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4729&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4732&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4733&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4738&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4740&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4746&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4747&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4751&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4752&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4756&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4757&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4761&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4762&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4767&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4771&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5136&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5137&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5236&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Тут видно, что я указал конкретные события, их количество в общем составляет &lt;em&gt;25&lt;/em&gt;. Но вот у &lt;strong&gt;Windows&lt;/strong&gt; есть ограничение, которое не позволят &lt;strong&gt;Winlogbeat&lt;/strong&gt; читать журнал событий.&lt;/p&gt;

&lt;p&gt;Для того, чтобы обойти это ограничение воспользуемся процессом &lt;strong&gt;drop_event&lt;/strong&gt;. Суть работы заключается в следующем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Winlogbeat&lt;/strong&gt; получает все события&lt;/li&gt;
  &lt;li&gt;Уже сам фильтрует что именно отправить&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;winlogbeat.event_logs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Security&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;processors:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;drop_event.when.not.or:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1102&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4624&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4625&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4723&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4724&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4728&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4729&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4732&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4733&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4738&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4740&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4746&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4747&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4751&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4752&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4756&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4757&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4761&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4762&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4767&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4771&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5136&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5137&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5141&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;equals.winlog.event_id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5236&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 01 Sep 2023 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-containers-configure-timezones</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-containers-configure-timezones</guid>
        
        <category>elk</category>
        
        <category>windows</category>
        
        <category>monitoring</category>
        
        <category>security</category>
        
        <category>winlogbeat</category>
        
        
      </item>
    
      <item>
        <title>Loki - entry too far behind, oldest acceptable timestamp is</title>
        <description>&lt;p&gt;На самом деле тут всё и так понятно из самой ошибки. Т.е. Loki у вас так настроен что нельзя отправлять данные старее определённого времени.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;reject_old_samples&quot;&gt;reject_old_samples&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию Loki не позволяет записывать старые события . Т.е. допустим, что сейчас 18:00, но вот приложение шлёт события с датой 17:30. В таком случае вы получите ошибку о том, что timestamp старый.&lt;/p&gt;

&lt;p&gt;Можно вообще отключить проверку timestamp:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;limits_config:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;reject_old_samples:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Можно задать допустимое время:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;limits_config:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;reject_old_samples:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;reject_old_samples_max_age:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;max_chunk_age&quot;&gt;max_chunk_age&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Может так случится что даже после настройки reject_old_samples вы всё ещё получаете эту ошибку.&lt;/p&gt;

&lt;p&gt;Тогда взгляните на параметр max_chunk_age, и установите значение которое будет больше вашего рассинхрона.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ingester:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;max_chunk_age:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 20 Aug 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/Loki-entry-too-far-behind</link>
        <guid isPermaLink="true">http://www.tipoit.kz/Loki-entry-too-far-behind</guid>
        
        <category>grafana</category>
        
        <category>loki</category>
        
        <category>monitoring</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>Что такое этот наш Linux</title>
        <description>&lt;p&gt;&lt;img src=&quot;/static/img/all/unixhistory.drawio.png&quot; alt=&quot;unix history&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Это сейчас мы все говорим про Linux, но было время, когда все говорили о Unix. Это по сути прародитель Linux. В 1991 Линус Торвальдс создал новое Unix-подобное ядро, которое назвал Linux, и распространил под лицензией GPL.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;linux&quot;&gt;Linux&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt; в последнее время стал весьма важной технологией в сфере &lt;code class=&quot;highlighter-rouge&quot;&gt;IT&lt;/code&gt;. И каждый уважающий себя &lt;code class=&quot;highlighter-rouge&quot;&gt;IT специалист&lt;/code&gt; обязан уже иметь базовые понятия о &lt;strong&gt;Linux&lt;/strong&gt;. Что уж говорить если даже &lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft&lt;/code&gt; начал выпускать что-то для &lt;strong&gt;Linux&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;По сути большая часть интернета, которую вы посещаете каждый день так или иначе построена на ОС &lt;strong&gt;Linux&lt;/strong&gt;. И большая часть всех наших умных &lt;code class=&quot;highlighter-rouge&quot;&gt;смарт-телевизоров&lt;/code&gt; также построены на &lt;strong&gt;Linux&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Вот несколько причин почему вы обязаны узнать немного о &lt;strong&gt;Linux&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Бесплатное ПО (Для некоторых стран чуть ли не самый главный пункт)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft&lt;/code&gt; так или иначе уже начал поддерживать &lt;strong&gt;Linux сообщество&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Большие гиганты облачных услуг используют преимущественно &lt;strong&gt;Linux&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Andorid&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;IOT&lt;/code&gt; и др. технологии в качестве основной ОС используют &lt;strong&gt;Linux&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Устройства с Linux часто более высоко производительнее и стабильнее&lt;/li&gt;
  &lt;li&gt;Linux не так прожорлив по отношению к аппаратным ресурсам&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Также большую популярность &lt;strong&gt;Linux&lt;/strong&gt; обрёл благодаря своей **открытости (open source) **, благодаря открытому исходному коду конечно. Не всегда конечно открытый исходный код подразумевает что вы в миг поймёте, как что работает. Но благодаря наличию исходного кода вы можете дописывать что-то своё и любезно этим делится с сообществом.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Основным преимуществом перед Windows является то что в основе лежит &lt;strong&gt;CLI интерфейс&lt;/strong&gt; а не &lt;code class=&quot;highlighter-rouge&quot;&gt;GUI&lt;/code&gt;. Особенно вы это почувствуете если вы подключаетесь к ОС с использованием слабого интернет канала. В наши дни это уже не настолько часто происходит, но всё же в определённые моменты — это большой и жирный плюс. &lt;code class=&quot;highlighter-rouge&quot;&gt;Microsoft&lt;/code&gt; тоже это признала, когда начала вводить &lt;code class=&quot;highlighter-rouge&quot;&gt;Powershell&lt;/code&gt;. Также использование &lt;code class=&quot;highlighter-rouge&quot;&gt;CLI&lt;/code&gt; упрощает процесс автоматизации.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;что-такое-open-source&quot;&gt;Что такое Open Source&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Open Source&lt;/strong&gt; подразумевает бесплатно распространяемое ПО с открытым исходным кодом, который вы можете изучать, менять, дополнять и распространять свои дополнения.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Исходный код — это набор удобочитаемых инструкций, которые используются для создания программы. После создания исходного кода на него распространяются авторские права, благодаря которым указывается может ли исходный код модифицироваться и распространяться. Это задаётся типом лицензии, которая указана для исходного кода.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Существует тип лицензии при котором менять исходный код могут только разработчики исходного кода. Такой тип исходного кода называется &lt;strong&gt;проприетарным (proprietary)&lt;/strong&gt; или &lt;strong&gt;закрытым (closed)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Программы, поставляемые с открытым исходным кодом как, раз дают возможность изменения и распространения ваших изменений. Открытый исходный код способствует быстрому росту приложения и также возможности использования более современных технологий. Так как написать что-то новое может большое количество человек. Также если какой-то основатель приложения вдруг его забросит может появиться другой разработчик, который будет не прочь развивать проект дальше.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Вот несколько критериев выгоды использования &lt;strong&gt;Open Source&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Контроль&lt;/strong&gt; - вы можете сами просматривать исходный код и понимать, что творится внутри приложения&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Обучение&lt;/strong&gt; - вы можете учиться писать правильный код просматривая исходный код&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Безопасность&lt;/strong&gt; - инспектирование исходного кода, а также его доработка без участия разработчика&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Стабильность&lt;/strong&gt; - код может жить и развиваться даже без участия основного разработчика&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Бесплатно&lt;/strong&gt; - кто не любит халяву?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;типы-лицензий-open-source&quot;&gt;Типы лицензий Open Source&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я уже говорил о том, что использование исходного кода зависит от типа лицензии.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Рассмотрим два основных типа лицензий с открытым исходным кодом:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Copyleft&lt;/strong&gt; - обеспечение свободы использования (включая все другие права) и предоставления последующим пользователям права изменять, распространять и использовать программное обеспечение по своему усмотрению. Требуется чтобы любой разработчик исходного кода передавал другим право на изменение своего исходного кода. Включают в себя лицензии типа &lt;code class=&quot;highlighter-rouge&quot;&gt;GPL (General Public License)&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;LGPL (Lesser General Public License)&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Требует, чтобы использовалась та же лицензия, что и у исходной работы. Например, если вы пишете какое-то программное обеспечение и выпускаете его под &lt;code class=&quot;highlighter-rouge&quot;&gt;GNU GPL&lt;/code&gt;, а затем кто-то другой модифицирует это программное обеспечение и распространяет свою измененную версию, измененная версия также должна быть под лицензией &lt;code class=&quot;highlighter-rouge&quot;&gt;GNU GPL&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Permissive&lt;/strong&gt; - лицензия на программное обеспечение, иногда также называемая лицензией типа &lt;strong&gt;BSD&lt;/strong&gt;, представляет собой лицензию на программное обеспечение с минимальными ограничениями на использование. Т.е. пользователь всё также может менять что хочет при условии сохранения авторских прав изначального разработчика. И не обязательно чтобы вы выкладывали в открытый доступ ваши изменения, в отличии от лицензии &lt;strong&gt;Copyleft&lt;/strong&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;дистрибутивы-linux&quot;&gt;Дистрибутивы Linux&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Так как любой желающий может создать свою собственною версию Linux дистрибутивов в интернете куча. Но мы сконцентрируемся только на ответственных компаниях, которые не бросают свои проекты.&lt;/p&gt;

&lt;p&gt;И вот продукты плодов таких компаний:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Fedora Linux (2003 год)&lt;/li&gt;
  &lt;li&gt;Ubuntu Desktop, Server, Core (2004 год)&lt;/li&gt;
  &lt;li&gt;Red  Hat Enterprise Linux (1994 год)&lt;/li&gt;
  &lt;li&gt;Linux Mint (2007 год)&lt;/li&gt;
  &lt;li&gt;Debian (1993 год)&lt;/li&gt;
  &lt;li&gt;openSUSE (2005 год)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;кто-такие-redhat&quot;&gt;Кто такие RedHat?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В наше время конечно &lt;strong&gt;Open Source&lt;/strong&gt; коммерциализировался, если раньше код писали волонтеры, то сейчас его пишут программисты, которым за это еще и платят.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RedHat&lt;/strong&gt; является одним из основных лидеров разработки &lt;strong&gt;Open Source&lt;/strong&gt;. Но они как раз-таки платят разработчиком, и для того чтобы получать прибыль они продают подписки.  Участвует в разработке многих &lt;strong&gt;Open Source&lt;/strong&gt; решений, иногда совместно с другими гигантами &lt;code class=&quot;highlighter-rouge&quot;&gt;IT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Основная идея &lt;strong&gt;RedHat&lt;/strong&gt; это найти интересный продукт в сети. Дописать к нему что-то новое и выпускать к нему постоянные обновления по подписке, также включающую поддержку. И также создать нормальную документацию к продукту. Кто сталкивался с документацией по &lt;strong&gt;Open Source&lt;/strong&gt; проекту знает не понаслышке какой это иногда бывает ад.&lt;/p&gt;

</description>
        <pubDate>Fri, 11 Aug 2023 02:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/what-is-linux</link>
        <guid isPermaLink="true">http://www.tipoit.kz/what-is-linux</guid>
        
        <category>linux</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Бэкап PostgreSQL с использованием WAL журналов</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/oHIb_3hx284?start=110&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;

&lt;p&gt;Это вторая статья из серии бэкапов &lt;strong&gt;PostgreSQL&lt;/strong&gt; с помощью &lt;strong&gt;Veeam&lt;/strong&gt;. Напомню, что на момент написания первой статьи это были скорее всего костыли чем настоящий бэкап. И вот вышла наконец 12 версия &lt;strong&gt;Veeam Backup and Replacion&lt;/strong&gt; где стало возможным делать бэкап с &lt;code class=&quot;highlighter-rouge&quot;&gt;использованием WAL файлов&lt;/code&gt;. Соответственно теперь можно и восстановиться на определённое время.&lt;/p&gt;

&lt;p&gt;Для начала обновите &lt;strong&gt;Veeam Backup and Replacion&lt;/strong&gt; до версии 12.&lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;требования-и-ограничения&quot;&gt;Требования и ограничения&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Для начала убедитесь в том, что порт &lt;code class=&quot;highlighter-rouge&quot;&gt;5432&lt;/code&gt; на устройстве с &lt;strong&gt;PostgreSQL&lt;/strong&gt; доступен с сервера где установлен &lt;strong&gt;Veeam&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Необходимо иметь версию &lt;strong&gt;PostgreSQL&lt;/strong&gt; не ниже &lt;code class=&quot;highlighter-rouge&quot;&gt;12&lt;/code&gt; и не выше &lt;code class=&quot;highlighter-rouge&quot;&gt;15.2&lt;/code&gt; (на момент публикации статьи)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; не поддерживает резервное копирование кластеров &lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam Backup &amp;amp; Replication&lt;/strong&gt; не поддерживает резервное копирование отдельных баз данных &lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Установите параметр &lt;strong&gt;archive_mode&lt;/strong&gt; в режим &lt;code class=&quot;highlighter-rouge&quot;&gt;on&lt;/code&gt; (postgresql.conf)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;archive_command&lt;/strong&gt; должно быть пустым (postgresql.conf)&lt;/li&gt;
  &lt;li&gt;Параметр &lt;strong&gt;wal_level&lt;/strong&gt; должен быть &lt;code class=&quot;highlighter-rouge&quot;&gt;replica&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;logical&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Каталог &lt;strong&gt;/tmp&lt;/strong&gt; должен быть примонтирован с опцией exec&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;бэкап-отключенного-экземпляра&quot;&gt;Бэкап отключенного экземпляра&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если ваш экземпляр &lt;strong&gt;PostgreSQL&lt;/strong&gt; находится в отключенном состоянии, то бэкап этого экземпляра производится не будет. Не будет он делаться только новым методом, вы всё также сможете восстановить его, но только на уровне файлов или томов. Если же у вас на сервере несколько экземпляров, то будет делаться бэкап всех остальных работающих экземпляров с использованием &lt;strong&gt;WAL&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-veeam-agent-for-linux&quot;&gt;Установка Veeam Agent for Linux&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я надеюсь у вас не стоит &lt;strong&gt;PostgreSQL&lt;/strong&gt; на ОС Windows, но если и стоит, то спешу вас расстроить что бэкап &lt;strong&gt;PostgreSQL&lt;/strong&gt; с использованием &lt;strong&gt;WAL&lt;/strong&gt; файлов будет работать только на &lt;em&gt;Linux&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;О том, как поставить &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; читаем &lt;a href=&quot;https://www.tipoit.kz/veeam-linux-agent-installation&quot;&gt;тут&lt;/a&gt;. Версия агента должна быть не ниже 6.0.0.1060.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавляем-задачу-в-veeam-backup-and-replication&quot;&gt;Добавляем задачу в Veeam Backup and Replication&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как вы установили &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; можно приступать к созданию задачи. Для этого:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Jobs &amp;gt; Backup &amp;gt; Linux Computer&lt;/code&gt;  и добавляем новую задачу&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-pg-1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Добавляем сервер с &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://www.tipoit.kz/static/img/veeam/2022-04-12_11-28.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Ставим галочку напротив &lt;strong&gt;Enable application-aware processing&lt;/strong&gt; и настраиваем бэкап &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;, а именно добавляем пользователя для подключения к &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;. И вот тут уже новенькие настройки, которые доступны только начиная с версии 12.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-pg-2.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; 3.1. Тут просто ставим галочку, которая активирует возможность делать бэкап определённой программы
 3.2 Тут нужно ввести логин и пароль пользователя от ОС (доступ по ssh)
 3.3 Открываем вкладку PostgreSQL
 3.4 Задаём логин (пароль нужен если выбрали первое в 5) для доступа к PostgreSql
 3.5 Тут в зависимости от предпочтений выбираем метод аутентификации
 3.6 Устанавливаем с какой периодичностью делать бэкап WAL файлов
 3.7 Директорию куда именно сперва записывать WAL файлы
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Дальше выставляем время запуска и завершаем мастер создания задачи&lt;/li&gt;
  &lt;li&gt;После запланированного запуска задачи в активных задачах появится вложенная задача, которая будет висеть в фоне и делать бэкап WAL файлов каждые 15 минут (указывается в 3.6)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-pg-3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;восстановление&quot;&gt;Восстановление&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для восстановления переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Home &amp;gt; Backups &amp;gt; Disk &amp;gt; Your backup &amp;gt; Backup &amp;gt; Application Item &amp;gt; PostgreSQL&lt;/code&gt;. В открывшемся окне выбираем нужную точку восстановления.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-pg-4.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Далее жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Next&lt;/code&gt; пока не получаем кнопку Browse, которую собственно и нажимаем. Благодаря чему запустится &lt;strong&gt;Veeam Explorer for PostgreSQL&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;И собственно выбираем куда и как восстанавливать.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-pg-6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также тут можно применить восстановление на определённое время.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-pg-7.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;К сожалению, на момент написания статьи все ещё нет возможности восстановить определённую БД или таблицу, но возможно в будущем эта возможность появится.&lt;/p&gt;
</description>
        <pubDate>Sat, 24 Jun 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam12-backup-postgresql</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam12-backup-postgresql</guid>
        
        <category>veeam</category>
        
        <category>postgresql</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Gitlab - Восстановление утерянной 2FA</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/YngPE7oROjU?start=30&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;В &lt;strong&gt;Gitlab&lt;/strong&gt; можно привязать двухфакторную аутентификацию, как правило это &lt;em&gt;Google Authentificator&lt;/em&gt;. Так вот может произойти так что в какой-то момент вы вспомните что потеряли доступ к &lt;em&gt;Google Authentificator&lt;/em&gt;, а зайти на &lt;strong&gt;Gitlab&lt;/strong&gt; уж очень нужно.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вариант-1--использование-кодов-восстановления&quot;&gt;Вариант 1:  Использование кодов восстановления&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самый простой способ просто вбиваете один с кодов в поле &lt;strong&gt;pin code&lt;/strong&gt; и авторизуетесь. Но это только если у вас остались эти коды. Кстати перегенерить их можно по ссылке https://my-gitlab.com/-/profile/two_factor_auth.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вариант-2--использование-ssh&quot;&gt;Вариант 2:  Использование ssh&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы до этого авторизовались через &lt;strong&gt;ssh&lt;/strong&gt;, т.е. добавляли свой ключ то можно воспользоваться командой:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh git@my-gitlab.com 2fa_recovery_codes
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вариант-3--использование-gitlab-rails&quot;&gt;Вариант 3:  Использование gitlab-rails&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самый верный вариант, но только если у вас есть доступ к самому серверу по &lt;strong&gt;ssh&lt;/strong&gt;, где установлен &lt;strong&gt;Gitlab&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Запускаем консоль gitlab-rails
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gitlab-rails console
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Получаем нужного пользователя
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;u &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; User.find_by_username&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'user1'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
u.attributes
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Отключаем OTP
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;u.otp_required_for_login&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false
&lt;/span&gt;u.encrypted_otp_secret&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;На всякий случай активируем пользователя (вдруг заблокирован)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;u.state&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;active&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Сохраняем
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;u.save
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Авторизуемся в Gitlab&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Tue, 06 Jun 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/gitlab-how-to-recovery-2fa</link>
        <guid isPermaLink="true">http://www.tipoit.kz/gitlab-how-to-recovery-2fa</guid>
        
        <category>grafana</category>
        
        <category>loki</category>
        
        <category>multi-tenancy</category>
        
        
      </item>
    
      <item>
        <title>Grafana Loki - Multi-tenancy</title>
        <description>&lt;p&gt;С определённого времени &lt;strong&gt;Grafana Loki&lt;/strong&gt; является многопользовательской системой, если я правильно перевёл &lt;strong&gt;Multi-tenancy&lt;/strong&gt;) Если объяснять это простым языком, то получается следующее: у вас в одном кластере могут храниться данные нескольких владельцев. Например, у вас есть &lt;em&gt;организация А&lt;/em&gt; и &lt;em&gt;организация B&lt;/em&gt;. Логично что владелец &lt;em&gt;организации B&lt;/em&gt; хотел бы чтобы логи его серверов могли видеть только его сотрудники. И функция &lt;strong&gt;Multi-tenancy&lt;/strong&gt; как раз предназначена для этого.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/loki-tenantID.drawio.png&quot; alt=&quot;loki  Multi-tenancy&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Чтобы получить доступ к логам &lt;em&gt;организации B&lt;/em&gt; вам будет необходимо предоставить &lt;code class=&quot;highlighter-rouge&quot;&gt;orgID (Tenant ID)&lt;/code&gt; через &lt;code class=&quot;highlighter-rouge&quot;&gt;X-Scope-OrgID&lt;/code&gt; в HTTP-заголовке. &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID (orgID)&lt;/code&gt; может содержать буквенно-цифровые символы.&lt;/p&gt;

&lt;p&gt;По умолчанию &lt;strong&gt;Loki&lt;/strong&gt; запускается в моде &lt;strong&gt;multi-tenant&lt;/strong&gt; и активируется переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;auth_enabled: true&lt;/code&gt; в файле конфигурации &lt;strong&gt;Loki&lt;/strong&gt;. Если &lt;code class=&quot;highlighter-rouge&quot;&gt;auth_enabled&lt;/code&gt; стоит в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt; то по сути у вас всего один &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant&lt;/code&gt; с именем &lt;code class=&quot;highlighter-rouge&quot;&gt;fake&lt;/code&gt;. Т.е. никакого разграничения нет, и логи видят все по умолчанию.&lt;/p&gt;

&lt;p&gt;На рисунке ниже я предоставил скрин с двумя &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt;, так они выглядят в хранилище (S3).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-06-01_11-19.png&quot; alt=&quot;minio tenant id folder&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;multi-tenancy-запросы-get&quot;&gt;Multi-tenancy запросы (Get)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;И логичный вопрос возникает в вашей голове: а как собственно получить доступ к тому или иному &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt;. Для примера если вы запустите &lt;strong&gt;Loki&lt;/strong&gt; из примера на &lt;a href=&quot;https://github.com/grafana/loki/tree/main/production/docker&quot;&gt;github&lt;/a&gt; вы по умолчанию получите доступ только к &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt; равным &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;. Но об этом чуть попозже.&lt;/p&gt;

&lt;p&gt;Так вот чтобы получить доступ к &lt;code class=&quot;highlighter-rouge&quot;&gt;tenant A&lt;/code&gt; нужно выполнить следующий запрос:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl --location &lt;span class=&quot;s1&quot;&gt;'http://loki-gateway:8080/loki/api/v1/labels'&lt;/span&gt; --header &lt;span class=&quot;s1&quot;&gt;'X-Scope-OrgID: A'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но что делать если вдруг захотелось обратиться сразу к нескольким &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt;? Первым делом в файле конфигурации добавляем &lt;code class=&quot;highlighter-rouge&quot;&gt;multi_tenant_queries_enabled: true&lt;/code&gt; и в запросе указываем несколько &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; через |.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl --location &lt;span class=&quot;s1&quot;&gt;'http://loki-gateway:8080/loki/api/v1/labels'&lt;/span&gt; --header &lt;span class=&quot;s1&quot;&gt;'X-Scope-OrgID: A|B'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если же вы выполните запрос без указания &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt;, то вы просто на выходе получите &lt;strong&gt;no org id&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;multi-tenancy-запросы-post&quot;&gt;Multi-tenancy запросы (Post)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно получить значение — это хорошо, но как быть если их еще нет. Т.е. как записать что-либо в &lt;strong&gt;Loki&lt;/strong&gt; используя &lt;strong&gt;Multi-tenancy&lt;/strong&gt;. Для этого выполним самый обычный &lt;code class=&quot;highlighter-rouge&quot;&gt;Post&lt;/code&gt; используя &lt;em&gt;curl&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl --location &lt;span class=&quot;s1&quot;&gt;'http://127.0.0.1:3100/loki/api/v1/push'&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--header &lt;span class=&quot;s1&quot;&gt;'X-Scope-OrgID: A'&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--header &lt;span class=&quot;s1&quot;&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--data &lt;span class=&quot;s1&quot;&gt;'{&quot;streams&quot;: [{ &quot;stream&quot;: { &quot;foo&quot;: &quot;bar2&quot; }, &quot;values&quot;: [ [ &quot;1690877832000000000&quot;, &quot;fizzbuzz&quot; ] ] }]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Обратите на первое значение в values. Тут 1690877832000000000 означает время события, указанное в &lt;em&gt;Unix&lt;/em&gt; варианте (мс). Собственно можно воспользоваться &lt;a href=&quot;https://www.epochconverter.com/&quot;&gt;онлайн конвертером&lt;/a&gt;, но не забудьте еще добавить шесть нулей.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-указать-tenant-id-в-grafana&quot;&gt;Как указать Tenant ID в Grafana&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы рассмотрели, как передать &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt; в сыром curl запросе, но если вы хотите смотреть логи через &lt;strong&gt;Grafana&lt;/strong&gt; то в &lt;em&gt;data source&lt;/em&gt; нужно будет также указать &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Открываем наш &lt;em&gt;data source&lt;/em&gt; на редактирование http://grafana:3000/datasources/edit/loki&lt;/li&gt;
  &lt;li&gt;Добавляем в Custom HTTP наш &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt; (Headers X-Scope-OrgID: A)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2023-06-01_11-03.png&quot; alt=&quot;X-Scope-OrgID&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Или можно также это сделать через yaml (httpHeaderValue1):&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;apiVersion:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;datasources:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;access:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;basicAuth:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;jsonData:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;httpHeaderName&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;X-Scope-OrgID&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;secureJsonData:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;httpHeaderValue&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;editable:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;isDefault:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loki&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loki&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;uid:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loki&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;url:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http://loki-gateway&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Возможно кто-то не согласиться что это решение можно применять для разграничения прав доступа, но в принципе вы можете создать несколько &lt;em&gt;datasources&lt;/em&gt; с разными &lt;code class=&quot;highlighter-rouge&quot;&gt;Tenant ID&lt;/code&gt; и уже раздавать доступ пользователям к этим &lt;em&gt;datasources&lt;/em&gt;. Правда разграничение прав на &lt;em&gt;datasources&lt;/em&gt; есть только в Grafana Enterprise и Grafana Cloud Pro and Advanced.&lt;/p&gt;
</description>
        <pubDate>Tue, 06 Jun 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/grafana-loki-multi-tenancy</link>
        <guid isPermaLink="true">http://www.tipoit.kz/grafana-loki-multi-tenancy</guid>
        
        <category>grafana</category>
        
        <category>loki</category>
        
        <category>multi-tenancy</category>
        
        
      </item>
    
      <item>
        <title>Logstash - Could not load FFI Provider (NotImplementedError) FFI not available</title>
        <description>&lt;p&gt;После установки logstash в логах получаю ошибку &lt;strong&gt;Could not load FFI Provider: (NotImplementedError) FFI not available&lt;/strong&gt; после чего сервис просто перезапускается.&lt;/p&gt;

&lt;p&gt;Проблема может быть в том, что у вас нестандартные права на папку &lt;code class=&quot;highlighter-rouge&quot;&gt;/tmp&lt;/code&gt; при монтировании, например, в моём случае стояла опция &lt;code class=&quot;highlighter-rouge&quot;&gt;noexec&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для исправления этой ситуации выполняем:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount -o remount,exec /tmp
sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fb&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xfs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults,exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 25 May 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/logstash-couldnt-find-any-output-plugin-named-loki</link>
        <guid isPermaLink="true">http://www.tipoit.kz/logstash-couldnt-find-any-output-plugin-named-loki</guid>
        
        <category>logstash</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Logstash - Unable to configure plugins Couldn't find any output plugin named loki</title>
        <description>&lt;p&gt;Для начала нужно конечно установить сам плагин, в моём случае это плагин &lt;strong&gt;logstash-output-loki&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ставится плагин следующей командой:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/share/logstash/bin/logstash-plugin install logstash-output-loki
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;unable-to-configure-plugins-pluginloadingerror-couldnt-find-any-output-plugin-named-loki&quot;&gt;Unable to configure plugins: (PluginLoadingError) Couldn’t find any output plugin named ‘loki’&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На даже после того как я его поставил я всё равно получаю эту ошибку. А всё дело в том, что сервис &lt;strong&gt;logstash&lt;/strong&gt; запускается от одноименного пользователя, у которого просто нет прав на директорию с файлами плагина. Плагины лежат в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Как не трудно догадаться нужно сделать владельцем директории с плагином пользователя &lt;strong&gt;logstash&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chown -R logstash /usr/share/logstash/

sudo systemctl restart logstash
sudo systemctl status logstash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 25 May 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/logstash-could-not-load-FFI-Provider-FFI-not-available</link>
        <guid isPermaLink="true">http://www.tipoit.kz/logstash-could-not-load-FFI-Provider-FFI-not-available</guid>
        
        <category>logstash</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Grafana OnCall - Изменение GRAFANA_API_URL</title>
        <description>&lt;p&gt;При использовании версии с &lt;em&gt;Docker&lt;/em&gt; url для связи &lt;strong&gt;OnCall&lt;/strong&gt; с &lt;strong&gt;Grafana&lt;/strong&gt; задаётся в переменной &lt;strong&gt;GRAFANA_API_URL&lt;/strong&gt;. И всё бы ничего, но вот эта переменная задаётся единожды и если вы её поменяли, то она просто так не обновиться.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-обновить-переменную-grafana_api_url&quot;&gt;Как обновить переменную GRAFANA_API_URL&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала нужно найти файл с базой данных, по дефолту она лежит тут &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/docker/volumes/loki_oncall_data/_data/oncall.db&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo find / -name oncall.db
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Далее подключаемся к бд и меняем url в таблице&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sqlite3 /var/lib/docker/volumes/loki_oncall_data/_data/oncall.db
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_management_organization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;UPDATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_management_organization&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;grafana_url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;http://grafana.new:3000&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;grafana_url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;https://grafana.old:3000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 25 May 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/grafana-oncall-change-grafana-api-url</link>
        <guid isPermaLink="true">http://www.tipoit.kz/grafana-oncall-change-grafana-api-url</guid>
        
        <category>grafana</category>
        
        <category>loki</category>
        
        <category>monitoring</category>
        
        <category>security</category>
        
        <category>oncall</category>
        
        
      </item>
    
      <item>
        <title>Grafana - Устанавливаем плагин без интернета</title>
        <description>&lt;p&gt;Причины отсутствия интернета на сервере разные, начиная от правил ИБ заканчивая национальным сертификатом безопасности, которые не везде возможно добавить в доверенные.&lt;/p&gt;

&lt;p&gt;В моём случае именно сертификат по середине был проблемой, так как добавить его в контейнер с Alpine Linux не получилось. Поэтому распишу тут как можно решить обе проблемы.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;где-найти-плагины&quot;&gt;Где найти плагины?&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Переходим по ссылке &lt;a href=&quot;https://storage.googleapis.com/plugins-community/&quot;&gt;storage.googleapis.com&lt;/a&gt; и ищем интересующий нас плагин, например oncall. В итоге я нашёл следующее &lt;strong&gt;grafana-oncall-app/release/v1.2.14/grafana-oncall-app-v1.2.14.zip&lt;/strong&gt;, добавляю это к https://storage.googleapis.com/plugins-community/ и получаю https://storage.googleapis.com/plugins-community/grafana-oncall-app/release/v1.2.14/grafana-oncall-app-v1.2.14.zip.&lt;/p&gt;

&lt;p&gt;Либо второй способ, который более простой. Просто находим плагин на сайте &lt;a href=&quot;https://grafana.com/grafana/plugins/&quot;&gt;grafana.com&lt;/a&gt; и находим там ссылочку скачать, например как &lt;a href=&quot;https://grafana.com/grafana/plugins/grafana-oncall-app/?tab=installation&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;вариант-1&quot;&gt;Вариант 1&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первое что можно сделать это скачать по ссылке архив на компьютере, где это возможно и перекинуть на сервер с Grafana.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Скачиваем архив на компьютер и переносим на сервер&lt;/li&gt;
  &lt;li&gt;Разархивируем всё в папку &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/lib/grafana/plugins/plugin_name&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Перезапускаем Grafana&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;вариант-2&quot;&gt;Вариант 2&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если есть интернет, то можно просто запустить команду установки плагина просто с параметром, который отключает проверку валидности сертификата.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;grafana-cli --insecure plugins install grafana-oncall-app
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Саму команду установки можно найти на офсайте самого плагина, например, &lt;a href=&quot;https://grafana.com/grafana/plugins/grafana-oncall-app/?tab=installation&quot;&gt;grafana.com&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;вариант-3&quot;&gt;Вариант 3&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Последний вариант, который мне нравится больше всего так, как у вас остаётся копия архива в вашей сети. И этот вариант заключается в использовании прокси сервера репозиторий, в моём случае nexus.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаём прокси репозиторий на url https://storage.googleapis.com
&lt;img src=&quot;/static/img/all/2023-04-25_10-20.png&quot; alt=&quot;nexus storage.googleapis.com&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;При использовании команды grafana-cli просто указываем сторонний url к файлу
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;grafana-cli --insecure --pluginUrl https://nexus.example.lan:8443/repository/storage.googleapis.com/plugins-community/grafana-oncall-app/release/v1.2.14/grafana-oncall-app-v1.2.14.zip plugins install oncall
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем Grafana&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 25 May 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/grafana-install-plugin-without-internet</link>
        <guid isPermaLink="true">http://www.tipoit.kz/grafana-install-plugin-without-internet</guid>
        
        <category>grafana</category>
        
        <category>monitoring</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>GLPI - Инвентаризация ESXI хостов</title>
        <description>&lt;p&gt;Как правило в &lt;strong&gt;GLPI&lt;/strong&gt; для инвентаризации используют &lt;strong&gt;FusionInventory&lt;/strong&gt;, но мне что-то он не совсем понравился именно при работе с &lt;strong&gt;ESXI&lt;/strong&gt;. Но всё конечно зависит от требований, в моём случае достаточно выполнять сбор информации разово. Поэтому я решил сделать это родным агентом от &lt;strong&gt;GLPI&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;включить-возможность-инвентаризации-в-glpi&quot;&gt;Включить возможность инвентаризации в GLPI&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Делается это галочкой в настройках по ссылке http://glpi.lan/front/inventory.conf.php (Enable inventory).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-glpi-agent&quot;&gt;Установка GLPI Agent&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала нужно поставить агент на хост, с которого вы будете подключаться к &lt;strong&gt;ESXI&lt;/strong&gt; хосту или &lt;strong&gt;Vceneter&lt;/strong&gt;. На сам &lt;strong&gt;ESXI&lt;/strong&gt; пакетов нет, и, если только ставить их source. Естественно этот хост должен иметь доступ к &lt;strong&gt;ESXI&lt;/strong&gt; хосту.&lt;/p&gt;

&lt;p&gt;Ставим &lt;strong&gt;GLPI Agent&lt;/strong&gt;, инструкция по &lt;a href=&quot;https://glpi-agent.readthedocs.io/en/latest/installation/index.html&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;сбор-информации-о-esxi&quot;&gt;Сбор информации о ESXI&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для Windows:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;lpi-esx.bat --host 192.168.61.205 --user dasd --password sadasd --directory C:&lt;span class=&quot;se&quot;&gt;\U&lt;/span&gt;sers&lt;span class=&quot;se&quot;&gt;\d&lt;/span&gt;asdas&lt;span class=&quot;se&quot;&gt;\D&lt;/span&gt;ownloads
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для Linux:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;glpi-esx --host 192.168.61.205 --user dasd --password sadasd --directory /tmp
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;отправка-в-glpi&quot;&gt;Отправка в GLPI&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для Windows:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;lpi-injector.bat -v --file C:&lt;span class=&quot;se&quot;&gt;\U&lt;/span&gt;sers&lt;span class=&quot;se&quot;&gt;\d&lt;/span&gt;asdas&lt;span class=&quot;se&quot;&gt;\D&lt;/span&gt;ownloads/localhost-2023-05-23-10-45-24.ocs -u http://glpi.lan/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для Linux:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;glpi-injector -v --file /tmp/localhost-2023-05-23-10-45-24.ocs -u http://glpi.lan/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 25 May 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/glpi-esxi-host-inventarization</link>
        <guid isPermaLink="true">http://www.tipoit.kz/glpi-esxi-host-inventarization</guid>
        
        <category>glpi</category>
        
        <category>inventarization</category>
        
        
      </item>
    
      <item>
        <title>Grafana Loki - Как хранятся данные</title>
        <description>&lt;p&gt;В отличии от других систем логирования, которых развелось уже уйма разработчики &lt;strong&gt;Loki&lt;/strong&gt; решили, что он не будет индексировать ваши логи а будет индексировать только их &lt;code class=&quot;highlighter-rouge&quot;&gt;метаданные (labels)&lt;/code&gt;. Сами данные затем сжимаются и сохраняются &lt;code class=&quot;highlighter-rouge&quot;&gt;фрагментами (chunks)&lt;/code&gt; в различных файловых хранилищах, например, таких как &lt;em&gt;S3&lt;/em&gt;, &lt;em&gt;GCS&lt;/em&gt; или в файловой системе. Индекс имеющий минимальный размер и данные, которые хорошо сжаты упрощают работу и также снижают цену, так как для хранения не нужно много дискового пространства (расскажите это людям с &lt;em&gt;ELK&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Скажу сразу то, что я здесь описываю актуально для версий &lt;strong&gt;Loki&lt;/strong&gt; после &lt;strong&gt;Loki 2.0&lt;/strong&gt;. Там было немного иначе, но смысла описывать я это не вижу так как продукт на рынке недавно и скорее всего вы будете работать с более новой версией, как и я.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loki 2.0&lt;/strong&gt; дал возможность использовать одно единое хранилище для индекса и фрагмента, благодаря механизму под названием &lt;code class=&quot;highlighter-rouge&quot;&gt;boltdb-shipper&lt;/code&gt;. Люди близкие к этому творению дали ему имя &lt;strong&gt;Single Store Loki&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;индексы-и-фрагменты&quot;&gt;Индексы и фрагменты&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как мы уже знаем данные хранятся в &lt;code class=&quot;highlighter-rouge&quot;&gt;фрагментах (chunks)&lt;/code&gt;. &lt;strong&gt;Loki&lt;/strong&gt; принимает логи в отдельных &lt;code class=&quot;highlighter-rouge&quot;&gt;потоках (streams)&lt;/code&gt;, каждый из которых имеет свой уникальный &lt;code class=&quot;highlighter-rouge&quot;&gt;идентификатор (ID)&lt;/code&gt; и его набор &lt;code class=&quot;highlighter-rouge&quot;&gt;меток (labels)&lt;/code&gt;. Далее всё сжимается в &lt;code class=&quot;highlighter-rouge&quot;&gt;фрагментах (chunks)&lt;/code&gt; и записывается в хранилище данных.&lt;/p&gt;

&lt;p&gt;Индексы же хранят информацию о наборе &lt;code class=&quot;highlighter-rouge&quot;&gt;меток (labels)&lt;/code&gt; и их связях с отдельными &lt;code class=&quot;highlighter-rouge&quot;&gt;фрагментами (chunks)&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;table-manager&quot;&gt;Table Manager&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Table Manager&lt;/strong&gt; - это один из субкомпонентов в &lt;strong&gt;Loki&lt;/strong&gt;. &lt;strong&gt;Loki&lt;/strong&gt; поддерживает хранение индексов и фрагментов (chunks) в табличных хранилищах данных. Благодаря этому создаётся множество таблиц за определённое время. Каждая такая таблица также называется периодической таблицей, в которой хранятся данные за определённое время. Это время конечно же можно изменить.&lt;/p&gt;

&lt;p&gt;По задумке разработчиков благодаря такому типу хранения вы получаете следующие преимущества:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Изменения конфигурации схемы: каждая таблица привязана к конфигурации и версии схемы, благодаря чему вы можете вносить изменения в схему в любой момент. Если проще новые данные принимают новую схему, а старые используют старую, вы просто указываете с какого времени применяется та или иная схема.&lt;/li&gt;
  &lt;li&gt;Операции удаления происходят гораздо быстрее&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Не все типы хранилищ поддерживают использование &lt;strong&gt;Table Manager&lt;/strong&gt;, список поддерживающих можно проверить на &lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/storage/table-manager/&quot;&gt;офф сайте&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;таблицы-и-конфигурация-схемы&quot;&gt;Таблицы и конфигурация схемы&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Периодические таблицы хранят данные индекса или фрагмента относительно определенного периода времени. И как я уже сказал это время можно изменить:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;schema_config&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;configs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;2023-02-23&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;boltdb-shipper&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;object_store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;filesystem&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;schema&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;v12&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;prefix&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;index_&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;period&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;24h | default = 168h    &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;	&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;prefix&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;chunk_&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;	&lt;/span&gt;    &lt;span class=&quot;s&quot;&gt;period&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;24h | default = 168h&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также раздел &lt;code class=&quot;highlighter-rouge&quot;&gt;schema_config&lt;/code&gt; может содержать не только одну конфигурацию схемы, как мы уже и говорили. Всё благодаря &lt;strong&gt;from&lt;/strong&gt; где вы как раз и указываете с какого момента начинает действовать схема. Самая ближняя конфигурация по дате к сегодняшнему числу является активной конфигурацией схемы. &lt;em&gt;Значение period должно быть кратно 24 часам&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Т.е. если мы возьмём промежуток в неделю, то у нас с конфигурацией как выше должно быть 7 таблиц.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/loki/tables-and-schema-1.png&quot; alt=&quot;Loki Tables and schema config&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Данные при записи попадают в ту таблицу, которая отвечает за тоже время что и в логируемом событии. Т.е. если метка времени в данных сегодняшняя, то и таблица в которую данные помещаются тоже сегодняшняя, как правило так происходит всегда. Правда если вы отправляете данные с устаревшей меткой то они будут в текущей таблице.&lt;/p&gt;

&lt;p&gt;Поэтому по умолчанию вы не сможете загрузить в &lt;strong&gt;Loki&lt;/strong&gt; данные с устаревшей меткой времени.  С одной стороны это выглядит странно, но с другой это фича.&lt;/p&gt;

&lt;p&gt;Если вам нужно залить старые данные, то можно изменить конфигурацию:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;reject_old_samples&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;true | default = false&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;reject_old_samples_max_age&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;168h | default = 336h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создание-таблицы&quot;&gt;Создание таблицы&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Таблицы создаются немного заранее запланированного времени, для того чтобы как только появилась необходимость писать данные в новую таблицу она уже была создана.&lt;/p&gt;

&lt;p&gt;Также вы можете задать вручную время через которое будет создаваться новая таблица, но только создаваться а не использоваться. Причём значение может сработать как до так и после времени необходимости создания. Такая вот нелогичная штука, но мне кажется в целом создаваться будет только до необходимого времени.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;table_manager&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;creation_grace_period&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;20m | default = 10m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;хранение-retention&quot;&gt;Хранение (Retention)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию возможность удаления старых логов выключена и понятно почему. Но если вдруг вам это необходимо можно включить эту опцию и задать время хранения данных.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;table_manager&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;retention_deletes_enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;retention_period&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;4d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. при такой конфигурации &lt;strong&gt;Table Manager&lt;/strong&gt; будет хранить только те таблицы, в которых данные не старее 4 дней с сегодняшнего дня. Причём мы помним что удаляется таблица целиком, поэтому не удивляемся если данные за 5 день всё еще присутствуют, если &lt;code class=&quot;highlighter-rouge&quot;&gt;period&lt;/code&gt; конечно в &lt;em&gt;schema_config&lt;/em&gt; 24h. Нужно дождаться чтобы день закончился полностью.&lt;/p&gt;

&lt;p&gt;В целом чтобы узнать за какое время будут сохранены ваши данные можно воспользоваться формулой:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;number_of_tables_to_keep = (retention_period / table_period) + 1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. если брать во внимание все настройки как в этой статье мы получаем 5 дней. Получается что всё старее 5 дней будет удаленно, но не сразу.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;5 дней = (4 дня / 1 день) + 1 день
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/loki/tables-and-schema-2.png&quot; alt=&quot;Loki Tables retention period&quot; /&gt;&lt;/p&gt;

&lt;p&gt;И последняя ремарка значение &lt;strong&gt;retention_period&lt;/strong&gt; должно быть кратно 24 часам как и значение &lt;strong&gt;period&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;всё-настроено-на-индексы-не-удаляются&quot;&gt;Всё настроено, на индексы не удаляются&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Во время тестирования я столкнулся с тем что после истечения времени мои старые индексы не удалялись. Т.е. время жизни индекса превышало &lt;code class=&quot;highlighter-rouge&quot;&gt;number_of_tables_to_keep&lt;/code&gt; но сами индексы не удалялись.&lt;/p&gt;

&lt;p&gt;И вот я наткнулся на информацию об &lt;a href=&quot;https://grafana.com/docs/loki/latest/upgrading/#the-single-binary-no-longer-runs-a-table-manager&quot;&gt;обновлении&lt;/a&gt; где сказано что &lt;strong&gt;The single binary no longer runs a table-manager&lt;/strong&gt;. Т.е. возможно &lt;strong&gt;table-manager&lt;/strong&gt; у меня и не работает?&lt;/p&gt;

&lt;p&gt;Но вот при каких условиях он собственно и не работает:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Вы запускаете бинарный файл &lt;strong&gt;loki&lt;/strong&gt; с опцией &lt;code class=&quot;highlighter-rouge&quot;&gt;-target=all&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Вы запускаете бинарный файл &lt;strong&gt;loki&lt;/strong&gt; без опции, но по умолчанию значение всё также &lt;code class=&quot;highlighter-rouge&quot;&gt;-target=all&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Запуск одного бинарного &lt;strong&gt;Loki&lt;/strong&gt; с любым типом индекса, кроме &lt;em&gt;boltdb-shipper&lt;/em&gt; или &lt;em&gt;boltdb&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Если вы активировали опции &lt;code class=&quot;highlighter-rouge&quot;&gt;retention_deletes_enabled&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;retention_period&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Первый способ выйти из положения это запустить с &lt;code class=&quot;highlighter-rouge&quot;&gt;-target=all,table-manager&lt;/code&gt;, что кстати сами разработчики не рекомендуют делать.&lt;/p&gt;

&lt;p&gt;Но суть в в том что в моем случае я и так запускал без &lt;code class=&quot;highlighter-rouge&quot;&gt;-target=all&lt;/code&gt; а именно &lt;code class=&quot;highlighter-rouge&quot;&gt;-target=write&lt;/code&gt; и -&lt;code class=&quot;highlighter-rouge&quot;&gt;target=read&lt;/code&gt;. Но как только я добавил &lt;code class=&quot;highlighter-rouge&quot;&gt;table-manager&lt;/code&gt; старые индексы удалились.&lt;/p&gt;

&lt;p&gt;И второй способ это отказаться от &lt;strong&gt;table-manager&lt;/strong&gt; и использовать &lt;strong&gt;compactor&lt;/strong&gt;, который кстати работает только с хранилищем &lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/storage/retention/&quot;&gt;boltdb-shipper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;На самом деле тут мне кажется ребята немного перемудрили и это первое что мне не совсем понравилось в этом продукте.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;активныенеактивные-таблицы&quot;&gt;Активные/неактивные таблицы&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как вы уже поняли таблицы могут быть как активными так и не активными. Ну и я думаю логично что активной является та таблица, период которой попадает под сегодняшний день. Но на момент написания статьи это актуально только для &lt;strong&gt;DynamoDB storage&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 11 Apr 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/how-loki-stores-data</link>
        <guid isPermaLink="true">http://www.tipoit.kz/how-loki-stores-data</guid>
        
        <category>grafana</category>
        
        <category>loki</category>
        
        <category>monitoring</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Обновление</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/YL-MbBx3-Gg&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Перед тем как решится обновить ваш сервер &lt;strong&gt;MinIO&lt;/strong&gt; рекомендуется сперва протестировать новую версию на отдельном тестовом сервере.&lt;/p&gt;

&lt;p&gt;Также рекомендуется проверять что именно нового было реализовано смотря информацию о &lt;a href=&quot;https://github.com/minio/minio/releases&quot;&gt;релизах&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;checklist&quot;&gt;Checklist&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перед обновлением просмотрите все элементы в следующем контрольном списке:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Тестирование на неважных серверах (staging, test, demo)&lt;/li&gt;
  &lt;li&gt;Обновляйте только при необходимости
&lt;strong&gt;MinIO&lt;/strong&gt; идёт по пути быстрой разработки, при которой в неделю может быть несколько релизов. И не факт что вам нужен этот релиз.&lt;/li&gt;
  &lt;li&gt;Обновления требуют одновременного перезапуска. 
Мы уже говорили о том что не рекомендуется перезапускать ноды &lt;strong&gt;MinIO&lt;/strong&gt; по отдельности, и обновление тут не исключение. Нужно делать всё одновременно.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;обновление&quot;&gt;Обновление&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;1-обновляем-на-каждой-ноде&quot;&gt;1. Обновляем на каждой ноде&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Качаем новый пакет и обновляем одним из возможных методом.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-update-2.png&quot; alt=&quot;minio update&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Обновление с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;RPM (RHEL)&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio-20220519182059.0.0.x86_64.rpm -O minio.rpm
sudo dnf update minio.rpm -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Обновление с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;DEB(UBUNTU)&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio_20220519182059.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Обновление бинарный файл
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio
sudo mv minio /usr/local/bin/
sudo chmod +x /usr/local/bin/minio
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;2-перезапуск-сервиса-на-каждой-ноде&quot;&gt;2. Перезапуск сервиса на каждой ноде&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Выполните &lt;code class=&quot;highlighter-rouge&quot;&gt;systemctl restart minio&lt;/code&gt; одновременно на всех узлах развертывания. Опять таки не забываем о том что нужно выполнять одновременно на всех нодах.&lt;/p&gt;

&lt;p&gt;Но лучше просто воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;mc admin service restart alias&lt;/code&gt;, которая сама перезапустить все нода в пуле.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;обновление-с-помощью-клиента&quot;&gt;Обновление с помощью клиента&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;mc admin update ALIAS&lt;/code&gt; вы также можете обновить все бинарные файлы сервера &lt;strong&gt;MinIO&lt;/strong&gt; перед одновременным перезапуском всех узлов. Т.е. перезапуск всех нод в пуле серверов произойдёт автоматически.&lt;/p&gt;

&lt;p&gt;Если вы вдруг хотите выкачать бинарные файлы &lt;strong&gt;MinIO&lt;/strong&gt; по другому &lt;em&gt;URL&lt;/em&gt; (например, прокси репозиторий) то можно воспользоваться командой &lt;code class=&quot;highlighter-rouge&quot;&gt;mc admin update ALIAS https://minio-mirror.example.com/minio&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;обновление-minio-client&quot;&gt;Обновление MinIO client&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также вам будет необходимо обновить и сам &lt;strong&gt;MinIO client&lt;/strong&gt; используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;mc update&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Либо выкачиваем bin файлы по ссылке &lt;a href=&quot;https://dl.min.io/client/mc/release/linux-amd64/mc&quot;&gt;https://dl.min.io/client/mc/release/linux-amd64/mc&lt;/a&gt; и заменяем файл &lt;strong&gt;mc&lt;/strong&gt; на новый.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решаем-ошибку-open-usrlocalbinminiocheck-perm-permission-denied&quot;&gt;Решаем ошибку open /usr/local/bin/.minio.check-perm: permission denied&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это ошибка говорит о том, что у пользователя, от которого запущен &lt;strong&gt;MinIO&lt;/strong&gt; нет прав на создание файлов в директории &lt;strong&gt;MinIO&lt;/strong&gt;. Т.е. вам просто нужно добавить права на запись для пользователя &lt;strong&gt;MinIO&lt;/strong&gt; на директорию в которой находится файл &lt;code class=&quot;highlighter-rouge&quot;&gt;minio&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;which minio
sudo chmod o+w /usr/local/bin
mc admin update ALIAS
sudo chmod o-w /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 21 Mar 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-update</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-update</guid>
        
        <category>minio</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Рекомендации</title>
        <description>&lt;p&gt;Если хотите узнать, что же нам рекомендуют для установки &lt;strong&gt;MinIO&lt;/strong&gt; то читаем об этом ниже.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;минимальное-количество-нод&quot;&gt;Минимальное количество нод&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При установке в &lt;code class=&quot;highlighter-rouge&quot;&gt;production&lt;/code&gt; среде &lt;strong&gt;MinIO&lt;/strong&gt; рекомендуется минимум &lt;strong&gt;4 ноды по 4 диска&lt;/strong&gt; на каждой ноде в одном пуле серверов. С таким подходом вы можете продолжать полную работу с пулом даже при потере 4 дисков либо одной ноды полностью.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MinIO&lt;/strong&gt; – популярный открытый сервер хранилища объектов, совместимый с сервисом облачных хранилищ &lt;em&gt;Amazon S3&lt;/em&gt;. Также немаловажным преимуществом проекта является возможность использования его в &lt;strong&gt;Kubernetes&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;серверное-оборудование&quot;&gt;Серверное оборудование&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В статье о &lt;strong&gt;MinIO&lt;/strong&gt; в &lt;a href=&quot;https://www.tipoit.kz/minio-distribution-mode&quot;&gt;распределенном режиме&lt;/a&gt; я уже упоминал что рекомендуется использовать одинаковое железо для всех нод в пуле.&lt;/p&gt;

&lt;p&gt;Сам &lt;strong&gt;MinIO&lt;/strong&gt; не зависит от архитектуры сервера. Но, как и везде есть рекомендуемые минимальные требования для серверов, правда если вы используете для хранения больших объёмов данных. На самом официальном сайте не указано что они подразумевают под большим объёмом данных.&lt;/p&gt;

&lt;p&gt;Таблица минимальных системных требований:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Тип&lt;/th&gt;
      &lt;th&gt;Значение&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Процессор&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Два процессора Intel Xeon Scalable Gold с 8 ядрами на сокет.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Память&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;128GB для каждой ноды&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Сеть&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Минимум 25GbE NIC и поддерживающая сетевая инфраструктура между узлами.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Диски&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;SATA/SAS NVMe/SSD с минимум 8 дисками на сервер. Также рекомендации по дискам вы можете найти в этой статье.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;выделение-памяти&quot;&gt;Выделение памяти&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Общее хранилище&lt;/th&gt;
      &lt;th&gt;ОЗУ&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;До 1 Тебибайта (Ti)&lt;/td&gt;
      &lt;td&gt;8GiB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;До 10 Тэбибайт (Ti)&lt;/td&gt;
      &lt;td&gt;16GiB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;До 100 Тэбибайт (Ti)&lt;/td&gt;
      &lt;td&gt;32GiB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;До 1 Пебибайта (Pi)&lt;/td&gt;
      &lt;td&gt;64GiB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Больше 1 Пебибайта (Pi)&lt;/td&gt;
      &lt;td&gt;128GiB&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Tue, 21 Mar 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-recomendtions</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-recomendtions</guid>
        
        <category>minio</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Создание пользователя</title>
        <description>&lt;p&gt;На самом деле тут ничего такого сложного чтобы об этом писать. Но вот можно по невнимательности наступить на грабли.&lt;/p&gt;

&lt;p&gt;Суть в том, что при использовании модуля &lt;a href=&quot;https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html&quot;&gt;user&lt;/a&gt; пароль задаётся через переменную &lt;strong&gt;password&lt;/strong&gt;. Но есть одно, но, хоть в типе и написано &lt;em&gt;string&lt;/em&gt; если вы создаёте пользователя на &lt;em&gt;linux&lt;/em&gt; то значение нужно шифровать.&lt;/p&gt;

&lt;p&gt;Т.е. если вы просто напишите так, как снизу то работать это не будет.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Add user&lt;/span&gt; 
    &lt;span class=&quot;s&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;user&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;123456&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Да, задача выполниться успешно и даже создастся пользователь, но вот зайти в систему под ним вы не сможете. А в логах будет сверкать запись: &lt;strong&gt;pam_sss(sshd:auth): received for user : 10 (User not known to the underlying authentication module)&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-правильно&quot;&gt;Как правильно?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Правильный вариант создания пользователя с указанием пароля выглядит так (пароль 123456 не безопасный):&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{ {  pwd | password_hash('sha512') } }&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pwd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;123456&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 19 Mar 2023 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-user-create</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-user-create</guid>
        
        <category>ansible</category>
        
        <category>CI/CD</category>
        
        <category>devops</category>
        
        
      </item>
    
      <item>
        <title>Типы резервных копий</title>
        <description>&lt;p&gt;Я думаю в наше время администраторы уже в курсе что может произойти с данными если не делать резервные копии. Если ваш друг, знакомый еще этого не знает посоветуйте ему начать изучать эту тему. Может это спасёт его ж… от ненужных приключений в будущем.&lt;/p&gt;

&lt;p&gt;Вернёмся к теме, и рассмотри три основных типа резервных копий:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Полное резервное копирование (Full Backup)&lt;/li&gt;
  &lt;li&gt;Дифференциальное резервное копирование (Differential Backup)&lt;/li&gt;
  &lt;li&gt;Инкрементное резервное копирование (Incremental Backup)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;сравнительная-таблица&quot;&gt;Сравнительная таблица&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Тип резервного копирования&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
      &lt;th&gt;Преимущества&lt;/th&gt;
      &lt;th&gt;Недостатки&lt;/th&gt;
      &lt;th&gt;Применимость&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Полное (Full Backup)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Создается полная копия всех данных. Каждая новая резервная копия содержит все файлы, т.е. даже те что были обработаны ранее.&lt;/td&gt;
      &lt;td&gt;Простота восстановления&lt;/td&gt;
      &lt;td&gt;Создание резервной копии занимает много времени. Занимает много места на хранилище.&lt;/td&gt;
      &lt;td&gt;Как правило используется при первом резервном копировании, является базовой точкой восстановления&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Дифференциальное (Differential Backup)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Сохраняет изменения, произошедшие после последнего полного резервного копирования&lt;/td&gt;
      &lt;td&gt;Восстановление быстрее, нужны только последнее полное и последнее дифференциальное копии. Используется меньший объем хранилища.&lt;/td&gt;
      &lt;td&gt;Время выполнения увеличивается с ростом измененных данных&lt;/td&gt;
      &lt;td&gt;Оптимально для средне-критичных систем, когда необходимо сократить время восстановления, но при этом минимизировать использование хранилища&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Инкрементное (Incremental Backup)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Сохраняет только изменения, произошедшие после последнего резервного копирования (любого типа)&lt;/td&gt;
      &lt;td&gt;Минимальное использование дискового пространства. Резервная копия создаётся быстрее.&lt;/td&gt;
      &lt;td&gt;Восстановление занимает больше времени. Повышенный риск утери данных&lt;/td&gt;
      &lt;td&gt;Используется в высоконагруженных системах с частым резервным копированием, когда важна экономия ресурсов хранения.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Теперь же рассмотрим преимущества и недостатки каждого типа подробнее.&lt;/p&gt;

&lt;h3 id=&quot;полное-резервное-копирование-full-backup&quot;&gt;Полное резервное копирование (Full Backup)&lt;/h3&gt;

&lt;p&gt;Полная резервная копия является самой первой точкой восстановления в цепочке резервных копий, соответственно не создавать Полную резервную копию не получится.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-BackupTypes-1.drawio.png&quot; alt=&quot;Full Backup&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;плюсы&quot;&gt;➕Плюсы&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Простота восстановления&lt;/strong&gt;: Для восстановления вам не нужно использовать много файлов резервной копии, а точнее нужен всего один файл.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;минусы&quot;&gt;➖Минусы&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Занимает много места на хранилище&lt;/strong&gt;: Опять же копия включает в себя все данные. При этом каждая последующая резервная копия включает в себя копию данных с прошлой резервной копии.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Создание резервной копии занимает много времени&lt;/strong&gt;: Так как резервная копия включает в себя все данные с момента существования время создания резервной копии увеличивается.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;дифференциальное-резервное-копирование-differential-backup&quot;&gt;Дифференциальное резервное копирование (Differential Backup)&lt;/h3&gt;

&lt;p&gt;Дифференциальная резервная копия зависит от Полной резервной копии и включает в себя только изменённые данные с момента создания последней резервной копии. Каждая последующая Дифференциальная резервная копирования включает данные предыдущей, так что хранить все дифференциальные копии не обязательно.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-BackupTypes-2.drawio.png&quot; alt=&quot;Differential Backup&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;плюсы-1&quot;&gt;➕Плюсы&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Восстановление быстрее&lt;/strong&gt;: Если у вас уже восставлена полная резервная копия, то достаточно восстановить только последнюю Дифференциальную резервную копию, созданную после полной резервной копии. Как правило дифференциальная резервная корпия весит меньше и соответственно восстанавливается быстрее.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Используется меньший объем хранилища&lt;/strong&gt;: Так как сохраняются только измененные данные после полного резервного копирования занимает меньше места на диске, по сравнению с полной резервной копией. Если у вас дифференциальная резервная копия весит столько же сколько, и полная есть смысл пересмотреть стратегию создания резервных копий.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;минусы-1&quot;&gt;➖Минусы&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Время выполнения увеличивается с ростом измененных данных&lt;/strong&gt;: По мере роста изменённых данных Дифференциальная резервная копия может значительно вырасти в объёме.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;инкрементное-резервное-копирование-incremental-backup&quot;&gt;Инкрементное резервное копирование (Incremental Backup)&lt;/h3&gt;

&lt;p&gt;Инкрементное резервное копирование является самой последней точкой в цепочке, т.е. зависит как от полной резервной копии, так и от дифференциальной. При восстановлении сначала придётся восстановить полную резервную копии, и если была создана дифференциальная, то и её тоже.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/veeam-BackupTypes-3.drawio.png&quot; alt=&quot;Incremental Backup&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;плюсы-2&quot;&gt;➕Плюсы&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Минимальное использование дискового пространства&lt;/strong&gt;: Как правило задача создания Инкрементной резервной копии запускается чаще всех остальных типов, например, каждые 5 минут. Соответственно за 5 минут в принципе не может произойти много изменений.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Резервная копия создаётся быстрее&lt;/strong&gt;: Так как изменений не так много то и сама резервная копия создаётся быстрее.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;минусы-2&quot;&gt;➖Минусы&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Восстановление занимает больше времени&lt;/strong&gt;: Так как задача создания резервной копии запускается каждые 5 минут для примера, то и файлов резервных копий может быть сотни. Соответственно, чтобы восстановить актуальное состояние данных придётся поочередно восстановить все эти 100 файлов, помимо полной резервной копии. Поэтому рекомендуется время от времени делать Дифференциальные резервные копии.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Повышенный риск утери данных&lt;/strong&gt;: Легче потерять один файл из 100. А если вы теряете какой-то файл, то все последующие файлы резервных копий становятся неактуальными.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;рекомендации&quot;&gt;Рекомендации&lt;/h3&gt;

&lt;p&gt;Каким образом настраивать создание резервной копии зависит от вас, а точнее от того за какое время бизнес может позволить себе потерять данные. Давайте представим, что вы можете потерять данные за последние 15 минут. В таком случае схема создания резервных копий будет следующая:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Раз в месяц создаётся полная резервная копия. Если размер полной резервной копии не большой, то можно делать и раз в неделю.&lt;/li&gt;
  &lt;li&gt;Каждые 8 часов создаётся дифференциальная резервная копий. Опять же если размер не большой, то можно и почаще.&lt;/li&gt;
  &lt;li&gt;Каждые 15 минут создаётся инкрементная резервная копия&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Не забывайте мониторить состояние задач создания резервных копий, может так получится что резервные копии не создаются, и вы даже не узнаете про это.&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Mar 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/backup-types</link>
        <guid isPermaLink="true">http://www.tipoit.kz/backup-types</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Что такое Непрерывная защита данных (CDP)</title>
        <description>&lt;p&gt;&lt;strong&gt;Непрерывная защита данных (Continuous Data Protection)&lt;/strong&gt; -  это технология в Veeam Backup &amp;amp; Replication для защиты критически важных виртуальных машин VMware. CDP предоставляет метод моментального восстановления виртуальной машины при выходит из строя. Т.е. если у вас есть виртуальные машины, недоступность которых не должна превышать секунды (критически важные), то можно для доступности использовать CDP.&lt;/p&gt;

&lt;p&gt;Но к сожалению, использовать Непрерывную защиту данных (CDP) вы можете только если у вас есть ицензия Enterprise Plus.&lt;/p&gt;

&lt;h3 id=&quot;репликация-данных&quot;&gt;Репликация данных&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;В самом начале CDP создаёт реплику ВМ и в последствии постоянно обновляет реплику до состояния источника&lt;/strong&gt;. После создания реплики CDP постоянно реплицирует операции ввода-вывода, выполняемые на виртуальной машине источника. При этом в процессе репликации не используется механизм моментальных снимков ВМ (snapshot), вместо этого используется vSphere API. Это позволяет достичь более низкой целевой точки восстановления (RPO) по сравнению с репликацией на основе моментальных снимков.&lt;/p&gt;

&lt;p&gt;Данные об операциях ввода-вывода хранятся в целевом хранилище данных и относятся к краткосрочным точкам восстановления. Краткосрочные точки восстановления позволяют восстановить ВМ до состояния на секунды или минуты назад (в зависимости от указанного вами RPO) в случае необходимости. Информация о краткосрочных точках восстановления хранится в специальном журнале. Этот журнал хранит записи о краткосрочных точках восстановления максимум в течение 24 часов. Если вы хотите восстановить ВМ до более старого состояния, Veeam Backup &amp;amp; Replication позволяет создавать дополнительные точки восстановления, которые содержат состояние ВМ до часов или дней назад. Такие точки восстановления называются &lt;strong&gt;долгосрочными точками восстановления&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;восстановление-данных&quot;&gt;Восстановление данных&lt;/h3&gt;

&lt;p&gt;Чтобы восстановить виртуальную машину до краткосрочной или долгосрочной точки восстановления, необходимо выполнить аварийный переход на ее реплику.&lt;/p&gt;

&lt;p&gt;При переходе на реплику, реплика берет на себя роль исходной виртуальной машины, т.е. становится главной и обрабатывает все запросы. После того, как исходная виртуальная машина будет восстановлена (та которая вышла из строя), вы можете вернуться на нее и перенести все изменения, произошедшие в реплике, на исходную виртуальную машину. Если исходная виртуальная машина не может быть восстановлена, вы можете выполнить постоянный переход на резерв, то есть навсегда переключиться с исходной виртуальной машины на реплику виртуальной машины и использовать эту реплику в качестве исходной виртуальной машины.&lt;/p&gt;

&lt;h3 id=&quot;как-работает-cdp-во-время-репликации&quot;&gt;Как работает CDP во время репликации&lt;/h3&gt;

&lt;p&gt;Рабочий процесс CDP во время репликации делится на две части: настройка компонентов инфраструктуры резервного копирования и передача данных.&lt;/p&gt;

&lt;h4 id=&quot;алгоритм-конфигурации-компонента&quot;&gt;Алгоритм конфигурации компонента&lt;/h4&gt;

&lt;p&gt;Следующие шаги выполняются при первом запуске CDP:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Сервис координатора Veeam CDP&lt;/strong&gt; считывает параметры политики из базы данных конфигурации и создает список ВМ для обработки. Для каждой ВМ, добавленной в политику CDP, Veeam Backup &amp;amp; Replication создает новую задачу.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Сервис координатора Veeam CDP&lt;/strong&gt; проверяет доступность необходимых компонентов инфраструктуры резервного копирования&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Служба координатора Veeam CDP&lt;/strong&gt; запрашивает информацию о виртуальных машинах, добавленных в политику CDP, и хостах виртуализации из vCenter Server&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Служба координатора Veeam CDP&lt;/strong&gt; запрашивает у vCenter Server создание на целевом хосте пустых реплик с той же конфигурацией, что и у исходных ВМ, но с пустыми виртуальными дисками. vCenter Server регистрирует созданные реплики&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Служба координатора Veeam CDP&lt;/strong&gt; запрашивает vCenter для применения политики хранения Veeam CDP Replication к виртуальным дискам ВМ на исходных хостах ESXi. Эта политика хранения добавляет компонент, который требуется для CDP и который получает данные всех операций ввода-вывода&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Служба координатора Veeam CDP&lt;/strong&gt; выбирает, какие прокси-серверы VMware CDP будут использоваться для передачи данных, и устанавливает ряд правил для передачи данных, например, правила регулирования сетевого трафика и т. д.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Veeam CDP Coordinator Service&lt;/strong&gt; отправляет в компоненты инфраструктуры резервного копирования конфигурации, необходимые для CDP. Эта конфигурация включает в себя такую информацию, как RPO, краткосрочные и долгосрочные настройки хранения.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;После завершения начальной настройки Veeam Backup &amp;amp; Replication начинает мониторинг инфраструктуры резервного копирования. Если что-то меняется в настройках инфраструктуры или политики CDP, Veeam Backup &amp;amp; Replication перенастраивает компоненты. Например, добавление нового устройства в ВМ источника приведёт к тому же действию на реплике ВМ.&lt;/p&gt;

&lt;h4 id=&quot;алгоритм-передачи-данных&quot;&gt;Алгоритм передачи данных&lt;/h4&gt;

&lt;p&gt;Передача данных начинается сразу после настройки компонента CDP и отличается на этапе начальной и инкрементной синхронизации.&lt;/p&gt;

&lt;p&gt;Начальная синхронизация выполняется при первом переносе данных с диска на целевой хост. В этот момент Veeam Backup &amp;amp; Replication отправляет полные копии виртуальных дисков и создает первые точки восстановления.&lt;/p&gt;

&lt;p&gt;В ходе инкрементальной синхронизации передаются только изменения, внесенные в виртуальные диски, что позволяет создавать как краткосрочные, так и долгосрочные точки восстановления. Подробнее о процессе репликации CDP, точках восстановления и связанных файлах можно узнать &lt;a href=&quot;https://www.tipoit.kz/veeam-cdp-hain&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;h5 id=&quot;алгоритм-передачи-данных-во-время-начальной-синхронизации&quot;&gt;Алгоритм передачи данных во время начальной синхронизации&lt;/h5&gt;

&lt;ol&gt;
  &lt;li&gt;На исходном хосте фильтр ввода-вывода считывает все данные с дисков виртуальной машины и отправляет их на исходные &lt;strong&gt;прокси-серверы VMware CDP&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Служба Veeam CDP Proxy&lt;/strong&gt; на исходных прокси-серверах сжимает полученные данные и отправляет их на целевой прокси-сервер&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Служба Veeam CDP Proxy&lt;/strong&gt; на целевых прокси-серверах распаковывает полученные данные. Затем отправляет данные на целевой хост.&lt;/li&gt;
  &lt;li&gt;Фильтр ввода-вывода на целевом хосте сохраняет полученные данные на виртуальных дисках. Сохраненные данные относятся к самой первой долгосрочной точке восстановления. Эта точка восстановления устойчива к сбоям.&lt;/li&gt;
&lt;/ol&gt;

&lt;h5 id=&quot;алгоритм-передачи-данных-во-время-инкрементальной-синхронизации&quot;&gt;Алгоритм передачи данных во время инкрементальной синхронизации&lt;/h5&gt;

&lt;ol&gt;
  &lt;li&gt;На исходном хосте фильтр ввода-вывода перехватывает данные всех операций ввода-вывода и отправляет эти данные на &lt;strong&gt;исходные прокси-серверы VMware CDP&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Попав в RPO, &lt;strong&gt;Veeam CDP Proxy Service&lt;/strong&gt; на исходных прокси-серверах подготавливает данные, необходимые для краткосрочной точки восстановления. Для этого &lt;strong&gt;Veeam CDP Proxy Service&lt;/strong&gt; получает последнее состояние данных, накопленных исходными прокси-серверами VMware CDP.&lt;/li&gt;
  &lt;li&gt;Исходный &lt;strong&gt;прокси-сервер Veeam CDP&lt;/strong&gt; сжимает данные и отправляет их на целевой прокси-сервер.&lt;/li&gt;
  &lt;li&gt;Целевой &lt;strong&gt;Veeam CDP Proxy Service&lt;/strong&gt; распаковывает полученные данные. Затем отправляет данные на целевой хост.&lt;/li&gt;
  &lt;li&gt;Фильтр ввода-вывода на целевом хосте сохраняет полученные данные в журналах транзакций.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;статусы-политики-cdp&quot;&gt;Статусы политики CDP&lt;/h3&gt;

&lt;p&gt;В зависимости от рабочего процесса политики CDP могут иметь следующие статусы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Initial sync&lt;/em&gt; - выполняется процесс начальной синхронизации&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Syncing&lt;/em&gt; - выполняется процесс инкрементальной синхронизации&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;CBT mode&lt;/em&gt; - реплика на целевом хосте неактуальная&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Success, Warning or Error&lt;/em&gt; - результат выполнения&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 16 Mar 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-what-is-cdp</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-what-is-cdp</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Цепочка репликации CDP</title>
        <description>&lt;p&gt;&lt;strong&gt;Цепочка репликации CDP&lt;/strong&gt; - это последовательность файлов, которые позволяют вам откатить реплику ВМ на определённое время в процессе аварийного переключения между источником и репликой. Veeam Backup &amp;amp; Replication создаёт эти цепочки для каждой ВМ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Цепочка репликации CDP&lt;/strong&gt; содержит краткосрочные и долгосрочные точки восстановления. Краткосрочные точки восстановления позволяют откатиться на несколько секунд или минут назад, долгосрочные же на несколько часов или даже дней назад.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Цепочка репликации CDP&lt;/strong&gt; (те самые файлы) хранятся на том же хранилище, где и целевая ВМ (target), в той же папке что и сама ВМ. Цепочка репликации содержит следующие файлы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;VMX&lt;/strong&gt; - файл конфигурации ВМ реплики&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;VMDK&lt;/strong&gt; - виртуальные диска ВМ реплики
 VMDK файлы делятся на 4 наименования:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;disk_name&amp;gt;.vmdk&lt;/code&gt; - файл полной копии диска, который создаётся при начальной синхронизации и обозначается как самая первая долгосрочная точка восстановления.&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;disk_name&amp;gt;-&amp;lt;index&amp;gt;.vmdk&lt;/code&gt; - файлы, в которых хранится инкрементальные данные, т.е. данные изменённые после создания полной копии диска, также называемые как данные дельта-диска.&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;disk_name&amp;gt;-&amp;lt;index&amp;gt;.tlog.vmdk&lt;/code&gt; - файлы журнала транзакций, в которых хранятся инкрементные изменения, внесенные в виртуальные диски в течение RPO, установленного в параметрах политики CDP. Эти файлы относятся к Краткосрочным точкам восстановления. Один файл может содержать данные нескольких точек восстановления. Новый файл транзакции создаётся в следующих случаях:
        &lt;ul&gt;
          &lt;li&gt;Когда размер файла журнала транзакций составляет 512 ГБ&lt;/li&gt;
          &lt;li&gt;После создания долгосрочной точки восстановления&lt;/li&gt;
          &lt;li&gt;При достижении лимита создания точки восстановления. Например, если установить краткосрочное хранение на 1 час, новый файл журнала транзакций будет создаваться каждый час.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;disk_name&amp;gt;-interim.vmdk&lt;/code&gt; - файлы для защитных виртуальных дисков. При выполнении аварийного переключения изменения, внесенные в виртуальные диски, будут записаны в эти файлы.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;VMFD&lt;/strong&gt; - файлы, хранящие метаданные для дисков&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;META&lt;/strong&gt; - файлы, хранящие метаданные для журналов транзакций&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Обратите внимание что VMDK выглядят как снимок ВМ, но это не снимки. Эти файлы создаются фильтром ввода-вывода, установленным на целевом хосте ESXI.&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Mar 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-cdp-hain</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-cdp-hain</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Гарантированная доставка CDP</title>
        <description>&lt;p&gt;В CDP для доставки данных между двумя площадками (репликация ВМ) используется множество протоколов TCP, не бойтесь мы не будем их рассматривать. Может так произойти что Veeam Backup &amp;amp; Replication по какой-то причине не сможет доставить все измененные данные с ВМ целевой площадки на конечную площадку при репликации. Для примера, если RPO мал, то может не хватить физических ресурсов для поддержания актуальной реплики, или CDP прокси могут быть недоступны. Это делает данные несогласованными и приводит к потере точек восстановления. Т.е. для вас это ничем хорошим не закончится.&lt;/p&gt;

&lt;p&gt;Для того чтобы такого не произошло используется специальный механизм, который гарантирует доставку. &lt;strong&gt;Гарантированная доставка (Guaranteed Delivery)&lt;/strong&gt; в Veeam CDP – это механизм, который обеспечивает передачу всех изменений данных на виртуальных машинах в реплику (вторичную площадку) без потерь. Для этого используется специальный &lt;strong&gt;драйвер (I/O Filter)&lt;/strong&gt; на уровне гипервизора ESXI.&lt;/p&gt;

&lt;p&gt;Фильтр ввода-вывода на исходном хосте ESXI имеет механизм, который отслеживает измененные блоки данных - &lt;strong&gt;отслеживание изменений&lt;/strong&gt;. Фильтр ввода-вывода удаляет адреса блоков данных из списка измененных блоков только после получения от целевого хоста ESXI (вторичная площадка) подтверждающего сообщения о том, что блоки данных были успешно сохранены в реплике. Кроме того, прокси-серверы VMware CDP также хранят изменения данных до тех пор, пока от целевого хоста не будет получено подтверждающее сообщение.&lt;/p&gt;

&lt;h3 id=&quot;использование-специального-драйвера-io-filter-на-уровне-гипервизора&quot;&gt;Использование специального драйвера (I/O Filter) на уровне гипервизора&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;При включённом CDP Veeam Backup &amp;amp; Replication устанавливает специальный I/O-фильтр (драйвер), интегрированный с VMware vSphere (через VAIO – vSphere API for I/O Filtering). Этот фильтр перехватывает каждый блок данных при записи на диск в режиме реального времени.&lt;/li&gt;
  &lt;li&gt;Благодаря этому механизму &lt;strong&gt;изменённые данные целевой ВМ не смогут пройти незаметно для Veeam Backup &amp;amp; Replication&lt;/strong&gt;: всё, что записывается на исходный диск ВМ, учитывается драйвером и отправляется на целевой хост ESXi (вторичная площадка) и в последствии сохраняется на хранилище данных.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;проблемы-с-источником&quot;&gt;Проблемы с источником&lt;/h3&gt;

&lt;p&gt;Если источник не отправляет новые данные из-за большой нагрузки, то Veeam Backup &amp;amp; Replication дожидается пока эта нагрузка спадёт. После спада нагрузки Veeam Backup &amp;amp; Replication получает список измененных блоков данных, считывает эти блоки с диска и отправляет данные на целевой хост ESXI (вторичная площадка). После чего целевой хост сохраняет эти данные в хранилище данных.&lt;/p&gt;

&lt;p&gt;Если же из строя выходит CDP прокси на стороне источника Veeam Backup &amp;amp; Replication пытается выбрать другой прокси (если он есть) и выполняет отправку данных.&lt;/p&gt;

&lt;h3 id=&quot;проблемы-с-целевым-хостом&quot;&gt;Проблемы с целевым хостом&lt;/h3&gt;

&lt;p&gt;Если же из строя выходит CDP прокси на стороне целевой инфраструктуры (вторичная площадка) Veeam Backup &amp;amp; Replication пытается выбрать другой прокси (если он есть) и получает данные с CDP прокси источника.&lt;/p&gt;

&lt;p&gt;Если соединение между CDP прокси источника и целевым хостом (вторичная площадка) теряется, то Veeam Backup &amp;amp; Replication проверяет статус хоста. Если вдруг хост находится в режиме обслуживания (Maintenance) или выпал из кластера, то Veeam Backup &amp;amp; Replication начинает запись данных в реплику используя другой ESXI хост, если конечно другой хост имеет доступ к хранилищу, где расположена реплика ВМ. Если же хост просто недоступен из-за проблем с сетью (т.е. отображается в кластере), то Veeam Backup &amp;amp; Replication считает, что это временные проблемы и просто повторяет попытки отправки данных повторно через какое-то время.&lt;/p&gt;

&lt;h3 id=&quot;буферизация-и-транспорт-изменений&quot;&gt;Буферизация и транспорт изменений&lt;/h3&gt;

&lt;p&gt;Также стоит отметить что сведения о изменённых данных сначала помещаются в буфер прокси-сервера источника и только после этого отправляются на целевую сторону (вторичная площадка). Если по каким-то причинам прокси-сервер целевой стороны не принял данные, то прокси-сервер источника помечает эти данные как недоставленные и повторит попытку доставки позднее.&lt;/p&gt;

&lt;p&gt;Как правило это помогает избежать проблем доставки если у вас есть небольшие задержки по сети или канал связи между двумя сторонами постоянно обрывается.&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Mar 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-cdp-guaranteed-delivery</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-cdp-guaranteed-delivery</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Vcenter (ESXI) - invalid operation for device '0'</title>
        <description>&lt;p&gt;При попытке увеличить размер диска можно наткнуться на такую ошибку &lt;strong&gt;invalid operation for device ‘0’.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;На самом сайте &lt;strong&gt;vmware&lt;/strong&gt; я особо ничего полезного не нашёл. Там многие проблемы связывают с сетевым адаптером или с проблемами клонирования виртуальной машины.&lt;/p&gt;

&lt;p&gt;Также если у вас старая версия &lt;strong&gt;vcenter&lt;/strong&gt;, то можно попробовать увеличить размер диска через &lt;em&gt;java&lt;/em&gt; версию.  Но это не мой случай так как с версии &lt;strong&gt;vcenter&lt;/strong&gt; 7 нет поддержки &lt;em&gt;java&lt;/em&gt; версии.&lt;/p&gt;

&lt;p&gt;Кто-то решает данный вопрос подключением к &lt;strong&gt;esxi&lt;/strong&gt; через &lt;em&gt;vmware worksattion&lt;/em&gt;, но мне это не кажется хорошим вариантом, когда есть &lt;a href=&quot;https://www.tipoit.kz/tag/powershell/&quot;&gt;powershell&lt;/a&gt; и &lt;a href=&quot;https://developer.vmware.com/docs/powercli/latest/vmware.vimautomation.core/commands/set-harddisk/#UpdateHardDisk&quot;&gt;powercli&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-модуля-powercli&quot;&gt;Установка модуля PowerCLI&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Открываем консоль &lt;strong&gt;powershell&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выполняем установку модуля&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Install-Module -Name VMware.PowerCLI
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;подключаемся-к-vcenter&quot;&gt;Подключаемся к Vcenter&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем команду &lt;strong&gt;Connect-VIServer&lt;/strong&gt;, которой передаём адрес &lt;strong&gt;Vcenter&lt;/strong&gt;, пользователя и при желании пароль&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; Connect-VIServer -Server 10.23.112.235 -Protocol https -User admin -Password pass
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Port&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.23&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;112.235&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      			    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;443&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;проверяем-диски&quot;&gt;Проверяем диски&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем команду, которая покажет все диски виртуальной машины&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-HardDisk -vm vm1 | &lt;span class=&quot;nb&quot;&gt;Select &lt;/span&gt;Name,CapacityGB,Filename
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CapacityGB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Filename&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Hard&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Hard&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Hard&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;изменяем-размер-диска-на-виртуальной-машине&quot;&gt;Изменяем размер диска на виртуальной машине&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем &lt;strong&gt;Get-HardDisk&lt;/strong&gt; только уже необходимого диска передавая параметр &lt;code class=&quot;highlighter-rouge&quot;&gt;-name&lt;/code&gt; и меняем размер полученного командой &lt;strong&gt;Set-HardDisk&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-HardDisk -vm vm1 -name &lt;span class=&quot;s2&quot;&gt;&quot;Hard disk 3&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;-HardDisk -capacityGB 10
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CapacityGB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Filename&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Hard&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Hard&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Hard&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;В ответ на предупреждение нажимаем Y.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 09 Mar 2023 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-invalid-operation-for-device-0</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-invalid-operation-for-device-0</guid>
        
        <category>vcenter</category>
        
        <category>powershell</category>
        
        <category>powercli</category>
        
        
      </item>
    
      <item>
        <title>Grafana Loki - Анонимная статистика (stats.grafana.org/loki-usage-report)</title>
        <description>&lt;p&gt;Начнём с того что по умолчанию при использовании &lt;strong&gt;Grafana Mimir&lt;/strong&gt; отправляется анонимная статистика на https://stats.grafana.org. Хотя у меня статистика отправлялась и при использовании &lt;strong&gt;Loki&lt;/strong&gt;. Конечно же ничего плохого туда не отправляется по заверению самих разработчиков &lt;strong&gt;Grafana&lt;/strong&gt;. Подробнее по &lt;a href=&quot;https://grafana.com/docs/mimir/latest/operators-guide/configure/about-anonymous-usage-statistics-reporting/&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Но так или иначе всё же мне это не нравится, и я решил это отключить.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;отключаем-сбор-анонимной-статистики-в-grafana&quot;&gt;Отключаем сбор анонимной статистики в Grafana&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы запускаете просто через &lt;code class=&quot;highlighter-rouge&quot;&gt;cli&lt;/code&gt; то можно использовать опцию:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-usage-stats.enabled&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Или добавляем переменную в &lt;code class=&quot;highlighter-rouge&quot;&gt;yml&lt;/code&gt; файл настроек:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;usage_stats:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Или задаём настройки в файле конфигурации &lt;strong&gt;Grafana&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/grafana/grafana.ini
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;analytics&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;reporting_enabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;отключаем-сбор-анонимной-статистики-в-loki&quot;&gt;Отключаем сбор анонимной статистики в Loki&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Отключение сбора анонимной статистики в &lt;strong&gt;Grafana&lt;/strong&gt; еще не означает что вы выключили тоже самое и в &lt;strong&gt;Loki&lt;/strong&gt;. Для того чтобы отключить в &lt;strong&gt;Loki&lt;/strong&gt; правим файл конфигурации &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/loki/config.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim loki-config.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;analytics:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;reporting_enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 02 Mar 2023 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/loki-usage-report</link>
        <guid isPermaLink="true">http://www.tipoit.kz/loki-usage-report</guid>
        
        <category>grafana</category>
        
        <category>loki</category>
        
        <category>statistics</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Как настроить сеть в VirtualBox</title>
        <description>&lt;p&gt;На сегодняшний день существует уже куча приложений для виртуализации. И &lt;strong&gt;VirtualBox&lt;/strong&gt; один из них, и как правило почти каждая вторая виртуальная машина имеет доступ по сети. У каждой виртуальной машины своё предназначение, например, кому-то нужно просто протестировать ОС или просто запустить приложение, требующее определенную ОС.&lt;/p&gt;

&lt;p&gt;Зачастую использование виртуализации без сети для виртуальных машин затрудняет работу с ними, а иногда они и вовсе не нужны без доступа по сети к ним.&lt;/p&gt;

&lt;p&gt;И сегодня рассмотрим, как настроить эту чертову локальную сеть и ваше приложение наконец-то будет доступно из вне по локальной сети.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;требования&quot;&gt;Требования&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала убедитесь, что у вас уже установлен сам &lt;strong&gt;VirtualBox&lt;/strong&gt; и создана виртуальная машина.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;типы-сетей&quot;&gt;Типы сетей&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В таблице ниже рассмотрим какие типы сетей вы можете использовать в &lt;strong&gt;VirtualBox&lt;/strong&gt; и какие доступы вы будете иметь.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Тип сети&lt;/th&gt;
      &lt;th&gt;VM &amp;gt; Host&lt;/th&gt;
      &lt;th&gt;Host &amp;gt; VM&lt;/th&gt;
      &lt;th&gt;VM1 &amp;gt; VM2&lt;/th&gt;
      &lt;th&gt;VM &amp;gt; LAN&lt;/th&gt;
      &lt;th&gt;LAN &amp;gt; VM&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;NAT&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;Port forwarding&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;Port forwarding&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Bridged&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Internal&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Host-Only&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;NATservice&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;Port forwarding&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;Port forwarding&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Когда вы создаёте новую виртуальную машину (сервер) ему автоматом добавляется виртуальный сетевой адаптер (1 активный и 3 неактивных). Как правило хватает только одного сетевого активного адаптера. По умолчанию тип адаптера выставлен в &lt;strong&gt;NAT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/virtualbox/2023-02-07_12-22.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;nat&quot;&gt;NAT&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/MxBe_8RD5gs?si=kSoX0eNsXrUqz8PG&amp;amp;start=138&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/virtualbox-NAT.png&quot; alt=&quot;virtualbox NAT&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Не буду сильно расписывать о том, что это такое просто скажу, что при использовании такого типа происходит сопоставление IP-адреса с другим путем изменения заголовка IP-пакетов. И в этом случае IP-адрес вашей виртуальной машины будет из подсети 10.0.2.0. Отмечу что это самый простой способ дать доступ виртуальной машине к внешней сети.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-09_12-41.png&quot; alt=&quot;virtualbox NAT 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В таком режиме ваша виртуальная машина при выходе во вне через локальную сеть, например, выход в интернет будет прикидываться вами. Т.е. весь трафик будет идти с вашего локального IP-адреса. И понятное дело, что вы не сможете в таком режиме получить доступ к вашему виртуальному серверу по IP-адресу из подсети 10.0.2.0. Т.е. по сути у вашего виртуального сервера будет только исходящие соединения, но не входящие. Зато не надо ничего настраивать ни на хосте, ни на виртуальной машине.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Т.е. если вам просто нужен доступ в интернет и вас совсем не беспокоит что в итоге весь траффик по сети идёт от вашего локального компьютера то используем &lt;strong&gt;NAT&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Также если вам вдруг всё же очень сильно нужен &lt;strong&gt;NAT&lt;/strong&gt; и доступ к виртуальной машине из вне или локальной сети вы можете настроить &lt;strong&gt;Port Forwarding&lt;/strong&gt;. Но в таком случае для доступа к виртуальной машине нужно будет обращаться к IP-адресу хоста.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-14_11-57.png&quot; alt=&quot;virtualbox NAT 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Если вдруг вам не нравится какие IP-адреса назначаются вашим виртуальным машинам можете изменить это в настройках &lt;strong&gt;VirtualBox&lt;/strong&gt; (Менеджер сетей &amp;gt; NAT).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-09_12-48.png&quot; alt=&quot;virtualbox NAT 3&quot; /&gt;
&lt;img src=&quot;static/img/virtualbox/2023-02-09_12-50.png&quot; alt=&quot;virtualbox NAT 4&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;natservice&quot;&gt;NATservice&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/MxBe_8RD5gs?si=PrjITgXhvktDI90p&amp;amp;start=444&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;По сути тоже самое что и &lt;strong&gt;NAT&lt;/strong&gt; но плюс ещё вам станет доступна сеть виртуальных машин. Т.е вы сможете обратиться по сети с одной виртуальной машины на другую. Правда, чтобы был такой доступ эти виртуальные машины должны быть в одной сети.&lt;/p&gt;

&lt;p&gt;Сама сеть настраивается в (Менеджер сетей &amp;gt; NAT).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-09_12-48.png&quot; alt=&quot;virtualbox NAT 5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также как и в &lt;strong&gt;NAT&lt;/strong&gt; доступен &lt;strong&gt;Port Forwarding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-14_11-57.png&quot; alt=&quot;virtualbox NAT 6&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;bridged-networking-сетевой-мост&quot;&gt;Bridged networking (Сетевой мост)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/MxBe_8RD5gs?si=_trXzGWLuKtvuzng&amp;amp;start=556&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/virtualbox-Bridged.png&quot; alt=&quot;virtualbox Bridged networking&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Тут уже немного посложнее, суть в том, что виртуальная машина &lt;strong&gt;VirtualBox&lt;/strong&gt; подключается к одной из ваших сетевых карт на локальном хосте и обменивается сетевыми пакетами напрямую, минуя сетевой стек операционной системы хоста.&lt;/p&gt;

&lt;p&gt;Тут если у вас в сети нет &lt;code class=&quot;highlighter-rouge&quot;&gt;DHCP&lt;/code&gt; сервера, то придётся прописывать IP-адрес на виртуальной машине вручную. IP-адрес как правило из той же подсети что и IP-адрес на локальном хосте, с тем же шлюзом.&lt;/p&gt;

&lt;p&gt;При использовании такого типа подключения помимо доступа к интернету с виртуального хоста вы еще получаете и входящие подключения по IP-адресу виртуального хоста.&lt;/p&gt;

&lt;p&gt;Для примера представим ситуацию что у меня нет &lt;code class=&quot;highlighter-rouge&quot;&gt;DHCP&lt;/code&gt; сервера в следствии чего мои настройки будут следующими:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Локальный хост
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;DNS-суффикс&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подключения&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-адрес.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Маска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подсети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Основной&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;шлюз.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Виртуальная машина
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;DNS-суффикс&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подключения&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-адрес.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Маска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подсети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Основной&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;шлюз.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;С такими настройками я легко смогу попасть в интернет через виртуальную машину, но также буду иметь доступ по локальной сети к локальному хосту (192.168.8.11) и наоборот, если только не включен файрволл.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;internal-networking-внутренняя-сеть&quot;&gt;Internal networking (Внутренняя сеть)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/MxBe_8RD5gs?si=6ud-nUzVOFEjY2cD&amp;amp;start=729&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/virtualbox-Internal.png&quot; alt=&quot;virtualbox Internal networking&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При использовании такого типа соединения доступ по сети будет доступен только внутри сети образованной из ваших виртуальных машин. Т.е. это локальная сеть, которая будет доступна только для виртуальных машин.&lt;/p&gt;

&lt;p&gt;Естественно ни, а какой речи доступа к интернету тут не может идти и речи так как доступа у вириальных машин к вашей сети нету и соответственно наоборот тоже.&lt;/p&gt;

&lt;p&gt;Для примера представим мои настройки сети будут следующими:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Локальный хост
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;DNS-суффикс&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подключения&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-адрес.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Маска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подсети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Основной&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;шлюз.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Виртуальная машина
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;DNS-суффикс&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подключения&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-адрес.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Маска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подсети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Виртуальная машина 2
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;DNS-суффикс&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подключения&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-адрес.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Маска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подсети&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.255&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;При таких настройках я с легкостью смогу получить доступ с одной виртуальной машины на другую через локальную сеть, например, запущу ping с 192.168.8.12 на 192.168.8.13 или наоборот. Но я никак не смогу получить доступ с локального хоста (192.168.8.11) до виртуальных машин и наоборот (даже если пропишу шлюз 192.168.8.1).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;host-only-networking-виртуальный-адаптер-хоста&quot;&gt;Host-Only Networking (Виртуальный адаптер хоста)&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/MxBe_8RD5gs?si=ENPwhKRL0HxD_Qjc&amp;amp;start=907&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/virtualbox-Host-Only.png&quot; alt=&quot;virtualbox Host-Only networking&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Виртуальный адаптер хоста можно рассматривать как что-то среднее между &lt;strong&gt;Internal networking&lt;/strong&gt; (Внутренняя сеть) и &lt;strong&gt;Bridged networking&lt;/strong&gt; (Сетевой мост).&lt;/p&gt;

&lt;p&gt;Когда используется &lt;strong&gt;Host-Only Networking&lt;/strong&gt; (Виртуальный адаптер хоста) &lt;strong&gt;VirtualBox&lt;/strong&gt; создаёт новый виртуальный адаптер, благодаря которому ваши виртуальные машины соединяются с вашим локальным хостом и наоборот. Только тут отличие в том, что вы должны подключаться не к IP-адресу вашего хоста, а к IP-адресу, который вы должны задать в настройках &lt;strong&gt;VirtualBox&lt;/strong&gt; (Менеджер сетей).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-09_12-28.png&quot; alt=&quot;virtualbox Host-Only Networking 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;IP-адреса для виртуальных машин будут назначаться &lt;code class=&quot;highlighter-rouge&quot;&gt;DHCP&lt;/code&gt; сервером, настройки которого вы можете задать также в настройках &lt;strong&gt;VirtualBox&lt;/strong&gt; (Менеджер сетей).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/virtualbox/2023-02-09_12-28.png&quot; alt=&quot;virtualbox Host-Only Networking 3&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Feb 2023 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/virtualbox-network-settings</link>
        <guid isPermaLink="true">http://www.tipoit.kz/virtualbox-network-settings</guid>
        
        <category>windows</category>
        
        <category>virtualbox</category>
        
        <category>virtualization</category>
        
        
      </item>
    
      <item>
        <title>Veeam Backup &amp; Replication - Репозиторий резервных копий</title>
        <description>&lt;p&gt;Репозиторий резервных копий — это место хранения, где Veeam хранит файлы резервных копий, копии виртуальных машин и метаданные для реплицированных виртуальных машин. Является ключевым компонентом.&lt;/p&gt;

&lt;h3 id=&quot;локальный-репозиторий-local-backup-repository&quot;&gt;Локальный репозиторий (Local Backup Repository)&lt;/h3&gt;

&lt;p&gt;Используется и создаётся по умолчанию во время процесса установки Veeam Backup &amp;amp; Replication. В качестве репозитория используется локальное хранилище, например, внутренние диски сервера или подключенные через USB/Thunderbolt переносные устройства.&lt;/p&gt;

&lt;p&gt;Как правило такой тип репозитория предоставляет высокая скорость чтения/записи, но всё конечно зависит от типа дисков.&lt;/p&gt;

&lt;p&gt;К недостаткам можно, пожалуй, отнести ограниченный объем и отсутствие защиты от сбоя сервера.&lt;/p&gt;

&lt;h3 id=&quot;сетевой-репозиторий-network-attached-storage-nas&quot;&gt;Сетевой репозиторий (Network Attached Storage, NAS)&lt;/h3&gt;

&lt;p&gt;В качестве репозитория могут использоваться специальные сетевые хранилища данный (CIFS (SMB), NFS), но ничего не мешает использовать SMB шару на сервере.&lt;/p&gt;

&lt;p&gt;К преимуществам можно отнести, пожалуй, возможность хранения на удаленных серверах.&lt;/p&gt;

&lt;p&gt;К недостаткам же можно отнести зависимость от сети. Т.е. скорость записи или чтения напрямую зависит от пропускной способности сети, а если это ещё и общая сеть (не выделенная) то нагрузка на другие сервера в сети могут также повлиять на скорость записи.&lt;/p&gt;

&lt;h3 id=&quot;облачный-репозиторий-cloud-repository&quot;&gt;Облачный репозиторий (Cloud Repository)&lt;/h3&gt;

&lt;p&gt;Облачный репозиторий использует облачное хранилище данных, например, S3, Azure Blob, Google Cloud Storage, Wasabi и др.&lt;/p&gt;

&lt;p&gt;Такой репозиторий легче поддаётся масштабированию и предоставляет хорошую отказоустойчивость. Также вы избегаете проблем при локальных сбоях.&lt;/p&gt;

&lt;p&gt;Минусом является пропускная способность интернет канала. И немаловажным минусом будет ещё большая цена за облачное хранилище.&lt;/p&gt;

&lt;h3 id=&quot;ленточный-репозиторий-tape-repository&quot;&gt;Ленточный репозиторий (Tape Repository)&lt;/h3&gt;

&lt;p&gt;При использовании Ленточного репозитория хранение резервных копий происходит на магнитных лентах LTO.&lt;/p&gt;

&lt;p&gt;Благодаря большому объему хранения хранить резервные копии можно очень долго.&lt;/p&gt;

&lt;p&gt;Но с другой стороны используя хранилища на магнитных лентах вы получаете медленный доступ к данным, по сравнению с остальными типами. Также придётся покупать специальное оборудование - ленточные хранилища.&lt;/p&gt;
</description>
        <pubDate>Tue, 24 Jan 2023 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-repo-types</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-repo-types</guid>
        
        <category>security</category>
        
        <category>veeam</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric (Docker) - x509 certificate signed by unknown authority</title>
        <description>&lt;p&gt;В моём случае эта ошибка выходила при попытке скачивания go пакетов при установке &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt;. Сразу скажу, что установка сертификатов CA в локальную систему или использование прокси не поможет, так как при установке происходит &lt;strong&gt;build&lt;/strong&gt; нового &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt; образа и всё выполняется внутри сборки.&lt;/p&gt;

&lt;p&gt;Я думаю многим и так понятно, что собственно означает эта ошибка, но, если нет - это означает что между вами и выходом в интернет стоит кто-то посередине и перехватывает ваш трафик. К сожалению, в моём случае избавиться от этого невозможно, так как это государственное учреждение.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;debug&quot;&gt;Debug&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала давайте отловим ошибку используя &lt;strong&gt;gliderlabs/logspout&lt;/strong&gt;, о котором я писал &lt;a href=&quot;https://tipoit.kz/Docker-Get-logs-from-all-containers]&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d --name&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;logspout&quot;&lt;/span&gt; --volume&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/var/run/docker.sock:/var/run/docker.sock --publish&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;127.0.0.1:8000:80 gliderlabs/logspout

curl http://127.0.0.1:8000/logs
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В другой сессии сделаем сборку &lt;strong&gt;chaincode&lt;/strong&gt; и собственно произведём его установку.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;peer lifecycle chaincode package fabcar.tar.gz --path chaincode/fabcar/ --lang golang --label fabcar_1

peer lifecycle chaincode install fabcar.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И тут в логах &lt;strong&gt;gliderlabs/logspout&lt;/strong&gt; мы видим следующую строку:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.org&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.exxample.com|/go/pkg/mod/google.golang.org/grpc@v&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.48&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/status/status.go:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;google.golang.org/genproto@v&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-20220719170305-83&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ca&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fad&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;585&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;509&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;certificate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;signed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authority&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е. получается, что это &lt;strong&gt;peer&lt;/strong&gt; пытается выкачать все эти пакеты? Не совсем так, потому что выше есть строка, благодаря которой можно понять, что происходит &lt;strong&gt;buld&lt;/strong&gt; нового образа для &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt; используя образ &lt;strong&gt;fabric-ccenv&lt;/strong&gt; (from).&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;chaincode.platform.util&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DockerBuild&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Docker&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;using&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;options:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Image=hyperledger/fabric-ccenv:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Env=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GOPROXY=https://proxy.golang.org&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmd=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение&quot;&gt;Решение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь мы хоть знаем где именно ломается. И так первый выход — это использование прокси сервера, если у вас он конечно есть (не мой случай), а второй это разрешить ставить пакеты без проверки валидности &lt;code class=&quot;highlighter-rouge&quot;&gt;ssl&lt;/code&gt; сертификатов. Но во всех решениях нам будет необходимо собрать свой &lt;strong&gt;docker&lt;/strong&gt; образ, хорошо если вы уже это делали.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;вариант-с-прокси&quot;&gt;Вариант с прокси&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как я уже говорил нужно будет пересобрать образ для &lt;strong&gt;hyperledger/fabric-ccenv&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Для начала удаляем существующий образ:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls | grep ccenv
docker image rm hyperledger/fabric-ccenv:2.4
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Теперь создаём &lt;strong&gt;Dokcerfile&lt;/strong&gt;, в котором в поле &lt;strong&gt;from&lt;/strong&gt; указываем тот же образ, который мы удалили.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /tmp/image &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /tmp/image
vim Dockerfile
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ccenv:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HTTP_PROXY=http://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HTTPS_PROXY=http://&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Создаём образ, где именем образа будет тоже самое что мы удаляли.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t hyperledger/fabric-ccenv:2.4 .
docker image ls | grep ccenv
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ccenv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ecbf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2083&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;520&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Снова выполняем установку &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;peer lifecycle chaincode install fabcar.tar.gz
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Installed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;remotely:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;response:&amp;lt;status:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;payload:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\nIfabcar_1:6c333d70725857f3b3d3c5a3a9ce42b968741dc3889b748a2097d7687b91a0e7\022\010fabcar_1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Теперь давайте посмотрим, что у нас появился новый образ для &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls | grep fabcar
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;fabcar_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1-6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ccad&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;477&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ac&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22763&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;89&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;About&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minute&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;23.4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;вариант-с-отключением-проверки-ssl&quot;&gt;Вариант с отключением проверки ssl&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сразу оговорюсь что для этого метода нам также будет необходимо указать версию go самую новую, потому как старые версии не поддерживают переменную &lt;strong&gt;GOINSECURE&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Для начала удаляем существующий образ:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls | grep ccenv
docker image rm hyperledger/fabric-ccenv:2.4
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Теперь создаём &lt;strong&gt;Dokcerfile&lt;/strong&gt;, в котором в поле &lt;strong&gt;from&lt;/strong&gt; указываем тот же образ, который мы удалили.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /tmp/image &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /tmp/image
vim Dockerfile
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ccenv:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GOINSECURE=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GONOSUMDB=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GOPRIVATE=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GOLANG_VERSION=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Создаём образ, где именем образа будет тоже самое что мы удаляли.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker build -t hyperledger/fabric-ccenv:2.4 .
docker image ls | grep ccenv
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;hyperledger/fabric-ccenv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ecbf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2083&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;520&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Снова выполняем установку &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;peer lifecycle chaincode install fabcar.tar.gz
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Installed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;remotely:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;response:&amp;lt;status:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;payload:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\nIfabcar_1:6c333d70725857f3b3d3c5a3a9ce42b968741dc3889b748a2097d7687b91a0e7\022\010fabcar_1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Теперь давайте посмотрим что у нас появился новый образ для &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker image ls | grep fabcar
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;fabcar_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1-6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ccad&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cf&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;477&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ac&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22763&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;63&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;89&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;About&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minute&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;23.4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первый метод конечно более безопасный в какой-то степени, но не всегда есть возможность использовать прокси сервер.&lt;/p&gt;
</description>
        <pubDate>Sat, 21 Jan 2023 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/Hyperledge-Fabric-Docker-x509-certificate-signed-by-unknown-authority</link>
        <guid isPermaLink="true">http://www.tipoit.kz/Hyperledge-Fabric-Docker-x509-certificate-signed-by-unknown-authority</guid>
        
        <category>linux</category>
        
        <category>hyperledger</category>
        
        <category>docker</category>
        
        <category>blockchain</category>
        
        
      </item>
    
      <item>
        <title>Docker - Просмотр логов всех контейнеров</title>
        <description>&lt;p&gt;Для просмотра логов контейнера обычно используется встроенная команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker logs&lt;/code&gt;, но есть правда пару минусов, которые конечно решаемые, но не хочется тратить своё время на костыли. Вот несколько из этих минусов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Иногда нужно получить логи с пересоздаваемых контейнеров, которые могут пересоздаваться очень быстро. В таком случае команда &lt;code class=&quot;highlighter-rouge&quot;&gt;docker logs&lt;/code&gt; перестанет выводить логи так как контейнеры пересоздаются.&lt;/li&gt;
  &lt;li&gt;Временами хочется смотреть все логи в одном терминале, а не в нескольких.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;gliderlabslogspout&quot;&gt;gliderlabs/logspout&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для самого простого решения этих проблем мы можем использовать контейнер &lt;strong&gt;gliderlabs/logspout&lt;/strong&gt;, который подключится к сокету &lt;strong&gt;docker&lt;/strong&gt; и будет выводить абсолютно все логи в одном месте, что кстати очень полезно для debug.&lt;/p&gt;

&lt;p&gt;Для запуска выполняем команду:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d --name&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;logspout&quot;&lt;/span&gt; --volume&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/var/run/docker.sock:/var/run/docker.sock --publish&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;127.0.0.1:8000:80 gliderlabs/logspout
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для просмотра логов используем curl:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://127.0.0.1:8000/logs
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 21 Jan 2023 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/Docker-Get-logs-from-all-containers</link>
        <guid isPermaLink="true">http://www.tipoit.kz/Docker-Get-logs-from-all-containers</guid>
        
        <category>linux</category>
        
        <category>docker</category>
        
        
      </item>
    
      <item>
        <title>Linux - Конвертируем MBR в GPT</title>
        <description>&lt;p&gt;Как мы знаем &lt;strong&gt;GPT&lt;/strong&gt; лучше &lt;strong&gt;MBR&lt;/strong&gt;, а почему именно вы можете узнать в этой &lt;a href=&quot;https://tipoit.kz/linux-mbr-vs-gpt&quot;&gt;статье&lt;/a&gt;. Но вы скорее всего заинтересовались этой темой потому что упёрлись в ограничение максимального размера раздела &lt;strong&gt;MBR&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Но важное замечание: хоть и смена типа таблицы раздела диска не приведёт к потере данных стоит перед выполнением этой операции сделать бэкап всех своих данных.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/DuzjUUElNyU?si=J3GqM2stCXoo1Avs&amp;amp;start=114&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;centos&quot;&gt;CentOS&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Для того чтобы сконвертировать &lt;strong&gt;MBR&lt;/strong&gt; в &lt;strong&gt;GPT&lt;/strong&gt; нам потребуется утилита &lt;code class=&quot;highlighter-rouge&quot;&gt;gdisk&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum -y install gdisk
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;И теперь выбираем нужный нам диск для конвертирования, в моём случае &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdd&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo parted -l
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Model:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Msft&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Virtual&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(scsi)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sdd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sector&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(logical/physical):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4096&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Table:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msdos&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Конвертируем &lt;strong&gt;MBR&lt;/strong&gt; в &lt;strong&gt;GPT&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo gdisk /dev/sdd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;***************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;invalid&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;valid&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;converting&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;memory.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;THIS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OPERATION&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POTENTIALLY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESTRUCTIVE!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;typing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'q'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;don't&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;want&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;convert&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;your&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partitions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;***************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Просто вводим &lt;code class=&quot;highlighter-rouge&quot;&gt;w&lt;/code&gt; и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; w
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;operation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;completed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ubuntu&quot;&gt;Ubuntu&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Для того чтобы сконвертировать &lt;strong&gt;MBR&lt;/strong&gt; в &lt;strong&gt;GPT&lt;/strong&gt; нам потребуется утилита &lt;code class=&quot;highlighter-rouge&quot;&gt;gdisk&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install gdisk
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;И теперь выбираем нужный нам диск для конвертирования, в моём случае &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdd&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo parted -l
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Model:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Msft&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Virtual&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(scsi)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sdd:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Sector&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(logical/physical):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4096&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Table:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msdos&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;End&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Size&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flags&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1049&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Конвертируем MBR в GPT&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo gdisk /dev/sdd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;***************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;invalid&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;valid&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;converting&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;memory.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;THIS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OPERATION&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POTENTIALLY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DESTRUCTIVE!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;typing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'q'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;don't&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;want&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;convert&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;your&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MBR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partitions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GPT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;***************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Просто вводим &lt;code class=&quot;highlighter-rouge&quot;&gt;w&lt;/code&gt; и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; w
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;The&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;operation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;completed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;warning-secondary-partition-table-overlaps-the-last-partition-by-33-blocks&quot;&gt;Warning! Secondary partition table overlaps the last partition by 33 blocks!&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы столкнулись с ошибкой &lt;code class=&quot;highlighter-rouge&quot;&gt;Warning! Secondary partition table overlaps the last partition by
33 blocks!&lt;/code&gt; то значит на вашем диске нет неразмеченного места. Дело в том, что в отличии от &lt;strong&gt;MBR&lt;/strong&gt;, который использует только сектора в начале &lt;strong&gt;GPT&lt;/strong&gt; еще использует и сектора в конце, для дублирования таблицы разделов.&lt;/p&gt;

&lt;p&gt;Для решения нужно либо сжать существующий раздел, либо же просто расширить диск если он виртуальный.&lt;/p&gt;

&lt;p&gt;Про сжатие диска можно почитать &lt;a href=&quot;https://tipoit.kz/secondary-partition-table-overlaps-the-last-partition&quot;&gt;тут&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 27 Dec 2022 04:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-convert-mbr-to-gpt</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-convert-mbr-to-gpt</guid>
        
        <category>linux</category>
        
        <category>storage</category>
        
        <category>mbr</category>
        
        <category>gpt</category>
        
        
      </item>
    
      <item>
        <title>Linux - MBR vs GPT</title>
        <description>&lt;p&gt;Есть 2 типа таблицы разделов:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;MBR&lt;/strong&gt; (Master Boot Record)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GPT&lt;/strong&gt; (GUID Partition Table)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если это не загрузочный диск, то для работы с ним годятся оба типа, но вот если загрузочный диск на &lt;strong&gt;GPT&lt;/strong&gt;, то тут нужен &lt;code class=&quot;highlighter-rouge&quot;&gt;UEFI  BIOS&lt;/code&gt; для нормальной загрузки &lt;code class=&quot;highlighter-rouge&quot;&gt;ОС&lt;/code&gt;. Если с &lt;strong&gt;MBR&lt;/strong&gt;, то режим загрузки в &lt;code class=&quot;highlighter-rouge&quot;&gt;BIOS&lt;/code&gt; должен быть выставлен как &lt;code class=&quot;highlighter-rouge&quot;&gt;Legacy&lt;/code&gt;. Но всё идёт к тому что скоро режим &lt;code class=&quot;highlighter-rouge&quot;&gt;Legacy&lt;/code&gt; не будет использоваться вовсе (на новых устройствах).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;mbr&quot;&gt;MBR&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-09-23_20-42.png&quot; alt=&quot;mbr&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Довольно уже старая таблица разделов со многими ограничениями и недостатками которая впервые появилась ещё в 1982 году. Таблица разделов указывает на то как диски будут разбиваться в системе с &lt;code class=&quot;highlighter-rouge&quot;&gt;BIOS&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MBR&lt;/strong&gt;, загрузочный сектор на жестком диске, который хранит информацию, обеспечивающую правильную загрузку &lt;code class=&quot;highlighter-rouge&quot;&gt;ОС&lt;/code&gt;, занимает первые 512 байт жесткого диска и также хранит таблицу разделов (partition table). Также указывает на активный раздел (active partition), благодаря чему грузится именно &lt;code class=&quot;highlighter-rouge&quot;&gt;ОС&lt;/code&gt; на активном разделе жесткого диска.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;4-основных-раздела-на-жестком-диске&quot;&gt;4 основных раздела на жестком диске&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;MBR&lt;/strong&gt; поддерживает создание только &lt;strong&gt;4 основных разделов на жестком диске&lt;/strong&gt;. Основной значит имеет возможность загрузки ОС с него. Если вы хотите больше 4 дисков, то вы должны создать 3 основных раздела (primary partitions), а остальные уже будут логическими (logical partitions). В Linux максимальное количество разделов достигает значения 15.&lt;/p&gt;

&lt;p&gt;Информация об основных и расширенных разделах содержится в 64-байтах, расположенных в &lt;strong&gt;MBR&lt;/strong&gt;. Каждая запись в таблице разделов (partition table) имеет длину 16 байтов, поэтому доступно не более четырех записей, т.е. разделов диска.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;При этом все логические разделы должны быть в расширенном разделе (extended partition)&lt;/strong&gt;. Т.е. вы должны создать 4 раздел расширенным и на всё оставшееся место на диске. И уже внутри этого раздела создавать логические разделы (logical partitions). Вы конечно можете создать расширенным разделом и третий раздел, но логический раздел будет всё равно начинаться с цифры 5.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/mbr-max-part.png&quot; alt=&quot;mbr&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;максимальный-размер-разделов-в-2тб-на-диске&quot;&gt;Максимальный размер разделов в 2ТБ на диске&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также еще одно плохое ограничение — это &lt;strong&gt;максимальный размер разделов в 2ТБ на диске&lt;/strong&gt;. Т.е. не один раздел, а все вместе общим объёмом не больше 2ТБ.&lt;/p&gt;

&lt;p&gt;На диске &lt;strong&gt;MBR (основная загрузочная запись)&lt;/strong&gt; места, где хранятся размеры разделов, имеют длину всего 4 байта. Поскольку это шестнадцатеричное число, наибольшее значение, которое мы можем ввести, - это все буквы F. Таким образом, максимальное значение будет &lt;code class=&quot;highlighter-rouge&quot;&gt;4 294 967 295&lt;/code&gt; в десятичном виде (FF FF FF FFh = 4294967295d). Этот максимальный размер раздела не в байтах, а в количестве секторов. В свою очередь каждый сектор имеет размер 512 байт мы получаем следующее 4294967295 секторов * 512 байт / сектор = &lt;strong&gt;2199023255040 байт или 2 ТБ&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Если вы всё еще не поняли откуда взялась цифра 4 294 967 295, то это моя последняя попытка. В шестнадцатеричном представлении числа записываются как цифры и буквы. При этом максимальное число 16, как не сложно догадаться. Но так как отсчёт идёт с 0 то максимальное число 15. При этом числа с 0 до 9 записываются также в цифровом представлении, а вот с 10 до 15 уже начиная с буквы A до F. и максимальное значение может быть FFFFFFFF.&lt;/p&gt;

&lt;p&gt;Теперь переводим FFFFFFFF шестнадцатеричное в десятичное. Для этого каждое F которое обозначает число 15 умножается на 16 в степени с 0 до 7. И после всё это суммируется.&lt;/p&gt;

&lt;p&gt;F1 - 15 × 16^0 = 15&lt;br /&gt;
F2 - 15 × 16^1 = 240&lt;br /&gt;
F3 - 15 × 16^2 = 3 840&lt;br /&gt;
F4 - 15 × 16^3 = 61 440&lt;br /&gt;
F5 - 15 × 16^4 = 983 040&lt;br /&gt;
F6 - 15 × 16^5 = 15 728 640&lt;br /&gt;
F7 - 15 × 16^6 = 251 658 240&lt;br /&gt;
F8 - 15 × 16^7 = 4 026 531 840&lt;br /&gt;
15  + 240  + 3 840  + 61 440  + 983 040 + 15 728 640  + 251 658 240  + 4 026 531 840  = 4 294 967 295&lt;/p&gt;

&lt;p&gt;FFFFFFFF = 4294967295&lt;/p&gt;

&lt;p&gt;И еще один минус заключается в том, что &lt;strong&gt;MBR&lt;/strong&gt; хранится без копии и если он вдруг испортиться, то вам придётся восстанавливать его. И вы уже не получите информацию о начале и конце ваших разделов и не загрузите ОС. Для &lt;code class=&quot;highlighter-rouge&quot;&gt;Linux&lt;/code&gt; вы можете восстановить &lt;strong&gt;MBR&lt;/strong&gt; с помощью test disk (но это не точно).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;master-boot-code&quot;&gt;Master Boot Code&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Master Boot Code&lt;/strong&gt; выполняет следующие действия:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Сканирует таблицу разделов на наличие активного раздела&lt;/li&gt;
  &lt;li&gt;Находит начальный сектор активного раздела&lt;/li&gt;
  &lt;li&gt;Загружает копию загрузочного сектора из активного раздела в память&lt;/li&gt;
  &lt;li&gt;Передает управление исполняемому коду в загрузочном секторе&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если просто и в двух словах благодаря &lt;strong&gt;Master Boot Code&lt;/strong&gt; у вас грузится ОС после &lt;code class=&quot;highlighter-rouge&quot;&gt;BIOS&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;gpt&quot;&gt;GPT&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-09-23_20-49.png&quot; alt=&quot;mbr&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Intel&lt;/code&gt; начал разрабатывать новый формат &lt;code class=&quot;highlighter-rouge&quot;&gt;BIOS - UEFI&lt;/code&gt;, и благодаря этому появился новый формат таблицы разделов &lt;strong&gt;GPT&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;наличие-бэкапа&quot;&gt;Наличие бэкапа&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самое первое отличие — это то что &lt;strong&gt;таблица разделов дублируется в отличии от MBR&lt;/strong&gt;, что даёт вам возможность продолжать работать если вы каким-то образом повредили запись, т.е. потеряли одну копию.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;128-разделов-на-диск&quot;&gt;128 разделов на диск&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Второй важный плюс — это то что тут вы уже можете &lt;strong&gt;создать столько разделов на диске сколько вам захочется в отличии от 4 в MBR&lt;/strong&gt;. Но есть, но, некоторые ОС сами ограничивают количество разделов на диске, которые вы можете создавать. В Linux максимальное число 128, по крайней мере у RedHat.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;максимальный-размер-диска&quot;&gt;Максимальный размер диска&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и еще тут нет этого дурацкого ограничения в 2ТБ, вы &lt;strong&gt;можете создать раздел размером около 9 млрд терабайт&lt;/strong&gt;. Но опять-таки не все ОС вам дадут это сделать, например, Windows ограничивает размер в 256 терабайт, зависит от версии Windows.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;protective-mbr&quot;&gt;Protective MBR&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также &lt;strong&gt;GPT&lt;/strong&gt; в себе имеет и сектор с информацией о &lt;strong&gt;MBR - Protective MBR&lt;/strong&gt;. Сделано это для обратной совместимости чтобы &lt;code class=&quot;highlighter-rouge&quot;&gt;BIOS без UEFI&lt;/code&gt; тоже мог загружать систему с диска &lt;strong&gt;GPT&lt;/strong&gt; (но не всегда это работает). Также это сделано для защиты от перезаписи сектора с &lt;strong&gt;GPT&lt;/strong&gt; утилитами, которые работают с &lt;strong&gt;MBR&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;guid-partition-entry-array&quot;&gt;GUID Partition Entry Array&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Массив записей раздела (GUID Partition Entry Array)&lt;/strong&gt; описывает разделы, используя минимальный размер 128 байт для каждого блока. Первые 16 байтов каждой записи обозначают глобальный уникальный идентификатор (GUID) типа раздела. Например, &lt;code class=&quot;highlighter-rouge&quot;&gt;GUID&lt;/code&gt; для системного раздела &lt;code class=&quot;highlighter-rouge&quot;&gt;EFI - C12A7328-F81F-11D2-BA4B-00A0C93EC93B&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Вторые 16 байтов - это уникальный идентификатор &lt;code class=&quot;highlighter-rouge&quot;&gt;GUID&lt;/code&gt; раздела. Затем следуют начальные и конечные 64-битные &lt;code class=&quot;highlighter-rouge&quot;&gt;LBA&lt;/code&gt;, атрибуты раздела и максимум &lt;code class=&quot;highlighter-rouge&quot;&gt;36-символьное имя раздела&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;итог&quot;&gt;Итог&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Прочитав всё выше написанное можно констатировать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;MBR и GPT&lt;/strong&gt; позволяют операционной системе получать точную информацию о структуре диска&lt;/li&gt;
  &lt;li&gt;Если вы повредите сектор с &lt;strong&gt;MBR&lt;/strong&gt;, то вам придётся изрядно попотеть&lt;/li&gt;
  &lt;li&gt;Используйте только &lt;strong&gt;GPT&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Можно использовать ПО для создания резервной копии &lt;strong&gt;MBR&lt;/strong&gt; если уж вы его уже используете&lt;/li&gt;
  &lt;li&gt;Также вы можете использовать ПО для конвертации &lt;strong&gt;MBR в GPT&lt;/strong&gt; (конечно сперва бэкап)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Конечно сперва бэкап&lt;/strong&gt; - слоган любого вендора, даже если это СХД на 500ТБ&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 27 Dec 2022 03:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-mbr-vs-gpt</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-mbr-vs-gpt</guid>
        
        <category>linux</category>
        
        <category>storage</category>
        
        <category>mbr</category>
        
        <category>gpt</category>
        
        
      </item>
    
      <item>
        <title>Где хранить seed phrase</title>
        <description>&lt;p&gt;Если вы имеете свой крипто-кошелёк, то вы уже знаете, что такое seed phrase (recovery phrase). Но если не знаете, то это последовательность слов, сгенерированных вашим крипто валютным кошельком, которая дает вам доступ к крипто-валюте, связанной с этим кошельком. И если вы вдруг каким-то образом потеряли доступ к кошельку, то имея seed phrase вы легко восстановите этот доступ.&lt;/p&gt;

&lt;p&gt;Фраза восстановления представляет собой длинную строку случайных чисел, и ваш кошелек использует ее для генерации закрытых ключей, которые позволяют отправлять и тратить крипто-валюту. Но естественно людям свойственно лучше воспринимать информацию в виде осмысленных слов, а не в виде смешанных цифр и букв. Именно поэтому нам предоставляют seed phrase в виде слов.&lt;/p&gt;

&lt;p&gt;И ни в коем случае ни под каким предлогом &lt;strong&gt;не передавайте seed phrase другим людям&lt;/strong&gt;, сколько уже людей пострадало от мошенников, выпросивших эту сид-фразу.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/seed-phrase-1.png&quot; alt=&quot;seed phrase only for you&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В общем если простыми словами, то это набор слов, который поможет вам восстановить доступ к вашему кошельку в случае потери телефона, забыли пароля от приложения и т.д.&lt;/p&gt;

&lt;p&gt;Теперь, когда мы бегло разобрались с тем что такое seed phrase встаёт вопрос где именно хранить эту seed phrase.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;холодное-хранение&quot;&gt;Холодное хранение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Холодно хранение подразумевает хранение бэкапа, в нашем случае seed phrase в текстовом варианте, либо qr изображение на устройстве, не подключённом к интернету.  Холодное хранение по существу устраняет риск того, что злоумышленник получит ваш ключ удаленно, потому что он не находится в Интернете. Для примера пользователь может скопировать seed phrase на USB накопитель и спрятать сам USB в защищенном месте, у каждого это место своё.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/seed-phrase-2.png&quot; alt=&quot;store in safe place&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Хранение устройства с seed phrase только дома может привести к его потере если что-то случится с домом, например, пожар либо ограбление. Если вы вдруг нашли супер-место для его хранения вы также можете забыть об этом месте через какое-то время. Возможно хорошей идеей будет хранить эту фразу в банковской ячейке, но это только при условии, что у вас есть деньги, иногда очень много денег. Хорошей идеей будет хранить несколько копий в разных местах, но чем больше мест хранения, тем больше риск несанкционированного доступа. Есть теория что отличным местом хранения является запечатанный конверт у юриста, но тут всё зависит от того какой это юрист и, наверное, это хорошо лишь для того если с вами что-то случится и у вашей родни была возможность получить доступ к вашему кошельку (этакое завещание).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;горячее-хранение&quot;&gt;Горячее хранение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/seed-phrase-3.png&quot; alt=&quot;store in cloude&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Под горячим хранением подразумевается, что ваша seed phrase хранится где-нибудь в облачном сервисе, т.е. где-то в интернете, благодаря чему вы можете получить доступ к seed phrase с любого устройства, имеющего доступ к интернету. Например, можно хранить на google disk, yandex disk и т.д.&lt;/p&gt;

&lt;p&gt;Преимущество такого места хранения конечно очевидное, если вы теряете своё устройство вы всегда можете добраться до своей seed phrase с другого устройства, если помните логин и пароль от облачного хранилища.&lt;/p&gt;

&lt;p&gt;Но есть и недостаток если злоумышленник получит доступ к вашему облачному хранилищу, то он получит доступ и к seed phrase. Произойти это может также в случае утери телефона, учитывая, что как правило многие пользователи, сохраняют пароли при авторизации на интернет ресурсах.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;менеджеры-паролей&quot;&gt;Менеджеры паролей&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы можете скачать любую утилиту для хранения паролей, например, KeepAss и создать хранилище паролей, база этих паролей будет лежать на вашем устройстве в виде файла. Чтобы получить доступ к хранилищу паролей (seed phrase) необходимо будет ввести пароль, который вы придумываете во время создания хранилища паролей.&lt;/p&gt;

&lt;p&gt;Т.е. вы можете скопировать файл с паролями (seed phrase) на тот же USB накопитель, но при этом даже если злоумышленник получит доступ к фалу ему еще нужно будет подобрать пароль к файлу. Главное чтобы вы сами не забыли этот пароль.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ваша-память-мозг&quot;&gt;Ваша память (мозг)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;О да, я предвкушаю как вы сейчас в недоумении задались вопросом как это я могу запомнить порядка 12 слов и при этом постоянно держать их в голове. На самом деле этот метод хранения seed phrase работает не совсем так. Да вам нужна будет ваша память, но вот запоминать нужно будет события в игре. Как вам такой поворот?&lt;/p&gt;

&lt;p&gt;Дело в том, что многие из нас обладают фотографической памятью, т.е. таким людям гораздо проще запомнить информацию если они видят это на картинке. Именно для таких людей существуют игры, благодаря которым вы сначала зашифровываете вашу seed phrase проделывая некоторые операции в игре, при этом запоминая их. И логично что для того, чтобы получить seed phrase при необходимости, вам необходимо будет сделать то же самое что вы делали при шифровании. На мой взгляд очень интересный метод, по крайней мере новый для меня.&lt;/p&gt;

&lt;p&gt;Не буду скрывать что идея написание данной статьи пришла мне в голову только из-за этого метода, так как было интересно попробовать, ну и грех не поделится такой информацией.&lt;/p&gt;

&lt;p&gt;Прикрепляю видео с демонстрацией работы одной из таких игр - &lt;a href=&quot;https://github.com/reputage/seedQuest&quot;&gt;seedQuest&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/zxmB9L4OfwY&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;разделенное-горячее-хранилище&quot;&gt;Разделенное горячее хранилище&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже говорили, что при использовании горячего хранилища есть риск потери seed phrase если доступ к фразе получит злоумышленник. Но что если нам уж очень понравился данный метод, но мы боимся этого дядю хитрого, который постоянно рыщет в интернете в поисках seed phrase пользователей?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/seed-phrase-4.png&quot; alt=&quot;store in cloude&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Идея Разделенного горячего хранилища в том, что вы разбиваете seed phrase или любую другую информацию на куски и храните разные куски в разных местах. Например, вы разбили seed phrase на 4 куска, где один вы храните на google диске, другую на yandex, третью ещё где-то и четвертую вообще на хранилище у вашего родственника. Согласитесь, что в такой реализации злоумышленнику будет гораздо сложнее получить полностью вашу seed phrase.&lt;/p&gt;

&lt;p&gt;В интернете есть ресурсы, которые разобьют любой текст на группы и при этом еще зашифруют каждую строку. Например, &lt;a href=&quot;https://iancoleman.io/shamir/&quot;&gt;iancoleman.io&lt;/a&gt;, &lt;a href=&quot;http://passguardian.com/&quot;&gt;passguardian.com&lt;/a&gt;. Но насколько безопасно пользоваться ими каждый решает сам для себя.&lt;/p&gt;
</description>
        <pubDate>Mon, 05 Dec 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/where-store-seed-phrase</link>
        <guid isPermaLink="true">http://www.tipoit.kz/where-store-seed-phrase</guid>
        
        <category>linux</category>
        
        <category>postfix</category>
        
        <category>facebook</category>
        
        
      </item>
    
      <item>
        <title>Postfix - Your email was rejected because the sending mail server appears to be on a dynamic IP address that should not be doing direct mail delivery</title>
        <description>&lt;p&gt;Суть проблемы в том, что, если у отправителя не статический, а &lt;strong&gt;динамический ip-адрес&lt;/strong&gt; он считается плохим и принять почту от такого почтовика не получится. Срабатывает фильтр и отклоняет письмо такого почтовика.&lt;/p&gt;

&lt;p&gt;Для примера &lt;em&gt;Facebook&lt;/em&gt; использует &lt;strong&gt;динамические ip-адреса&lt;/strong&gt; для рассылки писем. В моём случае ошибка выглядела так:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Nov 23 11:19:08 mail postfix/smtpd[26902]: NOQUEUE: reject: RCPT from 66-220-155-154.mail-mail.facebook.com[66.220.155.154]: 554 5.7.1 &amp;lt;66-220-155-154.mail-mail.facebook.com&amp;gt;: Helo command rejected: ACCESS DENIED. Your email was rejected because the sending mail server appears to be on a dynamic IP address that should not be doing direct mail delivery (66-220-155-154); from=&amp;lt;notification@facebookmail.com&amp;gt; to=&amp;lt;&amp;gt; proto=ESMTP helo=&amp;lt;66-220-155-154.mail-mail.facebook.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;решение&quot;&gt;Решение&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Нужно добавить &lt;strong&gt;pattern с ip адресом и именем домена&lt;/strong&gt; (66-220-155-154.mail-mail.facebook.com) в файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/postfix/helo_access.pcre&lt;/code&gt;.  Благодаря этой строке фильтр будет пропускать почту с facebook.com даже если у почтового сервера динамический ip адрес.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/postfix/helo_access.pcre
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#просто&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;чтобы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;понять&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;после&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;чего&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;добавлять&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/^\&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\.\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\.\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\.\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)\&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DUNNO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/^(\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-\d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;1,3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;).*.facebook.com$/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DUNNO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart postfix dovecot
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Наш паттерн ^(\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3}).*.facebook.com$ как раз и говорит что если в hello будет 66-220-155-154.mail-mail.facebook.com то нужно пропустить письмо.&lt;/p&gt;

&lt;p&gt;Чтобы проверить рабочий ли паттерн можно воспользоваться онлайн &lt;a href=&quot;https://regex101.com/&quot;&gt;сервисом&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 23 Nov 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/postfix-dynamic-ip</link>
        <guid isPermaLink="true">http://www.tipoit.kz/postfix-dynamic-ip</guid>
        
        <category>linux</category>
        
        <category>postfix</category>
        
        <category>facebook</category>
        
        
      </item>
    
      <item>
        <title>Blockchain - Смарт контракты</title>
        <description>&lt;p&gt;В ранней версии &lt;strong&gt;блокчейн (Blockchain )&lt;/strong&gt;, так называемой &lt;code class=&quot;highlighter-rouge&quot;&gt;Blockchain 1.0&lt;/code&gt; мы не могли никак воздействовать на данные, т.е. мы просто собирали данные и записывали их.  Происходило так потому что главная задача была &lt;em&gt;регистрация передачи биткоинов&lt;/em&gt; между кошельками (владельцами).  Т.е. не было никакой задачи использовать его как платформу для своего приложения.&lt;/p&gt;

&lt;p&gt;Но в 2015 появился &lt;strong&gt;Ethereum&lt;/strong&gt;, благодаря которому появилась возможность воздействовать на данные, в следствии чего появился этакий &lt;code class=&quot;highlighter-rouge&quot;&gt;Blockchain 2.0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;Blockchain 2.0&lt;/code&gt; уже появляется возможность &lt;em&gt;воздействовать на данные&lt;/em&gt; благодаря &lt;strong&gt;смарт контрактам (smart contract)&lt;/strong&gt;. По-простому &lt;strong&gt;смарт контракт (smart contract)&lt;/strong&gt; - это всё тот же код, только в сети &lt;strong&gt;блокчейна (Blockchain )&lt;/strong&gt;. Пользователи всё также совершают транзакции, но только для обработки транзакций используются правила, описанные в &lt;strong&gt;смарт контракте (smart contract)&lt;/strong&gt;. Это усовершенствование теперь позволяет блокчейн-решениям управлять процессами и автоматизировать их, а также записывать их результаты в постоянный, неизменяемый и безопасный реестр, доступный для всех соответствующих сторон.&lt;/p&gt;

&lt;p&gt;Сам термин &lt;strong&gt;смарт контрактам (smart contract)&lt;/strong&gt; появился ещё в далёком 1996 году благодаря Nick Szabo (не рискну переводить).&lt;/p&gt;

&lt;p&gt;Для примера можно рассмотреть продажу Евгением своего бизнеса Алексею. Но вот Алексей не уверен в успешности его бизнеса и Евгений решает добавить условие что, если в течении года Алексей не получит желаемого дохода он не доплатит Евгению 20% от суммы продажи. Т.е. Алексей платит сейчас 80% а через год 20%, если будет выручка.&lt;/p&gt;

&lt;p&gt;Благодаря &lt;strong&gt;смарт контракту&lt;/strong&gt; эту сделку можно зарегистрировать в &lt;strong&gt;блокчейн (Blockchain )&lt;/strong&gt;. Т.е. будет заключён договор с использованием &lt;strong&gt;смарт контракта&lt;/strong&gt;, который вернёт на счёт Алексея 20% если условие не будет соблюдено. При этом Алексей всегда с лёгкостью докажет, что в сделке было такое условие, благодаря открытости сети &lt;strong&gt;блокчейн (Blockchain )&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/smart-contract-1.png&quot; alt=&quot;smart contracts&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если описывать &lt;strong&gt;смарт контракты&lt;/strong&gt; двумя словами, то - это просто &lt;code class=&quot;highlighter-rouge&quot;&gt;код&lt;/code&gt;, написанный на языке программирования, благодаря которому вы можете производить манипуляцию с данными в сети &lt;strong&gt;блокчейн&lt;/strong&gt;. Но при этом вся история манипуляций также будет сохранена.&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Nov 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/what-is-smartcontract</link>
        <guid isPermaLink="true">http://www.tipoit.kz/what-is-smartcontract</guid>
        
        <category>linux</category>
        
        <category>blockchain</category>
        
        <category>smartcontract</category>
        
        
      </item>
    
      <item>
        <title>Blockchain - Отличие обычных баз данных от блокчейн</title>
        <description>&lt;p&gt;Если вы уже работали с &lt;strong&gt;базой данных&lt;/strong&gt; и ещё мало что знаете про &lt;strong&gt;блокчейн&lt;/strong&gt;, то вы можете подумать, что &lt;strong&gt;блокчейн&lt;/strong&gt; также использует базы данных как приложения, но это не совсем так. И в этой статье мы рассмотрим различия.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;базы-данных&quot;&gt;Базы данных&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;В традиционных базах данных всегда присутствует &lt;em&gt;клиент&lt;/em&gt;, у которого есть возможность работать с данными в базе данных используя полные возможности. Например, пользователь может добавить данные, а после изменить их или даже удалить.&lt;/p&gt;

&lt;p&gt;Также контроль над самой базой данных остаётся у определённой организации, т.е. децентрализованная бд. Именно этот орган решает кому и как можно работать с данными бд. И понятное дело, что в таком случае злоумышленнику достаточно скомпрометировать этот орган для получения доступа к данным бд. И если злоумышленник всё же получит доступ к базе данных никто не гарантирует что данные не изменятся.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/blockchain-vs-bd-1.png&quot; alt=&quot;database&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;базы-данных-в-блокчейн&quot;&gt;Базы данных в блокчейн&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Базы данных в &lt;strong&gt;блокчейн&lt;/strong&gt; находятся на неограниченном количестве децентрализованных узлов (node).  И каждый узел является администратором базы данных, в свою очередь участвуя в каждой транзакции. Для того чтобы транзакция была одобрена узлы должны достигнуть &lt;strong&gt;консенсуса&lt;/strong&gt;. Благодаря этому &lt;strong&gt;консенсусу&lt;/strong&gt; злоумышленнику гораздо сложнее вмешаться в работу.&lt;/p&gt;

&lt;p&gt;В &lt;em&gt;Ethereum&lt;/em&gt; консенсус достигается использованием механизма &lt;strong&gt;proof of stake&lt;/strong&gt;, тогда как &lt;em&gt;Bitcoin&lt;/em&gt; использует механизм &lt;strong&gt;майнинга&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/blockchain-vs-bd-2.png&quot; alt=&quot;blockchain database&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;crud-vs-rw-only&quot;&gt;CRUD vs RW-only&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;В традиционных &lt;strong&gt;базах данных&lt;/strong&gt; клиент может использовать все операции &lt;strong&gt;CRUD&lt;/strong&gt; (create, read, update, delete), если у него есть права конечно.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/blockchain-vs-bd-3.png&quot; alt=&quot;CRUD database&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В &lt;strong&gt;блокчейн&lt;/strong&gt; предполагается использование только структуры добавления и чтения. Т.е. вместо обновления данных пользователь в &lt;strong&gt;блокчейн&lt;/strong&gt; добавляет новые данные, при этом не забывая о старом значении. Благодаря этому все значение до не изменяются и остаются доступными навсегда.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/blockchain-vs-bd-4.png&quot; alt=&quot;RW-only database&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;прозрачность&quot;&gt;Прозрачность&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Одна из главных идей &lt;strong&gt;блокчейна&lt;/strong&gt; это прозрачность. Это достигается тем, что доступ к данным в &lt;strong&gt;блокчейн&lt;/strong&gt; может получить каждый, в отличии от традиционных баз данных (в среднем).&lt;/p&gt;

&lt;p&gt;Когда вы выполняете какую-либо операцию в сети &lt;strong&gt;блокчейн&lt;/strong&gt; вы можете быть уверены в неизменности этой операции так как это операция будет подтверждена большим количеством узлов и данные транзакции будут хранится на тысячах узлов. Заменить что-то в такой реализации даже при наличии такой возможности будет практически невозможно.&lt;/p&gt;

&lt;p&gt;Также каждый пользователь может просмотреть ту или иную транзакцию, проверяя ее изменения. При этом он не будет знать о владельце этой транзакции ничего.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;валидация-данных&quot;&gt;Валидация данных&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже говорили о том, что в &lt;strong&gt;блокчейн&lt;/strong&gt; старая запись всегда остаётся неизменной. Для примера представим ситуацию что в вашем кошельке сейчас находится 100 &lt;em&gt;BTC&lt;/em&gt; или &lt;em&gt;ETC&lt;/em&gt; (какая больше нравится). Далее вы переводите 10 &lt;em&gt;BTC&lt;/em&gt; или &lt;em&gt;ETC&lt;/em&gt; мне за хорошую статью (мечты), в следствии чего создается новая транзакция в сети &lt;strong&gt;блокчейн&lt;/strong&gt;. Сейчас же у вас в кошельке баланс будет равен 90 &lt;em&gt;BTC&lt;/em&gt; или &lt;em&gt;ETC&lt;/em&gt;, но, если рассматривать транзакции мы всегда сможем просмотреть что у вас было 100 &lt;em&gt;BTC&lt;/em&gt; или &lt;em&gt;ETC&lt;/em&gt; в своё время. Т.е. мы сохраняем всю информацию о движениях в нашем кошельке.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/blockchain/blockchain-vs-bd-5.png&quot; alt=&quot;validating&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;В итоге можно выделить два основных отличия:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Децентрализация&lt;/strong&gt; - управление не происходит одним узлом (человеком)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Неизменность данных&lt;/strong&gt; - каждая новая транзакция создаёт новую запись с новым значением, вместо обновления старой записи&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sun, 13 Nov 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/db-vs-blockchain</link>
        <guid isPermaLink="true">http://www.tipoit.kz/db-vs-blockchain</guid>
        
        <category>linux</category>
        
        <category>blockchain</category>
        
        
      </item>
    
      <item>
        <title>Linux - Как dnf ищет нужный нам пакет?</title>
        <description>&lt;p&gt;Если вы администрируете устройства с &lt;em&gt;RHEL&lt;/em&gt;, &lt;em&gt;Fedora&lt;/em&gt; или &lt;em&gt;CentOS&lt;/em&gt; на борту то вы уже вводили команду &lt;code class=&quot;highlighter-rouge&quot;&gt;dnf install&lt;/code&gt; огромное количество раз, и возможно никогда даже и не задумывались о том, что же там происходит после вызова этой команды. Нет, конечно понятное дело, что в итоге ставится нужный нам пакет, но вот как это происходит?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-пакета&quot;&gt;Установка пакета&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для примера мы хотим поставить пакет &lt;em&gt;telnet&lt;/em&gt;. Для начала нужно понимать, что, когда мы говорим пакет &lt;em&gt;telnet&lt;/em&gt;, мы как бы говорим о том, что нужно установить некий файл с расширением &lt;code class=&quot;highlighter-rouge&quot;&gt;.rpm&lt;/code&gt;, если конкретнее что-то в стиле &lt;em&gt;telnet-0.17-76.el8.x86_64.rpm&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Часто поэтому можно встретить словосочетание &lt;em&gt;RPM&lt;/em&gt; пакет, что сразу говорит о том, что этот пакет предназначен для &lt;em&gt;RHEL&lt;/em&gt;, &lt;em&gt;Fedora&lt;/em&gt; или &lt;em&gt;CentOS&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install telnet
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда выше перед тем как поставить пакет должна еще его найти, обычно ищет в интернете. Также вы можете устанавливать пакеты используя команду rpm, но сделать это с использованием &lt;strong&gt;dnf&lt;/strong&gt; или &lt;strong&gt;yum&lt;/strong&gt; куда легче порой быстрее.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;yum-или-dnf&quot;&gt;yum или dnf?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я думаю уже ни для кого ни секрет что эти 2 команды по сути выполняют одно и тоже. Но этот абзац я включил в статью так как до этого момента никогда не задумывался как расшифровывается &lt;strong&gt;yum&lt;/strong&gt; и &lt;strong&gt;dnf&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;yum&lt;/strong&gt; - Yellowdog Updater, Modified&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;dnf&lt;/strong&gt; -  Dandified yum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yum появился раньше &lt;strong&gt;dnf&lt;/strong&gt;, но на данный момент &lt;strong&gt;dnf&lt;/strong&gt; является менеджером пакетов по умолчанию, но сам &lt;strong&gt;yum&lt;/strong&gt; никто никуда еще не убирал.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-находятся-пакеты&quot;&gt;Как находятся пакеты?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как мы уже говорили вначале нужно найти необходимый нам пакет. Для этого &lt;strong&gt;dnf&lt;/strong&gt; обращается в начале к файлу манифестов репозитория (repository manifest file), который должен находится в ОС. У самого &lt;strong&gt;dnf&lt;/strong&gt; этот файл также хранится в кэше, что ускоряет установку пакета. Но если информацию о необходимом пакете в кэше найти не удалось, то поиски продолжатся в файлах с расширением &lt;code class=&quot;highlighter-rouge&quot;&gt;.repo&lt;/code&gt; в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/yum.repos.d&lt;/code&gt;. В этих файлах &lt;strong&gt;dnf&lt;/strong&gt; ищет &lt;code class=&quot;highlighter-rouge&quot;&gt;url&lt;/code&gt; для того чтобы обратится к хранилищу пакетов (репозиторий) ассоциированных с файлом репозитория &lt;code class=&quot;highlighter-rouge&quot;&gt;.repo&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;кэш&quot;&gt;Кэш&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для примера давайте сперва очистим весь наш кэш и попробуем снова установить пакет &lt;em&gt;telnet&lt;/em&gt;. В итоге мы должны увидеть процесс обновления кэша.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Для начала проверим что у нас в директории &lt;strong&gt;/var/cache/dnf&lt;/strong&gt; есть файлы кэша для всех наших репозиториев.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf repolist
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;appstream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CentOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AppStream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseos&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CentOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;BaseOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;extras&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CentOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Extras&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ls -la /var/cache/dnf | grep solv
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21152015&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;appstream-filenames.solvx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6069505&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;appstream.solv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12148821&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseos-filenames.solvx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5945363&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseos.solv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1787&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;extras-filenames.solvx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27929&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;extras.solv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Теперь очистим наш кэш и снова проверим наличие файлов.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf clean dbcache
sudo ls -la /var/cache/dnf | grep solv
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;И теперь попробуем установить пакет telnet.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install telnet
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Согласитесь что теперь команда установки ищет наш пакет гораздо дольше чем ранее, всё это происходит из-за того что наш кэш пуст и нужно добавить туда информацию из репозиториев, указанных в &lt;strong&gt;/etc/yum.repos.d&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;кэш-и-новый-репозиторий&quot;&gt;Кэш и новый репозиторий&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также каждый раз когда мы вызываем &lt;code class=&quot;highlighter-rouge&quot;&gt;dnf install&lt;/code&gt; у нас проверяется наличие нового файла репозитория в директории &lt;strong&gt;/etc/yum.repos.d&lt;/strong&gt;, точнее наличие метаданных для репозитория. Для примера поставим пакет &lt;em&gt;epel-release&lt;/em&gt;, который добавит нам новый репозиторий.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install -y epel-release
ls -la /etc/yum.repos.d | grep epel
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rw-r--r--.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1417&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Jun&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;epel.repo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь снова попробуем поставить пакет &lt;em&gt;telnet&lt;/em&gt;, информация про который уже есть у нас в кэше.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install telnet
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Extra&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Packages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Enterprise&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                                   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB/s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Extra&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Packages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Enterprise&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Modular&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                           &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;611&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB/s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;733&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Тут вы можете немного запутаться и посчитать что тут происходит обновление кэша и то что я говорил в начале что сперва проверяется кэш может показаться враньём. Но дело в том, что тут идёт загрузка &lt;strong&gt;метаданных&lt;/strong&gt;. Но справедливости ради сразу обновится и кэш потому что сам кэш генерируется на основе этих метаданных. Вот такая вот ситуация оно вроде как бы да, а вроде и нет.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Метаданные&lt;/em&gt; описывают, какие пакеты можно найти в репозитории, различные атрибуты каждого пакета, списки файлов и каталогов, а также информацию журнала изменений.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ls -la /var/cache/dnf | grep epel
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;drwxr-xr-x.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;epel&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-6519&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ee&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;669354&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;484&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но мы могли избежать этого просто указав опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;-C&lt;/code&gt;, которая означает что искать информацию о пакете нужно только в уже существующем кэше.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;репозитории&quot;&gt;Репозитории&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;По сути так или иначе вся информация о наличие того или иного пакета берётся с файлов репозитория, а точнее с URL указанного в файле репозитория. Просто чтобы каждый раз не скачивать информацию о всех пакетах с этих url и существует кэш.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dnf&lt;/strong&gt; также пробегается по каждому файлу &lt;code class=&quot;highlighter-rouge&quot;&gt;.rpm&lt;/code&gt; и ищет там необходимый пакет до первого совпадения.&lt;/p&gt;

&lt;p&gt;Для того чтобы посмотреть список всех наших репозиториев используется следующая команда:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf repolist
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;appstream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CentOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AppStream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseos&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CentOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;BaseOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;extras&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CentOS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Extras&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Собственно команда выше просто пробегает по файлам &lt;code class=&quot;highlighter-rouge&quot;&gt;.repo&lt;/code&gt; в директории &lt;strong&gt;/etc/yum.repos.d/&lt;/strong&gt; и вытаскивает оттуда &lt;code class=&quot;highlighter-rouge&quot;&gt;repo id&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;repo name&lt;/code&gt;, но только если репозиторий активен (enabled=1).&lt;/p&gt;

&lt;p&gt;Т.е. если у нас не будет нужного репозитория в системе, то и поставить нужны пакет мы не сможем, если только не выкачаем файл .rpm вручную, но это уже совсем другая история. Также при установке пакета из вручную с использованием файла .rpm все зависимости также придётся выкачивать и ставить вручную.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;При установке пакета сперва смотрится кэш&lt;/li&gt;
  &lt;li&gt;Если нет в кэше нет информации о пакете (например, устаревший кэш) проверяются файлы репозитория и также обновляется кэш&lt;/li&gt;
  &lt;li&gt;Пакет выкачивается с url ассоциированного с репозиторием&lt;/li&gt;
  &lt;li&gt;Происходит установка&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Fri, 28 Oct 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/how-dnf-search-packets</link>
        <guid isPermaLink="true">http://www.tipoit.kz/how-dnf-search-packets</guid>
        
        <category>linux</category>
        
        <category>dnf</category>
        
        <category>centos</category>
        
        <category>rhel</category>
        
        <category>fedora</category>
        
        
      </item>
    
      <item>
        <title>Что такое супер-приложение (superapp)?</title>
        <description>&lt;p&gt;Само понятие &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; появилось уже давно, а именно в 2010 году. Но как обычно это бывает, чтобы новинка получила обширный интерес нужно время и парочка удачных кейсов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/superapp.drawio.png&quot; alt=&quot;супер-приложение (superapp)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Если пытаться провести аналогии с супер-приложением из жизни, то хорошим примером будет швейцарский нож, который даёт своему владельцу возможность использовать большое количество инструментов имея всего один нож. Так вот &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; позволяет использовать вам всего одно приложение вместо 10 или даже 100 приложений.&lt;/p&gt;

&lt;p&gt;Ну и конечно сам разработчик не остаётся без преимуществ. Если у приложения уже тысячи пользователей, то новый микро-сервис добавляемый в &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; не нуждается в раскрутке или большей рекламе. Так как база пользователей уже существует достаточно вывести уведомление для текущих пользователей с описанием нового микро-сервиса.&lt;/p&gt;

&lt;p&gt;Также идея &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; заключается в том, что при выпуске нового мини приложения разработчику не нужно выкладывать новый микро-сервис в магазине приложений. В идеале в &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; новый микро-сервис должен попасть автоматически, без какого-либо действия от пользователя. Правда это иногда сложно осуществить и поэтому приходится обновлять &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; в магазине приложений.&lt;/p&gt;

&lt;p&gt;Для примера если вы используете одно приложение для заказа такси, другое для оплаты и третье для покупки товаров у вас уже 3 разных приложения. При чём везде нужно регистрироваться отдельно, привязывать карты, постоянно авторизоваться во всех трёх приложениях. Так вот идея &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; - это как раз объединения всех этих 3 приложений в одно целое. Конечно же не нами, а разработчиками приложений)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;примеры&quot;&gt;Примеры&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В качестве примеров конечно же на первых местах всегда будут приложения из Азии, так как самые первые и масштабные в итоге приложения были разработаны в Китае. Самым масштабным на данный момент, наверное, является WeChat, у которого в составе куча сервисов для платежей, игр, развлечений, бронирования и т.д. Если говорим про Азию, то также можно упомянуть следующие приложения: AliPay, Gojek, Grab.&lt;/p&gt;

&lt;p&gt;Если смотреть на запад, то тут конечно уже знакомый нам Uber, как минимум в качестве такси или доставки. В состав Uber также входит Uber Money, UberEats.&lt;/p&gt;

&lt;p&gt;В России же самым популярным, наверное, является YandexGo, в принципе я думаю не нуждается в представлении для жителей России и Казахстана.&lt;/p&gt;

&lt;p&gt;Ну и Казахстан не отстаёт, имея у себя Kaspi. Самый популярный банк имеет своё приложение, в котором помимо Kaspi QR есть и Kaspi магазин.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;пользовательский-интерфейс&quot;&gt;Пользовательский интерфейс&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Согласитесь, что пользователи разные и как говорится &lt;code class=&quot;highlighter-rouge&quot;&gt;на вкус и цвет товарищей нет&lt;/code&gt;. Т.е. один пользователь может пользоваться всем микро-сервисами, а вот другой к примеру, только парочкой. Соответственно &lt;strong&gt;супер-приложение (superapp)&lt;/strong&gt; должно предоставить возможность пользователю самому решать какие именно микро-сервисы загружать при старте приложения.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;итог&quot;&gt;Итог&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Лень двигатель прогресса. Из-за того, что пользователь хочет делать минимум движений для получения конечного результат супер-приложения (superapp) и пользуются спросом.&lt;/p&gt;

&lt;p&gt;Будущее развитие супер-приложений (superapp) я считаю будет изобретение собственных смартфонов для супер-приложения (superapp).&lt;/p&gt;
</description>
        <pubDate>Fri, 21 Oct 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/what-is-superapp</link>
        <guid isPermaLink="true">http://www.tipoit.kz/what-is-superapp</guid>
        
        <category>read</category>
        
        
      </item>
    
      <item>
        <title>Ansible 2.9 - Просмотр версии collection</title>
        <description>&lt;p&gt;Если у вас последняя версия &lt;strong&gt;ansible&lt;/strong&gt; и &lt;strong&gt;ansible-galaxy&lt;/strong&gt; то можно просмотреть список всех &lt;strong&gt;collections&lt;/strong&gt; просто одной командой &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible-galaxy list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Но вот если вас старая версия &lt;strong&gt;ansible-galaxy&lt;/strong&gt;, в которой нет опции &lt;code class=&quot;highlighter-rouge&quot;&gt;list&lt;/code&gt; то придётся немножко подумать. В основном рекомендации в интернете — это просто обновить &lt;strong&gt;ansible-galaxy&lt;/strong&gt; и это хорошее решение, но не всегда доступное.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;просмотр-версии-collection&quot;&gt;Просмотр версии collection&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Так вот чтобы просмотреть нам понадобятся 2 директории: &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/share/ansible/collections&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;/home/username/.ansible/collections/&lt;/code&gt;. В этих двух директориях по умолчанию хранятся все &lt;strong&gt;collections&lt;/strong&gt;. И если вам повезло, и разработчик вложил в свой &lt;strong&gt;collection&lt;/strong&gt; файлы &lt;code class=&quot;highlighter-rouge&quot;&gt;CHANGELOG&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;README&lt;/code&gt;, то возможно в этих файлах вы и найдёте версию.&lt;/p&gt;

&lt;p&gt;В моём случае версия была в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;CHANGELOG.rst&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /home/username/.ansible/collections/ansible_collections/containers/podman/CHANGELOG.rst
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 21 Oct 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/check-version-of-collection</link>
        <guid isPermaLink="true">http://www.tipoit.kz/check-version-of-collection</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        
      </item>
    
      <item>
        <title>PostgreSQL - Баним пользователя после неудачных попыток входа</title>
        <description>&lt;p&gt;Сразу оговорюсь что в бесплатной версии &lt;strong&gt;PostgreSQL&lt;/strong&gt; нет встроенного функционала, который бы это обеспечивал. Поэтому все варианты решения данной задачи в той или иной степени можно будет назвать костылями. Одну статью с использованием &lt;em&gt;fail2ban&lt;/em&gt; я уже &lt;a href=&quot;https://tipoit.kz/fail2ban-postgresql&quot;&gt;написал&lt;/a&gt;, теперь дело за вторым вариантом.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;суть-работы&quot;&gt;Суть работы&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В &lt;strong&gt;PostgreSQL&lt;/strong&gt; используются хуки, которые если просто выражаться без подробностей этакие &lt;em&gt;api&lt;/em&gt; модули, написанные на &lt;em&gt;C&lt;/em&gt;. Так вот благодаря этим &lt;em&gt;hook&lt;/em&gt; вы можете обращаться к уже запущенным сессиям в &lt;strong&gt;PostgreSQL&lt;/strong&gt;, загружая эти модули при старте &lt;strong&gt;PostgreSQL&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Мы будем использовать кастомный &lt;em&gt;hook&lt;/em&gt; под названием &lt;a href=&quot;https://github.com/okbob/session_exec&quot;&gt;session_exec&lt;/a&gt;. Суть в том, что благодаря &lt;strong&gt;session_exec&lt;/strong&gt; мы можем запускать любую функцию в &lt;strong&gt;PostgreSQL&lt;/strong&gt;, но только если аутентификация прошла успешна, т.е. сессия открыта. Я думаю вы сразу поняли почему этот метод я бы назвал костылём, а если нет, то ответ будет ниже. В любом случае я советую дочитать до конца, может вы не так привередливы, как я.&lt;/p&gt;

&lt;p&gt;В итоге схема будет следующая:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Пользователь удачно авторизуется на сервере &lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Дальше запускается функция, которая читает файлы логов &lt;strong&gt;PostgreSQL&lt;/strong&gt;. Для того чтобы понять, что кто-то неудачно пытался авторизоваться&lt;/li&gt;
  &lt;li&gt;Дальше эта функция записывает эти попытки в отдельную таблицу&lt;/li&gt;
  &lt;li&gt;Вытаскивает значения для каждого пользователя и если в сумме больше предела банит пользователя&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;недостатки&quot;&gt;Недостатки&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сразу распишу недостатки этого метода чтобы вы сразу для себя решили нужно ли вам это.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Нужно руками отменять бан пользователя&lt;/li&gt;
  &lt;li&gt;Нужно для каждого пользователя вручную внести в таблицу запись о том, что он удачно залогинился&lt;/li&gt;
  &lt;li&gt;Бан пользователя произойдёт только после того как кто-либо удачно авторизуется в &lt;strong&gt;PostgreSQL&lt;/strong&gt;, потому что функция выполнится только при удачной авторизации, но блокируемый пользователь всё равно не сможет войти.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-session_exec&quot;&gt;Установка session_exec&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Клонируем репозиторий
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo git clone https://github.com/okbob/session_exec.git
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;session_exec
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Компилируем и ставим session_exec
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install redhat-rpm-config -y
sudo find / -name pg_config
sudo make &lt;span class=&quot;nv&quot;&gt;PG_CONFIG&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/pgsql-14/bin/pg_config
sudo make &lt;span class=&quot;nv&quot;&gt;PG_CONFIG&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/pgsql-14/bin/pg_config install
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;подготовка-таблиц&quot;&gt;Подготовка таблиц&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как я уже говорил выше нам понадобиться 2 таблицы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;auth_table&lt;/code&gt; - в которой будем хранить информацию об авторизации&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;postgres_log&lt;/code&gt; - будет &lt;em&gt;FOREIGN TABLE&lt;/em&gt; для логов&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Поэтому создаём эти 2 таблицы, в таблице postgres_log обратите внимание на команду где я делаю парсинг логов  &lt;strong&gt;PostgreSQL&lt;/strong&gt;. Если у вас в postgresql.conf значение переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;log_line_prefix&lt;/code&gt; не &lt;code class=&quot;highlighter-rouge&quot;&gt;'%m [%p] %q%u@%d@%h '&lt;/code&gt; парнсинг будет отличаться.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo su - postgres
vim get_logs.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/pgsql/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/data/log/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*.log&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-mtime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;password authentication failed &quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;awk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-F&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$1,$2,$3&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,$4&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,$5&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,$6&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,$7&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$8&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$9&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$10&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$11&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$12;}'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;awk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gsub(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@ &quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;chmod u+x get_logs.sh
psql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;login_time&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;int4&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EXTENSION&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file_fdw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERVER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pglog&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FOREIGN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATA&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;WRAPPER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file_fdw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FOREIGN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres_log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;log_time&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;session_id&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;database_name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;connection_from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;error_severity&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SERVER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pglog&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;OPTIONS&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;program&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'/var/lib/pgsql/get_logs.sh'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;format&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'csv'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;delimiter&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'@'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создание-пользователя-для-тестов&quot;&gt;Создание пользователя для тестов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы проверить можем ли мы получить доступ к логам через таблицу &lt;code class=&quot;highlighter-rouge&quot;&gt;postgres_log&lt;/code&gt; создадим пользователя и попробуем специально неудачно залогинится.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/lib/pgsql/14/data/pg_hba.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;md&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;md&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl reload postgresql-14
sudo su - postgres
psql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;admin&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PASSWORD&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'123456'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;А я напоминаю, что в проде не &lt;a href=&quot;http://www.tipoit.kz/postgresql-password-in-clear-text-in-log&quot;&gt;стоит писать в команде открытый пароль&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql -U admin -d postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;psql:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;error:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/run/postgresql/.s.PGSQL.5432&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FATAL:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;admin&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь сделаем select к таблице &lt;code class=&quot;highlighter-rouge&quot;&gt;postgres_log&lt;/code&gt; и проверим что доступ к логам &lt;strong&gt;PostgreSQL&lt;/strong&gt; присутствует.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres_log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;log_time&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;session_id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;database_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;connection_from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;error_severity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----------------------------+------------+-----------+---------------+-----------------+----------------+---------------------------------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;---------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;55.938&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;06&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;206815&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FATAL:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;первичная-запись&quot;&gt;Первичная запись&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут вылезает еще один недостаток этого метода - это то, что нужно вручную добавить запись о удачной аутентификации пользователя.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;insert&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;into&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;log_time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres_log&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'%authentication failed%'&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;error_severity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'FATAL:'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создание-функции&quot;&gt;Создание функции&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже почти на финишной прямой, сейчас нам осталось только создать функцию, которая будет вызваться при удачной аутентификации и добавить модуль в сам &lt;strong&gt;PostgreSQL&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;replace&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;custom_login&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;returns&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$$&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;declare&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;zone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;begin&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;-- Get the latest time in the current log &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;login_time&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;login_time&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;limit&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;into&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 

 &lt;span class=&quot;c1&quot;&gt;-- Insert the latest data into auth_table surface &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;insert&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;into&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt;  
&lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;log_time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;postgres_log&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'%authentication failed%'&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;error_severity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'FATAL:'&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;log_time&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;update&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;login_time&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 

&lt;span class=&quot;c1&quot;&gt;-- Check if the number of login failures is greater than 3, If more than 3 Then lock the user &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;having&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt; 
&lt;span class=&quot;n&quot;&gt;loop&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- Lock the user &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'alter user %I nologin'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 
&lt;span class=&quot;c1&quot;&gt;-- Disconnect the currently locked user session &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;EXECUTE&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'select pg_catalog.pg_terminate_backend(pid) from pg_catalog.pg_stat_activity where usename=$1'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;n&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;notice&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Account % is locked!'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;$$&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;language&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;plpgsql&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;strict&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;security&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;definer&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;search_path&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'public'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вызов-библиотеки-session_exec&quot;&gt;Вызов библиотеки session_exec&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы наша функция вызывалась при удачной аутентификации нам нужно подключить библиотеку &lt;strong&gt;session_exec&lt;/strong&gt; и передать имя функции для вызова.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/lib/pgsql/14/data/postgresql.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;session_preload_libraries&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'session_exec'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;session_exec.login_name='custom_login'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart postgresql-14
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь если неудачно залогинится и проверить таблицу &lt;code class=&quot;highlighter-rouge&quot;&gt;auth_table&lt;/code&gt; то у нас должна появится запись о неудачной аутентификации от пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;55.938&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;28.614&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;тестируем&quot;&gt;Тестируем&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь нам нужно произвести 3 или более неудачных аутентификаций под пользователем &lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt;. Но заблокируется он только после того как мы удачно авторизуемся на сервере &lt;strong&gt;PostgreSQL&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql -U admin -d postgres
psql -U admin -d postgres
psql -U admin -d postgres

psql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;NOTICE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;Account&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;admin&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;locked&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;

&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;du&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;                                   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;roles&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Attributes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----------+------------------------------------------------------------+-----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Superuser,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;role,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DB,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Replication,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bypass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RLS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;разблокировка-пользователя&quot;&gt;Разблокировка пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;А вот разблокировать пользователя придётся вручную, выполнив команды ниже:&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;update&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_table&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'admin'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;admin&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;login&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;du&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Attributes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----------+------------------------------------------------------------+-----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                                            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Superuser,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;role,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DB,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Replication,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Bypass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RLS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;итог&quot;&gt;Итог&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самый большой минус этого решения что нужно удачно залогинится чтобы пользователь всё-таки заблокировался, при этом не важно под каким пользователем вы залогинились (superuser и т.д.). При этом в целом сам пользователь, который неудачно логинился 3 раза после тоже не зайдёт, но вот ошибка будет &lt;code class=&quot;highlighter-rouge&quot;&gt;psql: error: connection to server on socket &quot;/var/run/postgresql/.s.PGSQL.5432&quot; failed: FATAL:  terminating connection due to administrator command&lt;/code&gt;. Но если у вас большой проект и там авторизация происходит часто, то это небольшая проблема.&lt;/p&gt;

&lt;p&gt;Второе это то что при каждом логине будет считывается информация с лог файлов &lt;strong&gt;PostgreSQL&lt;/strong&gt; что будет немного притормаживать саму систему. Насколько сильно будет страдать производительность я не знаю, так как тестировал на редко используем сервере. Если уж этот процесс действительно долгий то как решение можно получать логи только сегодняшнего дня используя следующий запрос: &lt;code class=&quot;highlighter-rouge&quot;&gt;find /var/lib/pgsql/14/data/log/ -type f -name &quot;*.log&quot; -mtime -1 -exec cat {} \; | grep &quot;$asd .* password authentication failed &quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В целом вариант конечно же рабочий, но со своими недостатками. Использовать такой способ или нет уже на ваше усмотрение. Иногда бывают безвыходные ситуации и даже такие способы будут полезны для решения задач.&lt;/p&gt;
</description>
        <pubDate>Thu, 13 Oct 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/postgresql-ban-user-after-failed-login</link>
        <guid isPermaLink="true">http://www.tipoit.kz/postgresql-ban-user-after-failed-login</guid>
        
        <category>unix</category>
        
        <category>linux</category>
        
        <category>postgresql</category>
        
        <category>database</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>Fail2ban - Selinux context</title>
        <description>&lt;p&gt;История начинается с того что мне понадобилось настроить &lt;strong&gt;Fail2ban&lt;/strong&gt; на блокировку по &lt;code class=&quot;highlighter-rouge&quot;&gt;IP&lt;/code&gt; если кото-то неудачно залогинился в &lt;em&gt;PostgreSQL&lt;/em&gt;, если интересно можно почитать тут. Так вот написал я своё правило верно, но при старте &lt;strong&gt;fail2ban&lt;/strong&gt; получил ошибку &lt;strong&gt;Have not found any log file for postgres-lockuser jail&lt;/strong&gt;. По сути ошибка говорит о том, что нет никаких логов в директории, что я указал. Но я-то знаю, что там есть, да и если выключить &lt;em&gt;Selinux&lt;/em&gt; то всё работает прекрасно.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-have-not-found-any-log-file-for-jail&quot;&gt;Решение &lt;code class=&quot;highlighter-rouge&quot;&gt;Have not found any log file for jail&lt;/code&gt;&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Начинающий специалист или в простонародном пофигист просто отключил бы этот вредный &lt;strong&gt;Selinux&lt;/strong&gt; и пошёл дальше смотреть приколы в глобальной паутине. Но это не мой выход, и я решил разобраться. Да и решение на самом деле оказалось довольно простым.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;varlogauditauditlog&quot;&gt;/var/log/audit/audit.log&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала проверим логи /var/log/audit/audit.log.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo tail -f /var/log/audit/audit.log | grep fail2ban-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;type=AVC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg=audit(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1665124834.173&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;407292&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;avc:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16323&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;comm=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fail2ban-server&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;log&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dev=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sdi&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ino=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1442802&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scontext=system_u:system_r:fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tcontext=system_u:object_r:unlabeled_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tclass=dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;permissive=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Да вроде бы и нашли что-то, но кто-то может и не понять, что тут да к чему, поэтому посмотрим немного с другой стороны, более удобной человеческому взгляду.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo audit2allow -w -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;type=AVC&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg=audit(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1665124834.173&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;407292&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;avc:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;denied&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pid=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16323&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;comm=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fail2ban-server&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;log&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dev=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;sdi&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ino=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1442802&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scontext=system_u:system_r:fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tcontext=system_u:object_r:unlabeled_t:s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tclass=dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;permissive=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Was&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;caused&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Missing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enforcement&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(TE)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rule.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;You&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;can&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;audit&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loadable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;access.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге мы видим, что нет правила selinux чтобы &lt;strong&gt;Fail2ban&lt;/strong&gt; имел доступ к логам &lt;em&gt;PostgreSQL&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создадим-это-правило&quot;&gt;Создадим это правило&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;На самом деле всё просто и создаём мы все одной командой.&lt;/p&gt;

&lt;p&gt;Для начала узнаем какое правило нам нужно найти в логах. Для этого выполняем:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo audit2allow -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#=============&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==============&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#!!!!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WARNING:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'unlabeled_t'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unlabeled_t:dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь используя &lt;em&gt;grep&lt;/em&gt; отыщем логи с упоминанием &lt;strong&gt;fail2ban&lt;/strong&gt; и сразу же создадим правило только для &lt;strong&gt;fail2ban&lt;/strong&gt;. Иначе в правило попадут все проблемные сервисы и права для них.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo grep fail2ban /var/log/audit/audit.log | sudo audit2allow -M fail2ban-postgresql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;To&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;active,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;execute:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;semodule&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-i&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban-postgresql.pp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выводе нам как бы сразу намекают что это еще не всё и нужно применить созданное правило. Но для начала рекомендую проверить какие файлы нам создала команда выше.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ls -la | grep fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-rw-r-----.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2008&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban-postgresql.pp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-rw-r-----.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;840&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban-postgresql.te&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В файле &lt;code class=&quot;highlighter-rouge&quot;&gt;fail2ban-postgresql.te&lt;/code&gt; как раз-таки и прописывается что будет происходить при активации данного правила.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim fail2ban-postgresql.te
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban-postgresql&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unlabeled_t;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail2ban_t;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#=============&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;==============&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#!!!!&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WARNING:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'unlabeled_t'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban_t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unlabeled_t:dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;read;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;применяем-правило&quot;&gt;Применяем правило&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;И теперь собственно последний шаг в этом нелегком деле - это применить созданное правило.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo semodule -i fail2ban-postgresql.pp
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Иногда возможно будет необходимо провести все операции еще раз, так как после исправления одной проблемы с Selinux возможно придётся исправлять новую.&lt;/p&gt;
</description>
        <pubDate>Sun, 09 Oct 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/fail2ban-selinux-contextl</link>
        <guid isPermaLink="true">http://www.tipoit.kz/fail2ban-selinux-contextl</guid>
        
        <category>unix</category>
        
        <category>linux</category>
        
        <category>fail2ban</category>
        
        <category>postgresql</category>
        
        <category>database</category>
        
        
      </item>
    
      <item>
        <title>Fail2ban - Блокировка по IP при неудачной аутентификации в PostgreSQL</title>
        <description>&lt;p&gt;Так уж сложилось что в бесплатной версии &lt;em&gt;PostgreSQL&lt;/em&gt; нет возможности блокировать пользователя после достижения определенного количества неудачных попыток аутентификации. Поэтому приходится использовать что-то другое для решения этой задачи.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;fail2ban&quot;&gt;Fail2ban&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При использовании &lt;strong&gt;Fail2ban&lt;/strong&gt; банить именно пользователя в &lt;em&gt;PostgreSQL&lt;/em&gt; не получится, если только не использовать скрипты &lt;em&gt;PostgreSQL&lt;/em&gt; для блокировки пользователя. Но тут встаёт вопрос с подключением к бд, и хранению пароля.&lt;/p&gt;

&lt;p&gt;В моём же случае было достаточно просто блокировать подключения к &lt;em&gt;PostgreSQL&lt;/em&gt; с IP-адреса, от которого были множественные неудачные подключения.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/fail2ban-postgresql-1.drawio.png&quot; alt=&quot;fail2ban postgresql block&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-jail&quot;&gt;Создаём jail&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Jail&lt;/strong&gt; включает в себя набор правил и фильтров, по которым и происходим блокировка.&lt;/p&gt;

&lt;p&gt;Для создания выполняем следующее:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/fail2ban/jail.d/postgres.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-iplock&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-iplock&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iptables-postgres&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logpath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/lib/pgsql/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/data/log/postgresql-*.log&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;maxretry&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bantime&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;380&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;usedns&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;raw&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-фильтр&quot;&gt;Создаём фильтр&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя фильтр &lt;em&gt;Fail2ban&lt;/em&gt; будет искать вхождение в лог файлах, путь к которым указан в переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;logpath&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/fail2ban/filter.d/postgres-iplock.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Definition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failregex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;^.*@&amp;lt;F-ID/&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FATAL:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Внимание ваш pattern для фильтра может отличатся, так как в &lt;em&gt;PostgreSQL&lt;/em&gt; можно изменить стиль вывода логов, используя переменную &lt;code class=&quot;highlighter-rouge&quot;&gt;log_line_prefix&lt;/code&gt;, в файле &lt;em&gt;postgresql.conf&lt;/em&gt;. В моём случае значение переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;'%m [%p] %q%u@%d@%h '&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;создаём-правило&quot;&gt;Создаём правило&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно, правило и определяет то что будет происходить, когда значения по фильтру найдены и в сумме равны максимальному порогу, который задаётся в переменной maxretry.&lt;/p&gt;

&lt;p&gt;Я же выбрал стандартный &lt;em&gt;iptables&lt;/em&gt; только подредактировал под порт 5432.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp /etc/fail2ban/action.d/iptables.conf /etc/fail2ban/action.d/iptables-postgres.conf
sudo vim /etc/fail2ban/action.d/iptables-postgres.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INCLUDES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;before&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iptables-common.conf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Definition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;actionstart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;iptables&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-N&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b-&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;iptables&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-A&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b-&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;returntype&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;iptables&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-I&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;chain&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-p&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tcp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--dport&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b-&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;actioncheck&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;iptables&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-n&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-L&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;chain&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-q&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b-&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;actionban&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;iptables&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-I&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b-&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;ip&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;blocktype&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;actionunban&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;iptables&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-D&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;b-&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;ip&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;blocktype&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;тестируем&quot;&gt;Тестируем&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь, когда всё готово перезапускаем сервис &lt;strong&gt;fail2ban&lt;/strong&gt; и смотрим логи на предмет срабатывания. Если сервис после перезапуска не стартовал возможно придётся немного &lt;a href=&quot;https://tipoit.kz/fail2ban-selinux-contextl&quot;&gt;поработать с selinux&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Пытаемся неудачно залогинится на сервер &lt;em&gt;PostgreSQL&lt;/em&gt; как минимум 3 раза. Если всё сделано правильно, то после 3 раза у нас просто будет недоступен порт 5432.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psql -U admin -d postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В файле логов находим следующие записи:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;773&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban.filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1109&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-lockuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;613&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban.filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1109&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-lockuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;023&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban.filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1109&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-lockuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;36&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;37&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;073&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban.actions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1109&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOTICE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-lockuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Ban&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-10-07&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;47&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;173&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fail&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ban.actions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1109&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOTICE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgres-lockuser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Unban&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Время, через которое IP-адрес будет разбанен задаётся в переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;bantime&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;итог&quot;&gt;Итог&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Да это конечно не бан конкретного пользователя, но и тут есть свои преимущества. Как минимум даже если злоумышленник узнает ваши логины без паролей, он не сможет их заблокировать. Да, есть и такой метод атаки.&lt;/p&gt;

&lt;p&gt;В общем решение всегда за вами подходит вам такой метод или нет.&lt;/p&gt;

&lt;p&gt;Еще один минус в том, что fail2ban не умеет работать с ротацией логов. Т.е. если активный файл с логами создастся после запуска сервиса fail2ban он не поймёт, что логи в новом файле. Во избежание такой ситуации все активные логи надо писать в один файл и к нему применять какой-нибудь logrotate.&lt;/p&gt;
</description>
        <pubDate>Sun, 09 Oct 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/fail2ban-postgresql</link>
        <guid isPermaLink="true">http://www.tipoit.kz/fail2ban-postgresql</guid>
        
        <category>unix</category>
        
        <category>linux</category>
        
        <category>fail2ban</category>
        
        <category>postgresql</category>
        
        <category>database</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Timeout waiting for privilege escalation prompt</title>
        <description>&lt;p&gt;При выполнении задачи (task) в &lt;strong&gt;Ansible&lt;/strong&gt; можно получить ошибку &lt;strong&gt;timeout waiting for privilege escalation prompt&lt;/strong&gt;. При чём ошибка плавающая, может вылезать на любой задаче в play.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-1&quot;&gt;Решение 1&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первое решение, которое я рекомендую выполнять если уже прям никаких больше выходов нет это нужно увеличить лимит времени в файле конфигурации ansible. Мой аргумент в том, что если работало раньше, то значит и не в лимите дело, особенно учитывая что другие задачи выполняются.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/ansible/ansible.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;timeout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-2&quot;&gt;Решение 2&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вторым решением, которое было правдиво именно в моём случае является нагрузка на сервер. Первым делом я рекомендую проверить нагрузку на ваш сервер. В моём случае сервер был полностью загружен по ОЗУ, причём это клиентский сервер, а не сервер с Ansible.&lt;/p&gt;

&lt;p&gt;В моём случае я просто добавил ОЗУ, так как это виртуальный сервер.&lt;/p&gt;
</description>
        <pubDate>Thu, 29 Sep 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-timeout-waiting-for-privilege-escalation-prompt</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-timeout-waiting-for-privilege-escalation-prompt</guid>
        
        <category>ansible</category>
        
        <category>CI/CD</category>
        
        <category>devops</category>
        
        
      </item>
    
      <item>
        <title>Windows - Безопасный пароль в скриптах</title>
        <description>&lt;p&gt;Так или иначе каждый человек, работающий с написанием скриптов рано или поздно сталкивается с тем что нужно &lt;strong&gt;использовать пароли в скриптах&lt;/strong&gt;. Если это безответственный человек, то он просто вбивает пароль в скрипт в открытом виде и забывает про это.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/security/securepwd-1.drawio.png&quot; alt=&quot;thief can steal your password&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Но есть вторая категория людей, которые уже не хотят хранить пароль в открытом виде, кстати в эту группу также могут и перейти люди с первой группы, особенно если они уже слили пароль однажды.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/security/securepwd-2.drawio.png&quot; alt=&quot;thief can't steal your password&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;export-clixml&quot;&gt;Export-Clixml&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Наш первый вариант — это команда &lt;code class=&quot;highlighter-rouge&quot;&gt;Export-Clixml&lt;/code&gt;, которая просто сохраняет пароль в &lt;em&gt;xml&lt;/em&gt; файл. Т.е. суть работы следующая:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вы экспортируете пароль в файл под текущим пользователем, под которым будете запускать скрипт&lt;/li&gt;
  &lt;li&gt;Удостоверяетесь что доступ к этому файлу есть только у этого пользователя&lt;/li&gt;
  &lt;li&gt;Уже используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;Import-CliXml&lt;/code&gt; импортируете пароль в свой скрипт&lt;/li&gt;
  &lt;li&gt;Рекомендация от меня если возможно запретить этому пользователю вход в систему и сделать файл скрытым&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Скажу сразу что этот вариант мне не нравится. Да вы получите доступ к файлу с паролем только под этим пользователем. Но не забываем несколько вещей:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Малейший шанс того что кто-то зайдёт под этим пользователем в систему всё же существует&lt;/li&gt;
  &lt;li&gt;Администратор системы может получить доступ к любым файлам, если знает, как&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/security/securepwd-3.drawio.png&quot; alt=&quot;thief can steal your password&quot; /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;#ask for password
$pwd = Get-Credential myuser
#store password in file
$pwd | Export-CLiXml password.clixml
# Make files hidden
(get-item password.clixml).Attributes += 'Hidden'
#get password from file
$password= Import-CliXml password.clixml
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;convertto-securestring&quot;&gt;ConvertTo-SecureString&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вариант второй уже нравится мне больше. Тут мы используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;ConvertTo-SecureString&lt;/code&gt; которая преобразует обычную строку в безопасную. Также для большей безопасности то, что мы получили от команды &lt;code class=&quot;highlighter-rouge&quot;&gt;ConvertTo-SecureString&lt;/code&gt; будем дополнительно шифровать, с использованием файл ключа.  Суть работы следующая:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Мы создаём файл ключ, который дальше будет использоваться для создания зашифрованной строки&lt;/li&gt;
  &lt;li&gt;Создаём текстовый файл, в котором сохраняем пароль в чистом виде (потом удаляем)&lt;/li&gt;
  &lt;li&gt;Преобразовываем обычную строку в безопасную (&lt;code class=&quot;highlighter-rouge&quot;&gt;ConvertTo-SecureString&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Преобразовываем безопасную строку в зашифрованную используя ключ (&lt;code class=&quot;highlighter-rouge&quot;&gt;ConvertFrom-SecureString&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Сохраняем полученное в файл&lt;/li&gt;
  &lt;li&gt;Используем в скриптах расшифровывая с использованием файл ключа&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Тут уже как минимум наш пароль в файле становится зашифрованным, а не лежит в открытом виде. Также без ключа не получится расшифровать пароль.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/security/securepwd-4.drawio.png&quot; alt=&quot;thief can steal your password&quot; /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;#path for key file
$keyFile  =  &quot;keyfile.key&quot;
#path for file which contain password (must be deleted after first run)
$insecurePassFile  =  &quot;insecurePass.txt&quot;
##path for file which will be contain encrypted password
$securePassFile  =  &quot;securePass.txt&quot;

#Create key file
$key  =  New-Object  Byte[]  32
$key | Out-File  $keyFile
(get-item $keyFile).Attributes += 'Hidden'

#Convert password to secure string and then to encrypted string
$key  =  Get-Content  $keyFile
$password  =  Get-Content  $insecurePassFile | Select-Object  -First  1 | ConvertTo-SecureString  -AsPlainText  -Force | ConvertFrom-SecureString  -key  $key
$password | Out-File  $securePassFile
(get-item $securePassFile).Attributes += 'Hidden'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Команды выше можно запустить всего один раз, и после выполнения обязательно удалить файл с открытым паролем. Только не обновите файл с зашифрованным паролем.&lt;/p&gt;

&lt;p&gt;После можно уже использовать эту схему у себя в скрипте:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;#Get password in secure string
$SecurePassword = Get-Content  $securePassFile | ConvertTo-SecureString  -Key  $key
$Credentials  =  New-Object  System.Management.Automation.PSCredential -ArgumentList  $UserName, $SecurePassword

#Get password 
$pwd  = [System.Net.NetworkCredential]::new(&quot;&quot;, ( Get-Content  $securePassFile | ConvertTo-SecureString  -Key  $key ) ).Password
$pwd
$pwd2  =  $Credentials.GetNetworkCredential().Password
$pwd2
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;convertto-securestring-1&quot;&gt;ConvertTo-SecureString&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вариант выше конечно же хорош, но мне этого еще недостаточно. Ну что тебе не нравится тут? - спросите вы. А не нравится мне то, что тут присутствует файл ключ, который всё также может стырить какой-нибудь жулик (жулик не воруй).&lt;/p&gt;

&lt;p&gt;И что можно сделать? Да по сути ничего не надо особо менять, выполняем всё тоже самое только без ключа (&lt;code class=&quot;highlighter-rouge&quot;&gt;ConvertFrom-SecureString&lt;/code&gt;). Магия тут вся заключается в &lt;em&gt;Windows Data Protection API&lt;/em&gt;, благодаря которой вместо ключа будет не файл, а ваша учетная запись &lt;em&gt;WIndows&lt;/em&gt;. Да, да вот такая замечательная новость, т.е. для того чтобы добраться до пароля жулику нужно будет залогинится под вашей учетной записью и именно на этом же хосте.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/security/securepwd-5.drawio.png&quot; alt=&quot;thief can't steal your password&quot; /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;#path for file which contain password (must be deleted after first run)
$insecurePassFile  =  &quot;insecurePass.txt&quot;
##path for file which will be contain encrypted password
$securePassFile  =  &quot;securePass.txt&quot;

#Convert password to secure string and then to encrypted string
$password  =  Get-Content  $insecurePassFile | Select-Object  -First  1 | ConvertTo-SecureString  -AsPlainText  -Force | ConvertFrom-SecureString
$password | Out-File  $securePassFile
(get-item $securePassFile).Attributes += 'Hidden'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;После чего попробуйте выполнить команды ниже от разных пользователей &lt;em&gt;Windows&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;#Get password in secure string
$SecurePassword = Get-Content  $securePassFile | ConvertTo-SecureString
$Credentials  =  New-Object  System.Management.Automation.PSCredential -ArgumentList  $UserName, $SecurePassword

#Get password 
$pwd  = [System.Net.NetworkCredential]::new(&quot;&quot;, ( Get-Content  $securePassFile | ConvertTo-SecureString ) ).Password
$pwd
$pwd2  =  $Credentials.GetNetworkCredential().Password
$pwd2
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для меня самым идеальным вариантом является третий по счёту. Возможность того, что кто-то сворует ваш пароль, а потом ещё и залогинится на том же хосте и найдёт файл с зашифрованным паролем невысокий.&lt;/p&gt;
</description>
        <pubDate>Fri, 23 Sep 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/windows-secure-store-password</link>
        <guid isPermaLink="true">http://www.tipoit.kz/windows-secure-store-password</guid>
        
        <category>windows</category>
        
        <category>security</category>
        
        <category>powershell</category>
        
        <category>password</category>
        
        
      </item>
    
      <item>
        <title>Linux - Ставим PowerShell</title>
        <description>&lt;p&gt;Вопрос конечно спорный нужно ли ставить &lt;code class=&quot;highlighter-rouge&quot;&gt;PowerShell&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;Linux&lt;/code&gt;, но задачи бывают разные. Например, мне нужно было использовать &lt;a href=&quot;https://developer.vmware.com/powercli/installation-guide&quot;&gt;PowerCLI&lt;/a&gt;, который есть только под &lt;code class=&quot;highlighter-rouge&quot;&gt;PowerShell&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;centos&quot;&gt;CentOS&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;добавляем-репозиторий&quot;&gt;Добавляем репозиторий&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если у вас версия &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS&lt;/code&gt; не 7, то обязательно замените цифру 7 в команде &lt;code class=&quot;highlighter-rouge&quot;&gt;curl&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;ставим-powershell&quot;&gt;Ставим PowerShell&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install --assumeyes powershell
pwsh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ubuntu&quot;&gt;Ubuntu&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;добавляем-репозиторий-1&quot;&gt;Добавляем репозиторий&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
wget -q &lt;span class=&quot;s2&quot;&gt;&quot;https://packages.microsoft.com/config/ubuntu/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;lsb_release -rs&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/packages-microsoft-prod.deb&quot;&lt;/span&gt;
sudo dpkg -i packages-microsoft-prod.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;ставим-powershell-1&quot;&gt;Ставим PowerShell&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install -y powershell
pwsh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 07 Sep 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-install-powershell</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-install-powershell</guid>
        
        <category>unix</category>
        
        <category>linux</category>
        
        <category>powershell</category>
        
        
      </item>
    
      <item>
        <title>Ansible - user 'xxx' does not exist in /etc/passwd</title>
        <description>&lt;p&gt;При выполнении обычной задачи по созданию пользователя получил ошибку &lt;strong&gt;usermod: user ‘xxx’ does not exist in /etc/passwd&lt;/strong&gt;, хотя до этого уже выполнял такую же задачу с другим пользователем. Соответственно мысль о том, что что-то не так с сервером я сразу отсёк.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;суть-проблемы&quot;&gt;Суть проблемы&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вся суть тут в том, что вы скорее всего используете на этом хосте &lt;code class=&quot;highlighter-rouge&quot;&gt;SSO&lt;/code&gt;. Если говорить простыми словами, то у вас для авторизации используется &lt;code class=&quot;highlighter-rouge&quot;&gt;AD&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;И вся проблема в том, что вы пытаетесь локально на хосте создать пользователя, который уже существует в &lt;code class=&quot;highlighter-rouge&quot;&gt;AD&lt;/code&gt;. В моём случае я пытался создать пользователя, который уже был создан во &lt;code class=&quot;highlighter-rouge&quot;&gt;FreeIPA&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение&quot;&gt;Решение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я думаю тут решения как такого нет. Нужно просто создать другого пользователя, либо же управлять им в &lt;code class=&quot;highlighter-rouge&quot;&gt;AD&lt;/code&gt; и авторизовываться тоже под ним.&lt;/p&gt;

&lt;p&gt;Ну если вам уж очень нужно создать такого же пользователя локально, то можно попробовать удалить домашнюю директорию пользователя, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo rm /home/username&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 07 Sep 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-user-does-not-exist</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-user-does-not-exist</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>CI\CD</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Распределенный режим (Distributed Mode)</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Z3Vlt2o4Irs&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Мы уже говорил о том, как не надо устанавливать сервер &lt;strong&gt;MinIO&lt;/strong&gt; в &lt;em&gt;production&lt;/em&gt;. В этой же статье как раз и поговорим о том, как же всё-таки надо ставить &lt;strong&gt;MinIO&lt;/strong&gt; в &lt;em&gt;productiion&lt;/em&gt; среде.&lt;/p&gt;

&lt;p&gt;В распределенном режиме подразумевается, что у вас в общем 4 или более дисков (каталогов), которые могут быть отданы одной ноде либо нескольким. Конечно запускать всё на одной ноде в &lt;em&gt;productiion&lt;/em&gt; среде не рекомендуется. Каждая нода &lt;strong&gt;MinIO&lt;/strong&gt; в распределенном режиме имеет полную картину о других нодах так что ваше приложение может подключаться к любой ноде.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В распределенном режиме автоматически включается опция &lt;code class=&quot;highlighter-rouge&quot;&gt;erasure code&lt;/code&gt;, которая дублирует ваши данные обеспечивая возможность не потерять данные при выходе из строя нод либо дисков. Можно сравнить данную функцию с &lt;em&gt;RAID&lt;/em&gt;, но &lt;code class=&quot;highlighter-rouge&quot;&gt;Erasure coding&lt;/code&gt; обеспечивает восстановление на уровне объекта с меньшими затратами.&lt;/p&gt;

&lt;p&gt;В зависимости от того какую четность &lt;code class=&quot;highlighter-rouge&quot;&gt;erasure code&lt;/code&gt; вы настроили вы можете продолжать операции чтения и записи только с &lt;strong&gt;m/2&lt;/strong&gt; серверами или &lt;strong&gt;m*n/2&lt;/strong&gt; дисками, подключенными к сети и доступными.&lt;/p&gt;

&lt;p&gt;Распределенном режим также поддерживает следующие функции:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Репликация объектов&lt;/li&gt;
  &lt;li&gt;Блокировка однократной записи и многократного чтения&lt;/li&gt;
  &lt;li&gt;Версионность объекта&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;требования&quot;&gt;Требования&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждая нода должна иметь доступ к другим нодам по &lt;em&gt;API&lt;/em&gt; порту. Также все сервер MinIO должен быть запущен с использованием одинаковых портов на всех нодах.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MinIO&lt;/strong&gt; рекомендуют использование балансировщика нагрузки для управления подключением к кластеру, например, &lt;em&gt;NGINX&lt;/em&gt;, &lt;em&gt;HAProxy&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-4.png&quot; alt=&quot;minio requirements&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;одинаковые-имена&quot;&gt;Одинаковые имена&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы развернуть &lt;strong&gt;MinIO&lt;/strong&gt; в распределенном режиме ваши имена серверов должны называться так чтобы в итоге вы могли использовать регулярные выражения для передачи этих имён одной строкой создавая таким образом пул серверов (&lt;strong&gt;server pool&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Например имея такие имена серверов как &lt;code class=&quot;highlighter-rouge&quot;&gt;minio1.example.com&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;minio2.example.com&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;minio3.example.com&lt;/code&gt; мы легко можем перечислить их одной строкой типа &lt;code class=&quot;highlighter-rouge&quot;&gt;minio{1...3}.example.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-5.png&quot; alt=&quot;minio server name&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;jbod&quot;&gt;JBOD&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При использовании &lt;strong&gt;&lt;em&gt;MinIO&lt;/em&gt;&lt;/strong&gt; рекомендуется использовать голые диски (&lt;em&gt;JBOD&lt;/em&gt;) с типом файловой системы &lt;em&gt;XFS&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-6.png&quot; alt=&quot;minio hdd requirements&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Если верить официальному сайту, то использование файловых систем, отличных от &lt;em&gt;XFS&lt;/em&gt; как правило, имеют более низкую производительность.&lt;/p&gt;

&lt;p&gt;Ещё одна рекомендация — это использовать одинаковые диски во всех нодах пула серверов, как тип жесткого диска, так и его размер. Кроме того, &lt;strong&gt;MinIO&lt;/strong&gt; ограничивает размер используемого диска до самого маленького диска. Например, если в ноде есть 15 дисков по 10 ТБ и 1 диск по 1 ТБ, &lt;strong&gt;MinIO&lt;/strong&gt; ограничивает емкость каждого диска до 1 ТБ, по сути, как и СХД.&lt;/p&gt;

&lt;p&gt;Ну и еще одно логичное замечание — это то что все диски должны быть перемонтированы с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;fstab&lt;/code&gt;, будет плохо если все диски пропадут после перезагрузки.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;одинаковая-конфигурация&quot;&gt;Одинаковая конфигурация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На сайте &lt;em&gt;min.io&lt;/em&gt; сказано, что строго рекомендуется использовать сервера с одинаковым аппаратным обеспечением, хотя на мой взгляд это не так важно. Конечно использовать сервера с разным объёмом ОЗУ или количеством ядер не стоит, но вот какая разница какой производитель ОЗУ или количество планок я не совсем понимаю.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;планирование-мощностей&quot;&gt;Планирование мощностей&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также рекомендуется брать железо для &lt;strong&gt;MinIO&lt;/strong&gt; с расчётом на то что вы не будете его апгрейдить как минимум еще 2 года.&lt;/p&gt;

&lt;p&gt;Например, если ваше приложение за год создаёт файлы общим размером в 5ТБ, то вы должны иметь 15ТБ свободного дискового пространства.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы будем рассматривать установку &lt;strong&gt;MinIO&lt;/strong&gt; в распределенном режиме, состоящую из одного пула серверов (&lt;strong&gt;Server Pool&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-7.png&quot; alt=&quot;minio server pool&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;1-установка-сервера-minio&quot;&gt;1. Установка сервера MinIO&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;На каждой ноде пула необходимо установить &lt;strong&gt;MinIO&lt;/strong&gt; сервер, используя удобный нам метод.&lt;/p&gt;

&lt;p&gt;Для установки сервера &lt;strong&gt;MinIO&lt;/strong&gt; можно воспользоваться 3 методами:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Установка с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;RPM&lt;/code&gt; (RHEL)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio-20220523184511.0.0.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Установка с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;DEB&lt;/code&gt;(UBUNTU)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio_20220519182059.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Скачать бинарный файл
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio
sudo mv minio /usr/local/bin/
sudo chmod +x /usr/local/bin/minio
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;2-создание-systemd-сервиса&quot;&gt;2. Создание systemd сервиса&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы установили с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;deb&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;rpm&lt;/code&gt; пакета, то у вас уже создался файл сервиса по пути &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/systemd/system/minio.service&lt;/code&gt;, если же нет, то придётся создавать его вручную.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/systemd/system/minio.service
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Unit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Description=MinIO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Documentation=https://docs.min.io&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Wants=network-online.target&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;After=network-online.target&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AssertFileIsExecutable=/usr/local/bin/minio&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WorkingDirectory=/usr/local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;User=minio-user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Group=minio-user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ProtectProc=invisible&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EnvironmentFile=-/etc/default/minio&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ExecStartPre=/bin/bash&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-c&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;if [ -z \&quot;${MINIO_VOLUMES}\&quot; ]; then echo \&quot;Variable MINIO_VOLUMES not set in /etc/default/minio\&quot;; exit 1; fi&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ExecStart=/usr/local/bin/minio&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$MINIO_OPTS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$MINIO_VOLUMES&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;systemd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;restart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;always&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Restart=always&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Specifies&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;maximum&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;descriptor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;that&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;can&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;opened&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LimitNOFILE=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;65536&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Specifies&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;maximum&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;threads&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;can&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TasksMax=infinity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;timeout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logic&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;until&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stopped&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TimeoutStopSec=infinity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SendSIGKILL=no&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;WantedBy=multi-user.target&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Обратите внимание на &lt;em&gt;User&lt;/em&gt; и &lt;em&gt;Group&lt;/em&gt; именно под этим пользователем и группой будет работать сервис, так что у этого пользователя должны быть полные права к каталогам с данными.&lt;/p&gt;

&lt;p&gt;Для того чтобы добавить нового пользователя и сделать его владельцем каталогам с данными выполняем следующее:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo groupadd -r minio-user
sudo useradd -M -r -g minio-user minio-user
sudo chown minio-user:minio-user /data1 /data2 /data3 /data4  
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;3-создание-файла-с-переменными&quot;&gt;3. Создание файла с переменными&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как вы уже заметили в файле сервиса значениями многих параметров являются переменные, соответственно нам надо как-то передать эти переменные. Для этого нам понадобится создать файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/default/minio&lt;/code&gt; и поместить в него переменные.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/default/minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#собственно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;указываем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;и&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;директории&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;данных&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_VOLUMES=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://minio{1...4}.example.net:9000/mnt/disk{1...4}/minio&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#порт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;консоли&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_OPTS=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;--console-address :9001&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_ROOT_USER=minioadmin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_ROOT_PASSWORD=passw&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;URL-адрес&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;балансировщика&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;нагрузки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Это&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;значение&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*должно*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;совпадать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;на&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;всех&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;серверах&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MinIO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;у&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;вас&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;нет&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;балансировщика&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;нагрузки,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;установите&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;это&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;значение&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;на&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;любой&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*один*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;из&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;нод&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MinIO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MINIO_SERVER_URL=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://minio.example.net:9000&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chown minio-user:minio-user /etc/default/minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также по желанию вы можете установить значения и для других &lt;a href=&quot;https://docs.min.io/minio/baremetal/reference/minio-server/minio-server.html#minio-server-environment-variables&quot;&gt;переменных&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;4-tlsssl-сертификаты&quot;&gt;4. TLS/SSL сертификаты&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите использовать &lt;em&gt;https&lt;/em&gt; то вам понадобится пара открытого (&lt;code class=&quot;highlighter-rouge&quot;&gt;.crt&lt;/code&gt;) и закрытого ключа (&lt;code class=&quot;highlighter-rouge&quot;&gt;.key&lt;/code&gt;). Их нужно будет поместить в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;${HOME}/.minio/certs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если вы запускаете &lt;strong&gt;MinIO&lt;/strong&gt; как сервис &lt;em&gt;systemd&lt;/em&gt; то папкой ${HOME} будет являться домашняя директория пользователя, в нашем примере minio-user. Т.е. получается ключи нужно положить в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/home/minio-user/.minio/certs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если вы используете сертификат подписанный вашим личным центром сертификации то нужно будет поместить его публичный ключ в каталог &lt;code class=&quot;highlighter-rouge&quot;&gt;/home/minio-user/.minio/certs/CAs&lt;/code&gt;. И это конечно же нужно делать на каждой ноде пула серверов.&lt;/p&gt;

&lt;p&gt;Если вам чем-то не угодила папка сертификатов по умолчанию вы всегда можете задать свой собственный путь используя &lt;a href=&quot;https://docs.min.io/minio/baremetal/reference/minio-server/minio-server.html#minio.server.-certs-dir&quot;&gt;–certs-dir&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;5-настраиваем-firewall&quot;&gt;5. Настраиваем firewall&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и конечно нашим нодам нужно общаться между собой по портам 9000. Если у вас по умолчанию включен &lt;em&gt;firewall&lt;/em&gt; а так собственно и должно быть, то необходимо его настроить.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;9000/tcp --permanent
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;9001/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;5-запускаем-сервис-minio&quot;&gt;5. Запускаем сервис MinIO&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;И вот мы наконец-то перешли уже к запуску сервера &lt;strong&gt;MinIO&lt;/strong&gt;. Чтобы пул серверов заработал нужно запустить все ноды в пуле.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;minio.service
sudo systemctl start minio.service
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Проверяем что наш сервис живой выполнив команду &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo systemctl status minio.service&lt;/code&gt;. Если с сервисом что-то пошло не так вы всегда можете посмотреть его логи выполнив команду &lt;code class=&quot;highlighter-rouge&quot;&gt;journalctl -u minio.service&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;6-подключаемся-к-консоли&quot;&gt;6. Подключаемся к консоли&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя ip-адрес или еще лучше &lt;em&gt;DNS&lt;/em&gt; имя и порт любой ноды в пуле, мы можем получить доступ к консоли просто вбиваем эту информацию в адресной строке вашего любимого браузера. Вы также можете использовать любую ноду для подключения, так как все настройки и все данные находятся на каждой ноде.&lt;/p&gt;

&lt;p&gt;В итоге получаем такую картину, где вбиваем логин и пароль (задавали в файле переменных).
&lt;img src=&quot;/static/img/minio/2022-05-21_01-25.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Используя консоль, вы можете создавать пользователей, права доступа, бакеты и т.д. Правда не всё можно сделать через консоль, поэтому необходимо также и установить &lt;strong&gt;MinIO Client&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;7-установка-minio-client&quot;&gt;7. Установка MinIO Client&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя &lt;strong&gt;MinIO Client&lt;/strong&gt;, вы получаете возможность управления сервером &lt;strong&gt;MinIO&lt;/strong&gt; в командной строке.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/client/mc/release/linux-amd64/mc
sudo mv mc /usr/local/bin/mc
sudo chmod +x /usr/local/bin/mc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;8-создаём-alias-для-сервера-minio&quot;&gt;8. Создаём alias для сервера MinIO&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы управлять сервером используя &lt;strong&gt;MinIO Client&lt;/strong&gt; нужно задать серверу &lt;em&gt;alias&lt;/em&gt; дабы не писать каждый раз адрес сервера и его логин и пароль. Если вы делаете это локально, т.е. на том же сервере где стоит сервер &lt;strong&gt;MinIO&lt;/strong&gt; можно в качестве ip-адреса использовать 127.0.0.1. Но тут в отличии от консоли необходимо указывать &lt;em&gt;API&lt;/em&gt; порт, который по умолчанию 9000.&lt;/p&gt;

&lt;p&gt;Опять-таки вы можете создать &lt;em&gt;alias&lt;/em&gt; для любой ноды в пуле ну или же на всех нодах локально, всё на ваше усмотрение.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc &lt;span class=&quot;nb&quot;&gt;alias set local &lt;/span&gt;http://127.0.0.1:9000 minioadmin minioadmin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Added&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`local`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc admin info &lt;span class=&quot;nb&quot;&gt;local&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Uptime:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-05-19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Uptime:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-05-19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Uptime:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-05-19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;mc admin info local&lt;/code&gt; выводит нам всю информацию о нодах &lt;strong&gt;MinIO&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 05 Aug 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-distribution-mode</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-distribution-mode</guid>
        
        <category>minio</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Мониторинг через PowerShell</title>
        <description>&lt;p&gt;Как такого готово модуля под &lt;em&gt;ELK&lt;/em&gt; либо &lt;em&gt;Splunk&lt;/em&gt; у &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt; нету и вроде не предвидится. А когда такое происходит приходится что-то придумывать самому, обычно на помощь приходят скрипты. И эта статья не исключение.&lt;/p&gt;

&lt;p&gt;Сразу оговорюсь что в этой статье я не буду использовать стандартный функционал &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt; с оповещениями по &lt;em&gt;email&lt;/em&gt; и т.д. Я считаю если есть система мониторинга, то нужно всё добавлять туда и смотреть всё в одном месте, хоть это иногда и сложно.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;veeambackuppowershell&quot;&gt;Veeam.Backup.PowerShell&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы работать с &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;нам понадобится модуль &lt;strong&gt;Veeam.Backup.PowerShell&lt;/strong&gt;, который ставится по умолчанию вместе с самим &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы начать работу открываем консоль &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;, далее в меню выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Console &amp;gt; Powershell&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2022-07-21_09-21.png&quot; alt=&quot;veeam powershell&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Чтобы точно удостоверится что мы всё сделали правильно и у нас всё готово для начала работы можно выполнить команду, которая найдёт нам модуль и выведет по нему информацию.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-Module -Name Veeam.Backup.PowerShell
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;oduleType&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ExportedCommands&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----------------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Manifest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Add-CTFile,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Add-HP3Snapshot,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Add-HP3Storage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также можно вывести список команд, которые мы можем использовать благодаря этому модуля используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-Help&lt;/code&gt; либо &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-VBRCommand&lt;/code&gt;. Обратите внимание так как мы используем для мониторинга, то соответственно мы будем использовать только команды &lt;code class=&quot;highlighter-rouge&quot;&gt;Get&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-Help Veeam.Backup.PowerShell
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Get-VBRHvServerVolume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;             &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Returns&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;volume-specific&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Microso&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-VBRInstalledLicense&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Returns&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;details&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;about&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;licenses&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;installed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-VBRInstanceLicenseSummary&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Returns&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;details&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;per-instance&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;license&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-VBRSecurityOptions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRCommand -Verb Get
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CommandType&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-HP&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;InfrastructureVolume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                        &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-HP&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Snapshot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                    &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-HP&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Storage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                     &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cmdlet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Get-HP&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Volume&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                      &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam.Backup.PowerShell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;документация&quot;&gt;Документация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы всегда можете найти документацию по той или иной команде на &lt;a href=&quot;https://helpcenter.veeam.com/docs/backup/powershell/connect-vbrserver.html?ver=110&quot;&gt;сайте&lt;/a&gt;, либо же выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-Help&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-Help Connect-VBRServer
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;SYNOPSIS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Connects&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Veeam&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;


&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SYNTAX&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Connect-VBRServer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-Server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;String&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-Port&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;Int&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-Timeout&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;Int&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;CommonParameters&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создание-пользователя&quot;&gt;Создание пользователя&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно правильным тоном в мониторинге считается что вы всегда создаёте отдельного пользователя с ограниченными правами, если это возможно конечно. Вот в случае с &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt; так как раз и не получится потому что чтобы использовать модуль &lt;strong&gt;Veeam.Backup.PowerShell&lt;/strong&gt; вам необходимо быть в группе &lt;strong&gt;Veeam Backup Administrator&lt;/strong&gt;, жаль конечно.&lt;/p&gt;

&lt;p&gt;Для начала нужно создать этого самого пользователя в самой ОС &lt;em&gt;Windows&lt;/em&gt;, как это делать я опущу так как считаю, что с этим должен справится даже самый юный сисадмин.&lt;/p&gt;

&lt;p&gt;После того как пользователь был добавлен надо добавить его в группу &lt;strong&gt;Veeam Backup Administrator&lt;/strong&gt; в самой консоли &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;. Для этого в левом верхнем меню выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Users and Roles&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2022-07-21_09-57.png&quot; alt=&quot;Veeam Backup Reader &quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;проверка-подключения&quot;&gt;Проверка подключения&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь, когда у нас есть пользователь остаётся проверить подключение к &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;. Для этого используем команду &lt;code class=&quot;highlighter-rouge&quot;&gt;Connect-VBRServer&lt;/code&gt;, если получаете ошибку о уже существующей сессии выполните &lt;code class=&quot;highlighter-rouge&quot;&gt;Disconnect-VBRServer&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Disconnect-VBRServer
Connect-VBRServer -Server 127.0.0.1 -U VeeamReader
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если сделали всё правильно, то должны получить пустой ответ, главное без ошибок. Ну а для того чтобы проверить что всё работает можно еще выполнить любую команду и получить от неё ответ.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRLocalhost
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Description&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IsUnavailable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ApiVersion&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Unknown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;проверка-лицензии&quot;&gt;Проверка лицензии&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно никто не хочет проморгать момент, когда у вас закончится лицензия, тем более иногда нужно узнать об этом заранее чтобы заложить бюджет (привет госаппарату).&lt;/p&gt;

&lt;p&gt;Для проверки лицензии используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-VBRInstalledLicense&lt;/code&gt;, или вот вам &lt;a href=&quot;https://github.com/tipoitkz/veeam/blob/main/powershell/getLicenseInfo.ps1&quot;&gt;готовый скрипт&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRInstalledLicense
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;SupportExpirationDate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2023&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AutoUpdateEnabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;FreeAgentInstanceConsumptionEnabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CloudConnect&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Disabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;проверка-бэкапов&quot;&gt;Проверка бэкапов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно вам необходимо также мониторить и сами бэкапы, а точнее их состояние, когда выполнялись и т.д. Для этого используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-VBRBackup&lt;/code&gt;, или вот вам &lt;a href=&quot;https://github.com/tipoitkz/veeam/blob/main/powershell/GetVeeamBackups.ps1&quot;&gt;готовый скрипт&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRBackup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Job&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VMware&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;проверка-подключенных-хостов&quot;&gt;Проверка подключенных хостов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;вы можете бэкапить как виртуальные так и физические сервера, но для начала вам нужно добавить эти в сервера в сам &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;. И вот чтобы мониторить какие именно вы добавили сервера используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-VBRServer&lt;/code&gt;, или вот вам &lt;a href=&quot;https://github.com/tipoitkz/veeam/blob/main/powershell/GetVeeamConnectedHosts.ps1&quot;&gt;готовый скрипт&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRServer
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Info&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(VMware&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ESXi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reference&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IsUnavailable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ESXi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Info&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(Microsoft&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Windows&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IsUnavailable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;               &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Windows&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Тут, например, можно сделать &lt;em&gt;alert&lt;/em&gt; в системе мониторинга если один из серверов со статусом &lt;code class=&quot;highlighter-rouge&quot;&gt;IsUnavailable = True&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;список-job&quot;&gt;Список Job&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы получить список всех задач в &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt; используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-VBRJob&lt;/code&gt;, или вот вам &lt;a href=&quot;https://github.com/tipoitkz/veeam/blob/main/powershell/GetVeeamJobs.ps1&quot;&gt;готовый скрипт&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRJob
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Job&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;State&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Result&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Description&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;--------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Job&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VMware&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stopped&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Created&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;asd\Administrator&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;57&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PM.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Job&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;VMware&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stopped&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Created&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;by&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;asd\Administrator&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;информация-о-сервере&quot;&gt;Информация о сервере&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и уже знакомая нам команда &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-VBRLocalhost&lt;/code&gt;, или вот вам &lt;a href=&quot;https://github.com/tipoitkz/veeam/blob/main/powershell/getVeeamServerInfo.ps1&quot;&gt;готовый скрипт&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-VBRLocalhost

&lt;span class=&quot;sb&quot;&gt;```&lt;/span&gt;json
Description        : Backup server
IsUnavailable      : False
Type               : Local
ApiVersion         : Unknown
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я лишь показал каким образом вы можете получить данные для мониторинга, а то как уже доставить эти данные в систему мониторинга уже придётся решать вам самим, так как у каждого своя система мониторинга.&lt;/p&gt;

&lt;p&gt;Могу лишь описать схему как это у меня уже работает со &lt;code class=&quot;highlighter-rouge&quot;&gt;Splunk&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Я добавил все эти скрипты в приложение (&lt;em&gt;Splunk Deployment&lt;/em&gt;)&lt;/li&gt;
  &lt;li&gt;Добавил &lt;em&gt;input&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Создал &lt;em&gt;dashboard&lt;/em&gt; и &lt;em&gt;alerts&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если у вас агент не может запускаться от имени определённого пользователя, то вам в скриптах придётся еще добавлять подключение используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;Connect-VBRServer&lt;/code&gt;. Но так как &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt; ставится только на &lt;em&gt;Windows&lt;/em&gt; то значит агент скорее всего работает как сервис, а как запустить сервис от определённого пользователя в &lt;em&gt;Windows&lt;/em&gt; легко узнать с помощью &lt;em&gt;google&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Также вы можете запускать скрипты через &lt;em&gt;Execbeat&lt;/em&gt; и отправлять вывод в &lt;em&gt;Elasticsearch&lt;/em&gt;. Подробнее про &lt;em&gt;execbeat&lt;/em&gt; по &lt;a href=&quot;dasdasd&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ну и как мне кажется самый правильный вариант — это выводить содержимое скрипта в текстовый файл и уже с него отправлять данные в систему мониторинга. Что я вскоре планирую реализовать, а может быть уже реализовал.&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Jul 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-monitoring-with-powershell</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-monitoring-with-powershell</guid>
        
        <category>veeam</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>ELK - Запуск команд и отправка вывода в Elasticsearch (execbeat)</title>
        <description>&lt;p&gt;Если вы тут оказались, то значит вы также, как и я захотели отправлять вывод своих скриптов в &lt;strong&gt;Elasticsearch&lt;/strong&gt;. По умолчанию в стеке &lt;strong&gt;ELK&lt;/strong&gt; запускать скрипты можно только используя &lt;a href=&quot;https://www.elastic.co/guide/en/logstash/current/plugins-inputs-exec.html&quot;&gt;Logstash&lt;/a&gt;. Но конечно ставить на все хосты &lt;strong&gt;Logstash&lt;/strong&gt; как-то не хочется, и тут вопрос не в том, что просто не хочется, а в том насколько это целесообразно.&lt;/p&gt;

&lt;p&gt;Так вот к сути, есть неофициальные агенты для &lt;strong&gt;ELK&lt;/strong&gt;, которые конечно же написаны энтузиастами, и никто вам не гарантирует что они будут работать идеально. Но что уже хорошо, так это то, что список этих агентов есть на &lt;a href=&quot;https://www.elastic.co/guide/en/beats/libbeat/master/community-beats.html&quot;&gt;офсайте&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;execbeat&quot;&gt;Execbeat&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;И для нашей темы интересен агент &lt;a href=&quot;https://github.com/christiangalsterer/execbeat&quot;&gt;Execbeat&lt;/a&gt;, так как благодаря ему мы можем запускать команды (скрипты) на &lt;em&gt;Windows&lt;/em&gt; или &lt;em&gt;Linux&lt;/em&gt;. Можно заметить, что по сути проект уже давно не обновлялся, поэтому использовать его или нет хороший вопрос, на который вы должны найти ответ сами.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Переходим по &lt;a href=&quot;https://github.com/christiangalsterer/execbeat/releases&quot;&gt;ссылке&lt;/a&gt;  с релизами, где выбираем последний и скачиваем нужный нам файл.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;windows&quot;&gt;Windows&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Скачиваем &lt;a href=&quot;https://github.com/christiangalsterer/execbeat/releases/download/3.3.0/execbeat-3.3.0-windows-x86_64.zip&quot;&gt;архив&lt;/a&gt; и распаковываем в нужную нам директорию.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;linux&quot;&gt;Linux&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://github.com/christiangalsterer/execbeat/releases/download/3.3.0/execbeat-3.3.0-i686.rpm
sudo yum -y install execbeat-3.3.0-i686.rpm
ls /etc/execbeat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;настройка&quot;&gt;Настройка&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Дальнейшие шаги будут идентичны для обоих типов ОС, поэтому не буду расписывать отдельно для каждой.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Для начала стоит заменить содержимое файла &lt;code class=&quot;highlighter-rouge&quot;&gt;execbeat.template.json&lt;/code&gt; на содержимое этого &lt;a href=&quot;https://github.com/tipoitkz/execbeat/blob/main/execbeat.template.json&quot;&gt;файла&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Далее создаём шаблон индекса для &lt;strong&gt;execbeat&lt;/strong&gt;, сам файл &lt;a href=&quot;https://github.com/tipoitkz/execbeat/blob/main/index.template.json&quot;&gt;тут&lt;/a&gt;.
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_index_template/execbeat-main&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;priority&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;98&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;template&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_routing&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;required&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;numeric_detection&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_meta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;beat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;execbeat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5.6.2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;excludes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dynamic&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dynamic_templates&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;strings_as_keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mapping&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match_mapping_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date_detection&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;meta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cloud&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;machine_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;availability_zone&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;instance_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;project_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;provider&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;region&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;beat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;hostname&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eager_global_ordinals&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_phrases&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fielddata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;norms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;store&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;positions&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eager_global_ordinals&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_phrases&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fielddata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;norms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;store&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;positions&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eager_global_ordinals&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_phrases&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fielddata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;norms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;store&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;positions&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;exec&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stdout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eager_global_ordinals&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_phrases&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fielddata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;norms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;store&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;positions&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;exitCode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;coerce&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_malformed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;store&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;doc_values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stderr&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eager_global_ordinals&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_phrases&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fielddata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;norms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;store&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;positions&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_patterns&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;execbeat-*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;composed_of&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём скрипт в той же директории &lt;code class=&quot;highlighter-rouge&quot;&gt;getLicenseInfo.bat&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;powershell.exe&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.\getLicenseInfo.ps&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем этот скрипт в планировщик, редактируя файл &lt;code class=&quot;highlighter-rouge&quot;&gt;execbeat.yml&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;execbeat:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;commands:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;schedule:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;@every 5m&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.\getLicenseInfo.bat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;schedule:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;@every 5m&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;command:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.\GetVeeamBackups.bat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;5.Прописываем куда отправлять вывод, всё в том же файле&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;output.elasticsearch:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elknode2:9000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elknode1:9000&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Optional&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;basic&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auth&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;credentials.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loadbalance:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;protocol:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;execbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5YQ2cN&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;запуск&quot;&gt;Запуск&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь осталось только запустить сам &lt;strong&gt;Execbeat&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo execbeat.sh -e
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\e&lt;/span&gt;xecbeat.exe -c .&lt;span class=&quot;se&quot;&gt;\e&lt;/span&gt;xecbeat.yml -e -d &lt;span class=&quot;s2&quot;&gt;&quot;*&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;итог&quot;&gt;Итог&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На данный момент автор еще не добавил поддержку &lt;strong&gt;Elasticsearch&lt;/strong&gt; версии 7.x, что собственно наталкивает на мысли о необходимости его использования. Вполне возможно, что лучше будет выводить ответы в текстовый файл и уже его отправлять в &lt;strong&gt;Elasticsearch&lt;/strong&gt; с помощью &lt;a href=&quot;https://www.tipoit.kz/tag/filebeat/&quot;&gt;Filebeat&lt;/a&gt;. По крайней мере тут точно будет работать с &lt;strong&gt;Logstash&lt;/strong&gt;, у меня данные через &lt;strong&gt;Logstash&lt;/strong&gt; не приходили с &lt;strong&gt;Execbeat&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Jul 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-execbeat</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-execbeat</guid>
        
        <category>elk</category>
        
        <category>execbeat</category>
        
        
      </item>
    
      <item>
        <title>Как поставить Корневой сертификат Единого шлюза доступа к Интернету</title>
        <description>&lt;p&gt;Поступил вопрос от пользователя &lt;strong&gt;как поставить сертификат ЕШДИ c расширением .cer в доверенные корневые сертификаты&lt;/strong&gt;? Если кто не знает, то это супер сертификат (&lt;em&gt;Корневой сертификат Единого шлюза доступа к Интернету&lt;/em&gt;), который стоит посередине между вами и интернетом в сети государственных органов Казахстана. Писать о том плохо это или хорошо не буду, я думаю понятно почему.&lt;/p&gt;

&lt;p&gt;Так вот мне казалось, что ответ будет довольно простым и в стиле вот ссылочка на оф сайт, где собственно всё расписано. А не тут-то было, ссылка, то есть, только вот инструкция только для &lt;em&gt;Windows&lt;/em&gt;. Ох как же это знакомо, мы что-то сделаем, а вся последующая головная боль это уже проблемы пользователя.&lt;/p&gt;

&lt;p&gt;Ну и раз не смогли это сделать специалисты ГТС то распишу я, может кому-то пригодится.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;windows&quot;&gt;Windows&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно, вот сама &lt;a href=&quot;https://sts.kz/wp-content/uploads/2021/05/certficate_installation_guide.pdf&quot;&gt;инструкция&lt;/a&gt; от них.&lt;/p&gt;

&lt;p&gt;Но если вам вдруг не подошла их инструкция то вот моя.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;обычный-метод&quot;&gt;Обычный метод&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Скачиваем сертификат с сайта https://sts.kz/eshdi/&lt;/li&gt;
  &lt;li&gt;Открываем сертификат и нажимаем установить
&lt;img src=&quot;static/img/all/2022-07-11_22-36.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем расположение (если нужно для сервисов, то лучше ставить на компьютер)&lt;/li&gt;
  &lt;li&gt;Нажимаем несколько раз далее и готово&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;скрипт&quot;&gt;Скрипт&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я тут написал &lt;a href=&quot;https://github.com/tipoitkz/qaznet/tree/main/certificate&quot;&gt;скрипт&lt;/a&gt;, который поставит либо удалит сертификат за вас. Итак, что он умеет:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Скачивает сертификат с сайта (url может меняться, проверьте правильность на самом сайте &lt;a href=&quot;https://sts.kz&quot;&gt;sts.kz&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;В зависимости от того что вы выбрали ставит либо удаляет сертификат&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;При запуске скрипта через Powershell будет запрос, где каждая цифра означает:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Ставит сертификат только для текущего пользователя&lt;/li&gt;
  &lt;li&gt;Удаляет сертификат у текущего пользователя&lt;/li&gt;
  &lt;li&gt;Ставит сертификат только для компьютера и стало быть для всех пользователей, программ, сервисов и т.д.&lt;/li&gt;
  &lt;li&gt;Удаляет сертификат с компьютера&lt;/li&gt;
  &lt;li&gt;Удаляет сертификат с компьютера и у пользователя&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;На мой взгляд это отличное решение особенно если вам нужно поставить этот сертификат на время, а после быстро его удалить. Если скрипт реально пригодился не забудьте активировать звёздочку на github.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;rhel&quot;&gt;RHEL&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот тут уже я как раз и не нашел инструкции, и это печаль. Не понимаю, что такого сложного было в том, чтобы написать инструкцию и для Linux.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;обычный-метод-1&quot;&gt;Обычный метод&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Скачиваем сертификат
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum -y install wget
sudo wget https://sts.kz/wp-content/uploads/2021/05/Unified_State_Internet_Access_Gateway.cer -O /etc/pki/ca-trust/source/anchors/Unified_State_Internet_Access_Gateway.crt
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Обновляем список доверенных корневых сертификатов
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo update-ca-trust
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если хочется удостоверится что сертификат стоит, то можно выполнить команду
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;trust list | grep &lt;span class=&quot;s2&quot;&gt;&quot;Unified State Internet Access Gateway&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;label:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Unified&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;State&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Internet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gateway&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;скрипт-1&quot;&gt;Скрипт&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также написал &lt;a href=&quot;https://github.com/tipoitkz/qaznet/tree/main/certificate&quot;&gt;скрипт&lt;/a&gt;, который я проверял на CentOS и Ubuntu. Суть та же, либо добавляет, либо удаляет сертификат. Как им пользоваться написано в описании проекта на github.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ubuntu&quot;&gt;Ubuntu&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;обычный-метод-2&quot;&gt;Обычный метод&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Скачиваем сертификат
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt -y install wget
sudo wget --output-document /usr/local/share/ca-certificates/Unified_State_Internet_Access_Gateway.crt https://sts.kz/wp-content/uploads/2021/05/Unified_State_Internet_Access_Gateway.cer
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Обновляем список доверенных корневых сертификатов
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo update-ca-certificates
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если хочется удостоверится что сертификат стоит, то можно выполнить команду
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;trust list | grep &lt;span class=&quot;s2&quot;&gt;&quot;Unified State Internet Access Gateway&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;label:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Unified&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;State&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Internet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Access&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gateway&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;скрипт-2&quot;&gt;Скрипт&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также написал &lt;a href=&quot;https://github.com/tipoitkz/qaznet/tree/main/certificate&quot;&gt;скрипт&lt;/a&gt;, который я проверял на CentOS и Ubuntu. Суть та же, либо добавляет, либо удаляет сертификат. Как им пользоваться написано в описании проекта на github.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;замечание&quot;&gt;Замечание&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Многие сервисы не работают с сертификатами установленными в системе и для таких сервисов придётся искать мануалы как и куда добавлять сертификат. Работает данный метод или нет можно просто выполнив команду curl на сайт, на котором подменяется сертификат.&lt;/p&gt;
</description>
        <pubDate>Tue, 12 Jul 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/UGIA-certificate</link>
        <guid isPermaLink="true">http://www.tipoit.kz/UGIA-certificate</guid>
        
        <category>unix</category>
        
        <category>linux</category>
        
        <category>windows</category>
        
        
      </item>
    
      <item>
        <title>Linux - Установка шрифтов Microsoft (Times New Roman)</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/R4escVlg2e4&quot; title=&quot;Linux - Установка шрифтов Microsoft (Times New Roman)&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;В зависимости от условий иногда бывает необходимым наличие шрифтов, которые есть в &lt;em&gt;Microsoft&lt;/em&gt;, например, &lt;em&gt;Times New Roman&lt;/em&gt;. Причин для этого может быть куча, в моём случае все оригинальные документы должны быть с этим шрифтом и создаёт их приложение.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-times-new-roman-в-ubuntu&quot;&gt;Установка Times New Roman в Ubuntu&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В &lt;em&gt;Debian&lt;/em&gt; системах на самом деле всё просто, уже имеется пакет, который достаточно просто поставить.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install msttcorefonts
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;установка-times-new-roman-в-rhel-centos&quot;&gt;Установка Times New Roman в RHEL (CentOS)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это был именно мой случай и как вы понимаете если бы всё было так просто, то статью по этому поводу я и не писал бы.&lt;/p&gt;

&lt;p&gt;Для начала нам придётся собрать rpm пакет, не переживайте сильно всё довольно просто. Я обычно делаю такие дела на отдельной виртуалке, разумеется также ОС что и на серверах.&lt;/p&gt;

&lt;p&gt;Ставим необходимые пакеты:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum -y install rpm-build ttmkfdir cabextract
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Далее нам надо скачать &lt;a href=&quot;http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec&quot;&gt;spec файл&lt;/a&gt;, который и сделает за нас всю магию. Последнюю версию этого файла вы всегда можете найти по &lt;a href=&quot;http://corefonts.sourceforge.net/&quot;&gt;ссылке&lt;/a&gt;. Если вы вдруг не доверяете таким сайтам, то сперва прочтите что собственно делает этот файл и уже потом решайте для себя использовать это решение или нет.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec
sudo rpmbuild -bb msttcorefonts-2.5-1.spec
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Во время выполнения можете получить ошибку о том, что недоступен файловый обменик. Не беда, просто выполните команду несколько раз и найдётся новый источник.&lt;/p&gt;

&lt;p&gt;Если вы всё сделали правильно, то в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;$HOME/rpmbuild/RPMS/noarch/&lt;/code&gt; вы найдёте &lt;strong&gt;rpm пакет&lt;/strong&gt;. Собственно, осталось лишь поставить его там, где это необходимо.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install /root/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Может еще потребуется перезапустить сервис &lt;em&gt;xfs&lt;/em&gt;, но у меня и так сработало.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;fc&lt;/span&gt;-list | grep Time
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/fonts/msttcorefonts/timesi.ttf:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Times&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;New&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Roman:style=Italic,cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/fonts/msttcorefonts/times.ttf:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Times&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;New&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Roman:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/fonts/msttcorefonts/timesbd.ttf:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Times&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;New&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Roman:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiona,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/fonts/msttcorefonts/timesbi.ttf:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Times&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;New&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Roman:style=Bold&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Italic,Negreta&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cursiva,tučné&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kurzíva,fed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kursiv,Fett&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kursiv,Έντονα&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Πλάγια,Negrita&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cursiva,Lihavoitu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kursivoi,Gras&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Italique,Félkövér&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dőlt,Grassetto&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Corsivo,Vet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cursief,Halvfet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kursiv,Pogrubiona&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kursywa,Negrito&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Itálico,Полужирный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Курсив,Tučná&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kurzíva,Fet&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Kursiv,Kalın&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;İtalik,Krepko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;poševno,nghiêng&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;đậm,Lodi&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;etzana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 04 Jul 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-install-times-new-roman</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-install-times-new-roman</guid>
        
        <category>unix</category>
        
        <category>linux</category>
        
        <category>fonts</category>
        
        
      </item>
    
      <item>
        <title>Небольшой обзор AWS</title>
        <description>&lt;p&gt;&lt;strong&gt;AWS (Amazon Web Services)&lt;/strong&gt; - это, наверное, на данный момент самая распространенная облачная система, которая располагает большим функционалом. Содержит более 200 сервисов, понятное дело, что все их рассматривать я не буду.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ес2--elastic-compute-cloud&quot;&gt;ЕС2 — Elastic Compute Cloud&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это, наверное, самый основной интерфейс для управления виртуальными серверами, которые в &lt;strong&gt;Amazon&lt;/strong&gt; называются &lt;strong&gt;Amazon EC2 Instance&lt;/strong&gt;. Также позволяет создавать свои образы, при этом имеет кучу образов по умолчанию. Присутствует возможность создания резервных копий.&lt;/p&gt;

&lt;p&gt;Благодаря &lt;em&gt;Security Groups&lt;/em&gt; вы можете ограничить список ip адресов с которых можно получить доступ к управлению.&lt;/p&gt;

&lt;p&gt;Также вы можете тут создавать балансировщики нагрузки, которые распространяют нагрузку между &lt;strong&gt;EC2 Instance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Вы можете производить почасовую оплату, т.е. вы платите только тогда, когда ваши сервера активны.&lt;/p&gt;

&lt;p&gt;Благодаря &lt;em&gt;Availability Zone (AZ)&lt;/em&gt; вы можете сами решать в каком регионе и какой страны размещать ваши виртуальные сервера (&lt;strong&gt;EC2 Instance&lt;/strong&gt;). В зависимости от страны может меняться &lt;em&gt;ping&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;s3--amazon-simple-storage&quot;&gt;S3 — Amazon Simple Storage&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сервис для хранения данных, этакий &lt;strong&gt;web storage&lt;/strong&gt;. На данный момент уже есть куча бесплатных версий &lt;strong&gt;S3 хранилищ&lt;/strong&gt;, один из основных &lt;a href=&quot;https://tipoit.kz/tag/minio/&quot;&gt;minio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Оплачивается &lt;em&gt;S3&lt;/em&gt; за объем данных, исходящий трафик и по количеству запросов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;rds--amazon-relational-database-service&quot;&gt;RDS — Amazon Relational Database Service&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут в принципе всё понятно из названия, это сервис, оптимизированный именно под базы данных. Тут есть резервное копирование, быстрое восстановление и репликация баз данных между серверами.&lt;/p&gt;

&lt;p&gt;Преимущество на вскидку по сравнению с физическими серверами, что тут вам будет проще обновлять тот же &lt;em&gt;MS SQL Server&lt;/em&gt; (не надо просить бюджет на лицензии).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;route-53&quot;&gt;Route 53&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это сервис для создания своего собственно домена, и управления записями в этом домене. Вы можете поднять &lt;strong&gt;dns сервера&lt;/strong&gt; только для внутреннего использования в &lt;strong&gt;ЕС2&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;cloudwatch&quot;&gt;CloudWatch&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут вы можете мониторить состояние ваших сервисами. вы можете получить информацию о доступности, нагрузке, и еще о многих вещах. Также можно и настроить систему оповещений по событиям.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;iam--identity-and-access-management&quot;&gt;IAM — Identity and Access Management&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сервис для разграничения доступа ко всем сервисам &lt;strong&gt;AWS&lt;/strong&gt;. Т.е. определённым сотрудникам вы можете дать доступ только на чтение, а другим полные права на управление.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рассмотрим плюсы и минусы &lt;strong&gt;AWS&lt;/strong&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Плюсы&lt;/th&gt;
      &lt;th&gt;Минусы&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Большая функциональность, под каждую задачу есть свой сервис.&lt;/td&gt;
      &lt;td&gt;Нет ЦОД на территории РФ и КЗ.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Есть бесплатные тарифы для многих сервисов.&lt;/td&gt;
      &lt;td&gt;Платить нужно буквально за всё подряд.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Отличная и подробная документация, большое количество курсов.&lt;/td&gt;
      &lt;td&gt;Высокая сложность в использовании.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Очень популярна, большое количество интеграций.&lt;/td&gt;
      &lt;td&gt;Перегруженный интерфейс.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Высокая надежность.&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;В итоге можно сказать что самый главный минус в том, что он дорогой, и не все организации могут себе позволить размещать свои сервера в другой стране.&lt;/p&gt;
</description>
        <pubDate>Mon, 04 Jul 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/aws</link>
        <guid isPermaLink="true">http://www.tipoit.kz/aws</guid>
        
        <category>aws</category>
        
        <category>devops</category>
        
        <category>cloud</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - Обновление версии 6.7 до 7</title>
        <description>&lt;p&gt;Для начала скачивает официальный дистрибутив с &lt;a href=&quot;https://customerconnect.vmware.com/downloads/&quot;&gt;сайта&lt;/a&gt;. После скачивания монтируем полученный &lt;code class=&quot;highlighter-rouge&quot;&gt;iso&lt;/code&gt; на свой компьютер (важно чтобы у вас был сетевой доступ к хосту).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;обновление-vcenter-server-appliance&quot;&gt;Обновление Vcenter Server Appliance&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Запускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;installer.exe&lt;/code&gt;, который находится по пути &lt;code class=&quot;highlighter-rouge&quot;&gt;vcsa-ui-installer\win32&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;В появившемся окне выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Upgrade&lt;/code&gt;
&lt;img src=&quot;/static/img/vcenter/2022-06-23_10-19.png&quot; alt=&quot;Vcenter  Installer&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Соглашаемся со всеми условиями и жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;NEXT&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Тут указываем доступ к &lt;strong&gt;Vcenter&lt;/strong&gt;, который мы хотим обновить (ip-адрес или доменное имя) и нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Connect&lt;/code&gt;
&lt;img src=&quot;/static/img/vcenter/2022-06-23_10-23.png&quot; alt=&quot;Vcenter  Installer IP&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Дальше заполняем поля для подключения к существующему &lt;strong&gt;Vcenter&lt;/strong&gt; и к &lt;strong&gt;ESXI&lt;/strong&gt;, на котором он запущен
&lt;img src=&quot;/static/img/vcenter/2022-06-23_10-30.png&quot; alt=&quot;Vcenter  Installer Connect&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Если всё указали правильно и подключение удалось, то дальше задаём доступ к &lt;strong&gt;ESXI&lt;/strong&gt; хосту на котором будет новый &lt;strong&gt;Vcenter&lt;/strong&gt;
&lt;img src=&quot;/static/img/vcenter/2022-06-23_10-36.png&quot; alt=&quot;Vcenter  Installer ESXI  Connect&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем конфигурацию для нового &lt;strong&gt;Vcenter&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;datastore&lt;/code&gt;, на котором будут хранится файлы&lt;/li&gt;
  &lt;li&gt;Задаём временный ip-адрес, после обновления мы будем использовать прежний ip-адрес и доменное имя
&lt;img src=&quot;/static/img/vcenter/2022-06-23_10-42.png&quot; alt=&quot;Vcenter  Installer ESXI  Connect&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;В последнем окне проверяем всю конфигурацию и жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;FINISH&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;После завершения первого этапа переходим ко второму нажав &lt;code class=&quot;highlighter-rouge&quot;&gt;CONTINUE&lt;/code&gt;
&lt;img src=&quot;/static/img/vcenter/2022-06-23_11-06.png&quot; alt=&quot;Vcenter  Installer Stage 2&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Дважды нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;NEXT&lt;/code&gt;, после чего попадаем на вкладку с проверкой перед самим обновлением
&lt;img src=&quot;/static/img/vcenter/2022-06-23_11-09.png&quot; alt=&quot;Vcenter  Installer Upgrade Check&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Обязательно читаем все предупреждения если они есть и уже в зависимости от их серьёзности принимаем решение о обновлении&lt;/li&gt;
  &lt;li&gt;Выбираем какие данные мы хотим перенести на новый &lt;strong&gt;Vcenter&lt;/strong&gt; 
&lt;img src=&quot;/static/img/vcenter/2022-06-23_11-14.png&quot; alt=&quot;Vcenter Installer What Copy&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Проверяем все настройки и жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;FINISH&lt;/code&gt;. Важно замечание на время обновления ваш старый &lt;strong&gt;Vcenter&lt;/strong&gt; будет не доступен&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Может также случиться так что мастер установки скажет, что всё выполнено, но вы не сможете зайти на &lt;strong&gt;Vcenter&lt;/strong&gt; по старому имени. Решением может оказаться зайти на новый ip-адрес &lt;strong&gt;Vcenter&lt;/strong&gt; по порту 5480 и увидеть, что всё-таки обновление еще продолжается (https://new_ip_here:5480).&lt;/p&gt;
</description>
        <pubDate>Mon, 27 Jun 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/upgrade-vcenter</link>
        <guid isPermaLink="true">http://www.tipoit.kz/upgrade-vcenter</guid>
        
        <category>vcenter</category>
        
        <category>virtualization</category>
        
        
      </item>
    
      <item>
        <title>Standalone MinIO на Linux</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/ECmPYHxRVKM&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Рассмотрим установку &lt;strong&gt;MinIO&lt;/strong&gt; на сервере в режиме &lt;strong&gt;Standalone&lt;/strong&gt;. Важное замечание что в &lt;code class=&quot;highlighter-rouge&quot;&gt;production средах рекомендуется устанавливать MinIO в режиме Distributed Mode&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;требования&quot;&gt;Требования&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы продолжить установку убедитесь в следующем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Ваш пользователь от которого вы будете запускать &lt;strong&gt;MinIO&lt;/strong&gt; должен иметь полные права на каталог, в который будет сохранять файлы &lt;strong&gt;MinIO&lt;/strong&gt; (~/minio)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chown minio ~/minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;У вас должны быть права для создания файлов в директории &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/local/bin&lt;/code&gt;. Туда помещается исполняемые файлы &lt;strong&gt;MinIO&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;64-разрядная ОС&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;приступаем&quot;&gt;Приступаем&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;1-установка-сервера-minio&quot;&gt;1. Установка сервера MinIO&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для установки сервера &lt;strong&gt;MinIO&lt;/strong&gt; можно воспользоваться 3 методами:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Установка с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;RPM (RHEL)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio-20220523184511.0.0.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Установка с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;DEB(UBUNTU)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio_20220519182059.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Скачать бинарный файл&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget  https://dl.min.io/server/minio/release/linux-amd64/minio
sudo mv minio /usr/local/bin/
sudo chmod +x /usr/local/bin/minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;2-запуск-сервера-minio&quot;&gt;2. Запуск сервера MinIO&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как уже упоминалось выше в качестве &lt;strong&gt;data директории&lt;/strong&gt; будем использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;~/minio&lt;/code&gt;, вы же всегда можете использовать другую директорию.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir ~/minio
minio server ~/minio --console-address :9090
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге должны получить информацию о том, как подключиться к нашему серверу &lt;em&gt;MinIO&lt;/em&gt; (ip-адрес, порт, логин, пароль).&lt;/p&gt;

&lt;p&gt;Используя &lt;code class=&quot;highlighter-rouge&quot;&gt;--console-address :9090&lt;/code&gt; мы говорим, что &lt;strong&gt;console&lt;/strong&gt; будет слушать порт &lt;code class=&quot;highlighter-rouge&quot;&gt;9090&lt;/code&gt;. &lt;strong&gt;Сonsole&lt;/strong&gt; - это по сути своей &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; интерфейс.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;3-настроим-файрволл&quot;&gt;3. Настроим файрволл&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы подключаться к консоли с другого устройства необходимо на файрволле добавить разрешающее правило.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;9090/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;4-подключаемся-к-консоли&quot;&gt;4. Подключаемся к консоли&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как мы получили информацию о том по какому ip-адресу и порту мы можем получить доступ к консоли просто вбиваем эту информацию в адресной строке вашего любимого браузера.&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;В итоге получаем такую картину, где вбиваем логин и пароль (по умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;minioadmin&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;minioadmin&lt;/code&gt;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/2022-05-21_01-25.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Используя консоль вы можете создавать пользователей, права доступа, бакеты и т.д. Правда не всё можно сделать через консоль, поэтому необходимо также и установить &lt;strong&gt;MinIO  Client&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;5-установка-minio--client&quot;&gt;5. Установка MinIO  Client&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя &lt;strong&gt;MinIO  Client&lt;/strong&gt;, вы получаете возможность управления сервером &lt;strong&gt;MinIO&lt;/strong&gt; в командной строке.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/client/mc/release/linux-amd64/mc
sudo mv mc /usr/local/bin/mc
sudo chmod +x /usr/local/bin/mc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;6-создаём-alias-для-сервера-minio&quot;&gt;6. Создаём alias для сервера MinIO&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы управлять сервером используя &lt;strong&gt;MinIO  Client&lt;/strong&gt; нужно задать серверу &lt;code class=&quot;highlighter-rouge&quot;&gt;alias&lt;/code&gt; дабы не писать каждый раз адрес сервера и его логин и пароль. Если вы делаете это локально, т.е. на том же сервере где стоит сервер &lt;strong&gt;MinIO&lt;/strong&gt; можно в качестве ip-адреса использовать 127.0.0.1. Но тут в отличии от консоли необходимо указывать &lt;code class=&quot;highlighter-rouge&quot;&gt;API порт&lt;/code&gt;, который по умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;9000&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc &lt;span class=&quot;nb&quot;&gt;alias set local &lt;/span&gt;http://127.0.0.1:9000 minioadmin minioadmin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Added&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`local`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;successfully.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc admin info &lt;span class=&quot;nb&quot;&gt;local&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;●&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;127.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Uptime:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;minutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Version:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2022-05-19&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда &lt;code class=&quot;highlighter-rouge&quot;&gt;mc admin info local&lt;/code&gt; выводит нам всю информацию о нодах &lt;strong&gt;MinIO&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 24 Jun 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/standalone-minio</link>
        <guid isPermaLink="true">http://www.tipoit.kz/standalone-minio</guid>
        
        <category>minio</category>
        
        <category>storage</category>
        
        
      </item>
    
      <item>
        <title>Logstash - Keystore</title>
        <description>&lt;p&gt;С помощью &lt;strong&gt;Keystore&lt;/strong&gt; мы можем безопасно использовать пароли в файлах конфигураций &lt;code class=&quot;highlighter-rouge&quot;&gt;ELK&lt;/code&gt;. Если просто, то мы создаём хранилище ключей, к которому будут иметь доступ только приложения &lt;code class=&quot;highlighter-rouge&quot;&gt;ELK&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для начала находим где именно лежит бинарный файл &lt;strong&gt;logstash-keystore&lt;/strong&gt;, именно его мы будем использовать для создания &lt;strong&gt;keystore&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo find / -name logstash-keystore
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/usr/share/logstash/bin/logstash-keystore&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;h2 id=&quot;создание-keystore&quot;&gt;Создание keystore&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для создания &lt;strong&gt;keystore&lt;/strong&gt; используем наш бинарный файл добавляя значение &lt;code class=&quot;highlighter-rouge&quot;&gt;create&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/share/logstash/bin/
./logstash-keystore create
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Команда создания выведет сообщение что мы должны установить &lt;strong&gt;LOGSTASH_KEYSTORE_PASS&lt;/strong&gt;, сообщение выглядит так:  &lt;strong&gt;Please set the environment variable &lt;code class=&quot;highlighter-rouge&quot;&gt;LOGSTASH_KEYSTORE_PASS&lt;/code&gt;&lt;/strong&gt;.  Т.е. требуется, чтобы пользователь, запускающий Logstash, определил переменную среды &lt;code class=&quot;highlighter-rouge&quot;&gt;LOGSTASH_KEYSTORE_PASS&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Собственно, остаётся только так и cделать раз это настройка от самого &lt;code class=&quot;highlighter-rouge&quot;&gt;ELK&lt;/code&gt;. Добавляем &lt;code class=&quot;highlighter-rouge&quot;&gt;LOGSTASH_KEYSTORE_PASS&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;env&lt;/code&gt; и он в итоге окажется в файле &lt;strong&gt;/usr/share/logstash/config/logstash.keystore&lt;/strong&gt;. Удостоверьтесь что у пользователя есть права на запись в эту директорию.&lt;/p&gt;

&lt;p&gt;Если у вас &lt;strong&gt;logstash&lt;/strong&gt; запущен как сервис, то необходимо также добавить эту переменную в сам сервис, используя сам файл описания сервиса (&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/systemd/system/logstash.service&lt;/code&gt;) либо же добавить в файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/default/logstash&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавляем-переменную&quot;&gt;Добавляем переменную&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хоть немного знакомы с иб, то уже должны понимать, что записывать пароли в историю команд не стоит поэтому перед выполнением &lt;code class=&quot;highlighter-rouge&quot;&gt;export&lt;/code&gt; отключаем запись команд в &lt;code class=&quot;highlighter-rouge&quot;&gt;bash history&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;  +o &lt;span class=&quot;nb&quot;&gt;history
export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LOGSTASH_KEYSTORE_PASS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;mypassword
sudo &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;  -o &lt;span class=&quot;nb&quot;&gt;history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И снова запускаем &lt;strong&gt;logstash-keystore create&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/share/logstash/bin/logstash-keystore create --path.settings /etc/logstash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Created&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Logstash&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;keystore&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/logstash/logstash.keystore&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавление-ключей-в-keystore&quot;&gt;Добавление ключей в keystore&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;И осталось дело за малым а собственно осталось только добавить ключи в &lt;strong&gt;keystore&lt;/strong&gt;, используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;./logstash-keystore add&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./logstash-keystore add USR --path.settings /etc/logstash/
./logstash-keystore add PASS --path.settings /etc/logstash/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;просмотр-ключей-в-keystore&quot;&gt;Просмотр ключей в keystore&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы просмотреть что там лежит в нашем &lt;strong&gt;keystore&lt;/strong&gt; используем &lt;code class=&quot;highlighter-rouge&quot;&gt;./logstash-keystore list&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./logstash-keystore list --path.settings /etc/logstash/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;usr&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;удаление-ключей-из-keystore&quot;&gt;Удаление ключей из keystore&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./logstash-keystore remove USR --path.settings /etc/logstash/
./logstash-keystore remove PASS --path.settings /etc/logstash/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;использование-ключей&quot;&gt;Использование ключей&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Далее вы можете использовать эти ключи в любом месте любого файла конфигурации &lt;strong&gt;logstash&lt;/strong&gt;. Для примера я укажу пароль для &lt;code class=&quot;highlighter-rouge&quot;&gt;output&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;${usr}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;${pass}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 20 Jun 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/logstah-keystore</link>
        <guid isPermaLink="true">http://www.tipoit.kz/logstah-keystore</guid>
        
        <category>logstash</category>
        
        <category>security</category>
        
        <category>elk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Filebeat / Metricbeat - 169.254.169.254</title>
        <description>&lt;p&gt;В логах &lt;strong&gt;Filebeat&lt;/strong&gt; или же просто мониторя исходящий трафик на сервере вы можете обнаружить что ваш &lt;strong&gt;Filebeat&lt;/strong&gt; постоянно обращается к ip-адресу &lt;code class=&quot;highlighter-rouge&quot;&gt;169.254.169.254&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если вы не используете облака, а просто используете свою серверную инфраструктуру то смело можно пресекать эти попытки обращения. Суть в том, что при включенном процессоре &lt;strong&gt;add_cloud_metadata&lt;/strong&gt; агент пытается отправить метаданные о хостинг провайдере облака. Параметр &lt;strong&gt;add_cloud_metadata&lt;/strong&gt; включен по умолчанию.&lt;/p&gt;

&lt;p&gt;Вот пример тех данных что он пытается отправлять:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cloud&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;account.id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;123456789012&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;availability_zone&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;us-east-1c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;instance.id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;i-4e123456&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;machine.type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;t2.medium&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;image.id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ami-abcd1234&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;provider&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;aws&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;region&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;us-east-1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;отключение&quot;&gt;Отключение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы отключить это просто удаляем &lt;strong&gt;add_cloud_metadata&lt;/strong&gt; из &lt;strong&gt;processors&lt;/strong&gt; в файле конфигурации.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/filebeat/filebeat.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;processors:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add_host_metadata:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;when.not.contains.tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;forwarded&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add_docker_metadata:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add_kubernetes_metadata:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add_cloud_metadata:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;------&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DELETE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart filebeat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 21 May 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/filebeat-metricbeat-169.254.169.254</link>
        <guid isPermaLink="true">http://www.tipoit.kz/filebeat-metricbeat-169.254.169.254</guid>
        
        <category>filebeat</category>
        
        <category>metricbeat</category>
        
        <category>elk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Filebeat - Дублирование логов</title>
        <description>&lt;p&gt;Может так произойти что при использовании связки &lt;strong&gt;Filebeat + Elasticsearch&lt;/strong&gt; вы в итоге получите дублирование логов. А заметить это можно далеко не сразу, так как это происходит только после перезапуска &lt;strong&gt;Filebeat&lt;/strong&gt;. Т.е. для примера вы мониторите файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/messages&lt;/code&gt; и вроде бы всё нормально вам приходят события (документы) в &lt;strong&gt;Elasticsearch&lt;/strong&gt;, но вот вы решаете по какой-то причине перезапустить &lt;strong&gt;Filebeat&lt;/strong&gt; и в ужасе осознаёте, что все те события, которые были отправлены в &lt;strong&gt;Elasticsearch&lt;/strong&gt; ранее отправляются снова и в итоге вы получаете дублирование.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;файл-registry&quot;&gt;Файл registry&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы понимать какие события &lt;strong&gt;Filebeat&lt;/strong&gt; уже отправил в &lt;strong&gt;Elasticsearch&lt;/strong&gt; используется файл под названием &lt;strong&gt;registry&lt;/strong&gt;, в котором хранится информации о отправке событий. Т.е. если события с файла  &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/messages&lt;/code&gt; были успешно доставлены в &lt;strong&gt;Elasticsearch&lt;/strong&gt; в файл &lt;strong&gt;registry&lt;/strong&gt; помещается информация обозначающая это. Когда вы перезапускаете сервис &lt;strong&gt;Filebeat&lt;/strong&gt; он как раз обращается к этому файлу для того чтобы понять отправлялись ли события с файла ранее.&lt;/p&gt;

&lt;p&gt;Если вам вдруг нужно заново отправить все события из файла в &lt;strong&gt;Elasticsearch&lt;/strong&gt; в теории вы просто можете удалить &lt;strong&gt;registry&lt;/strong&gt; и перезапустить &lt;strong&gt;Filebeat&lt;/strong&gt;. Но на практике я это не проверял.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вариант-1-нет-прав-на-запись&quot;&gt;Вариант 1: Нет прав на запись&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно первым делом стоит обратиться к логам самого &lt;strong&gt;Filebeat&lt;/strong&gt; и если вы там найдёте запись вида &lt;code class=&quot;highlighter-rouge&quot;&gt;Writing of registry returned error: open /data/registry.new: permission denied.&lt;/code&gt; то значит нужно дать пользователю от которого запущен &lt;strong&gt;Filebeat&lt;/strong&gt; доступ к папке где лежит &lt;strong&gt;registry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Одним из возможных решений будет изменить владельца директории и файлов на пользователя, от которого запущен Filebeat.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chown -R filebeat path_to_registry
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart filebeat 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вариант-2-несколько-filestream-без-id&quot;&gt;Вариант 2: Несколько filestream без id&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;При таком случае в логах вы найдёте сообщение &lt;code class=&quot;highlighter-rouge&quot;&gt;filestream input ID without ID might lead to data duplication, please add an ID and restart Filebeat&lt;/code&gt;. И как понятно из самого сообщения если мы используем несколько &lt;strong&gt;filestream&lt;/strong&gt;, то необходимо каждому задать &lt;strong&gt;id&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/filebeat/filebeat.yml 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;filebeat.inputs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filestream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bash&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;paths:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/home/*/.bash_history&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;filestream&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;oom&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;paths:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/var/log/messages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart filebeat 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 21 May 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/filebeat-logs-dublicate</link>
        <guid isPermaLink="true">http://www.tipoit.kz/filebeat-logs-dublicate</guid>
        
        <category>filebeat</category>
        
        <category>elk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Backup - Почему восстановление дольше самого бэкапа</title>
        <description>&lt;p&gt;Если дошли до этой статьи, то вы наверняка уже ни раз задавались этим вопросом. Возможно вы уже сталкивались с таким и удивлялись что бэкап то я делаю гораздо быстрее чем его восстанавливаю, а может ц вас всё еще впереди. Но в любом случае для некоторых людей это становится реальным сюрпризом, когда они восстанавливают бэкап, особенно первый раз.&lt;/p&gt;

&lt;p&gt;Сразу скажу, что решение этой проблемы в данной статье не будет, тут я лишь распишу несколько причин по которым это может происходить. Ну а само решение этих причин возляжет уже на ваши плечи, да и некоторые возможно совсем не получится решить (бюджет всё-таки).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;запись-в-файловую-систему&quot;&gt;Запись в файловую систему&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Потенциальной проблемой может запись в файловую систему, особенно если там уже находятся миллионы файлов или нужно восстановить миллионы файлов. Происходит это потому что для начала перед самим восстановлением этих файлов их нужно создать. А эта операция создания также занимает немало времени и иногда бывает, что создание этих файлов занимает больше времени чем само их восстановление. Т.е. для примера быстрее создать пару файлов чем создавать миллионы.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;скорость-записи-в-raid&quot;&gt;Скорость записи в RAID&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сейчас многие используют RAID на своих системах, что конечно же хорошо так как терять свои данные никто не хочет. Но у каждого типа RAID есть свои показатели на скорость записи и чтения. Соответственно если вы используете RAID скорость записи которого ниже чем чтение, то проблема медленного восстановление может быть в этом.&lt;/p&gt;

&lt;p&gt;Для примера RAID 5, RAID 6 имеют самые маленькие показатели записи на диск по сравнению с другими, при том что RAID 0 самый большой. Да, многие могут возразить что в наше время уже никто не использует RAID 5, так как давно уже есть RAID 50 и т.д. но никто не отменял уже действующие системы хранения с RAID 5 и отсутствием бюджета для изменения этой ситуации.&lt;/p&gt;

&lt;p&gt;В интернете много статей на тему сравнения скорости RAID групп можете почитать про это.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;copy-on-write-snapshot&quot;&gt;Copy-on-write snapshot&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Следующей проблемой может служить использование технологии Copy-on-write snapshot. Называется это Copy-on-write потому что перед тем как записать что-то новое на диск все блоки копируются перед тем как пере-записаться. Зачастую такими методами пользуются владельцы NAS систем.&lt;/p&gt;

&lt;p&gt;Т.е. если я хочу изменить файл, то система скопирует все блоки, которые занимает данный файл в промежуточный snapshot и только потом произведёт запись в эти блоки. В итоге такая простая манипуляция займёт ажно три операции ввода/вывода: одна операция чтения и две операции записи. Три операции потому что перед изменением блока нужно сперва его прочесть, а затем записать существующий блок в новое место и уже потом записать в этот блок новую информацию.&lt;/p&gt;

&lt;p&gt;Если вы изменили файл, который был в snapshot то система сама поймёт в каком именно snapshot его искать. Т.е. система также тратит много времени на то чтобы понять в каком snapshot находится файл к которому вы обращаетесь (их может быть куча). Соответственно, чем больше у вас snapshot-ов тем меньше у вас производительность.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;логи-транзакций&quot;&gt;Логи транзакций&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Это в основном касается конечно только БД так как реляционные базы данных используют журналы транзакций, в которых записываются все операции с БД. При восстановлении с использованием логов транзакций может быть создано гораздо больше транзакций в секунду чем при обычной записи в обычное рабочее время, что также создаёт нагрузку.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ленточные-накопители&quot;&gt;Ленточные накопители&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Не знаю насколько это актуально в наше время, но всё же есть еще организации, которые делают бэкап на ленточные библиотеки разных фирм. Можно долго спорить на тему того нужно ли их использовать, но тема нашей статьи другая. И по теме статьи можно сказать что чтение с ленточных библиотек медленное. Такие системы зачатую используют как архивный бэкап, т.е. копия бэкапа.&lt;/p&gt;

&lt;p&gt;Да, и ещё один весомый аргумент — это то что приводы такой библиотеки могут выполнять только одно действие чтения или записи. Т.е. если привод сейчас записывает данные, то он не может использоваться для чтения. Но обычно приводов несколько, так что жить можно.&lt;/p&gt;
</description>
        <pubDate>Fri, 29 Apr 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/backup-why-recovery-slower-than-backup</link>
        <guid isPermaLink="true">http://www.tipoit.kz/backup-why-recovery-slower-than-backup</guid>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Docker - unknown flag iidfile</title>
        <description>&lt;p&gt;При запуске какого-либо проекта с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; можно наткнутся на ошибку &lt;strong&gt;unknown flag: –iidfile&lt;/strong&gt;. Сразу скажу, что решение этой проблемы в моём случае было радикальным.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-unknown-flag-iidfile&quot;&gt;Решение unknown flag: –iidfile&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Скорее всего вы установили старую версию &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;, да именно &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt; а не &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt;. Например, если вы ставите на &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS7&lt;/code&gt; из репозитория по умолчанию.&lt;/p&gt;

&lt;p&gt;Чтобы решить эту проблему нужно сперва удалить &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;. &lt;strong&gt;Обратите внимание что при удалении остановятся все ваши запущенные контейнеры.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;centos&quot;&gt;CentOS&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Удаляем установленный &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum remove docker &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-client &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-client-latest &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-common &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-latest &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-latest-logrotate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-logrotate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
                docker-engine
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем репозиторий
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install -y yum-utils
sudo yum-config-manager &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  --add-repo &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  https://download.docker.com/linux/centos/docker-ce.repo
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ставим &lt;strong&gt;docker-ce&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;docker
sudo systemctl start docker
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;ubuntu&quot;&gt;Ubuntu&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Удаляем установленный &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get remove docker docker-engine docker.io containerd runc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Добавляем репозиторий&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;  &lt;span class=&quot;s2&quot;&gt;&quot;deb [arch=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;dpkg --print-architecture&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; stable&quot;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Ставим &lt;strong&gt;docker-ce&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Вы всегда можете найти инструкцию по установке &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-ce&lt;/code&gt; на той или иной ОС на сайте &lt;a href=&quot;https://docs.docker.com/engine/install/centos/&quot;&gt;docker.com&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 21 Apr 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-unknown-flag-iidfile</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-unknown-flag-iidfile</guid>
        
        <category>docker</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Failed to load module [veeamsnap] with parameters [zerosnapdata=1 debuglogging=0]</title>
        <description>&lt;p&gt;После установки &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; решил сделать локальный бэкап с помощью агента и наткнулся на ошибку &lt;strong&gt;Veeam - Failed to load module [veeamsnap] with parameters [zerosnapdata=1 debuglogging=0]&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-1&quot;&gt;Решение №1&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первым на что стоит посмотреть это проверить установлены ли библиотеки модуля &lt;code class=&quot;highlighter-rouge&quot;&gt;veeamsnap&lt;/code&gt;. Если вы ставили &lt;code class=&quot;highlighter-rouge&quot;&gt;veeam&lt;/code&gt; из репозитория, то скорее всего у вас установился пакет &lt;code class=&quot;highlighter-rouge&quot;&gt;veeamsnap&lt;/code&gt;. Например, проверить это можно командой &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo yum list veeamsnap&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Теперь проверим собственно наличие библиотек выполнив команду:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo find /lib/modules | grep veeamsnap
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если команда выше ничего не вывела, то выходит библиотек у вас в системе от &lt;code class=&quot;highlighter-rouge&quot;&gt;veemsnap&lt;/code&gt; нету. И вот почему это может произойти.  Если перейти по &lt;a href=&quot;https://helpcenter.veeam.com/docs/agentforlinux/userguide/installation_offline.html?ver=50&quot;&gt;ссылке&lt;/a&gt; то видно что рекомендуется для &lt;code class=&quot;highlighter-rouge&quot;&gt;RHEL&lt;/code&gt; устанавливать 2 пакета: &lt;code class=&quot;highlighter-rouge&quot;&gt;veeam&lt;/code&gt; и &lt;strong&gt;kmod-veeamsnap&lt;/strong&gt;, хотя при установке пакета &lt;code class=&quot;highlighter-rouge&quot;&gt;veeam&lt;/code&gt; автоматом ставится пакет &lt;code class=&quot;highlighter-rouge&quot;&gt;veeamsnap&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для начала удалим пакет &lt;code class=&quot;highlighter-rouge&quot;&gt;veeamsnap&lt;/code&gt;, если он стоит конечно же.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo rpm -e --nodeps veeamsnap
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И потом поставим руками пакет &lt;strong&gt;kmod-veeamsnap&lt;/strong&gt;. Если у вас проблемы с тем что пакет не найден можете прочитать &lt;a href=&quot;https://tipoit.kz/veeam-linux-agent-installation&quot;&gt;статью&lt;/a&gt; по установке &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum -y install kmod-veeamsnap
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Снова выполняем проверку наличия библиотек.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo find /lib/modules | grep veeamsnap
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-327&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-1062&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-1127&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-1160&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-123&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-229&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-514&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-693&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-862&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/lib/modules/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0-957&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.el&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/extra/veeamsnap.ko&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-2&quot;&gt;Решение №2&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Не знаю насколько это действительно рабочее решение, так как у меня был именно случай как в первом решении, но также есть информация о том, что нужно установить &lt;code class=&quot;highlighter-rouge&quot;&gt;python&lt;/code&gt; версии 3 или выше. Для &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS7&lt;/code&gt; в упомянутой уже выше статье есть решение.&lt;/p&gt;
</description>
        <pubDate>Thu, 14 Apr 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-failed-to-load-module-veeamsnap-with-parameters</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-failed-to-load-module-veeamsnap-with-parameters</guid>
        
        <category>veeam</category>
        
        <category>linux</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Бэкап PostgreSql</title>
        <description>&lt;p&gt;Советую к прочтению &lt;a href=&quot;https://www.tipoit.kz/veeam12-backup-postgresql&quot;&gt;данную статью&lt;/a&gt;, так как вышел новый Veeam и там уже есть нормальный бэкап.&lt;/p&gt;

&lt;p&gt;С помощью &lt;strong&gt;veeam&lt;/strong&gt; вы можете делать бэкап баз данных &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;, хотя оговорюсь сразу что это не совсем тот бэкап, который хотят видеть многие. Не буду сразу говорить о чём речь так как после прочтения всей статьи будет более понятна мысль, которую я хочу донести.&lt;/p&gt;

&lt;p&gt;Так вот для того чтобы делать бэкап &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt; нужно будет установить на сервере с &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt; - &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt;. Об этом у меня есть отдельная &lt;a href=&quot;https://www.tipoit.kz/veeam-linux-agent-installation&quot;&gt;статья&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавляем-задачу-в-veeam-backup-and-replication&quot;&gt;Добавляем задачу в Veeam Backup and Replication&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как вы установили &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; можно приступать к созданию задачи. Для этого:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Jobs &amp;gt; Backup&lt;/code&gt; и добавляем новую задачу
&lt;img src=&quot;static/img/veeam/2022-04-12_11-27.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Добавляем сервер с &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt; 
&lt;img src=&quot;static/img/veeam/2022-04-12_11-28.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Ставим галочку напротив &lt;strong&gt;Enable application-aware processing&lt;/strong&gt; и настраиваем бэкап &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;, а именно добавляем пользователя для подключения к &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;.
&lt;img src=&quot;static/img/veeam/2022-04-12_11-30.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Дальше выставляем время запуска и завершаем мастер создания задачи&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;восстановление&quot;&gt;Восстановление&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;UPDATE: В этом году планируется выпуск новой версии Veeam Backup and Replication, а именно v12 где собственно поработали как раз над бэкапом PostgreSQL. В итоге в новой версии уже не нужен будет никакой Veeam Agent и появиться Veeam Explorer for PostgreSQL, благодаря которому можно будет восстановить полностью инстанс или отдельную БД. Как только появится возможность проверить я это использую и обновлю статью.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;И вот мы дошли до восстановления, которое обычно никто не проверяет, главное, что бэкап есть. Так вот как привык восстанавливать обычный администратор бд ему всегда нужна возможность восстановить отдельные бд или даже отдельные таблицы. Часто еще восстановить нужно уже на имеющемся кластере &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Так вот в &lt;strong&gt;Veeam&lt;/strong&gt; так сделать не получиться, суть в том, что хоть &lt;strong&gt;Veeam&lt;/strong&gt; и создаёт &lt;code class=&quot;highlighter-rouge&quot;&gt;checkpoint&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt; при бэкапе он всё еще использует систему &lt;strong&gt;snapshot&lt;/strong&gt;, т.е. он просто также бэкапит всю виртуальную машину, а точнее диски. И в таком случае для восстановления вам придётся либо восстановить полностью виртуальную машину, либо только тот диск, на котором у вас была бд, при этом если там их куча, то восстановятся тоже все, а не только одна нужная. Считаю, что это очень большой недостаток.&lt;/p&gt;

&lt;p&gt;Восстановление в целом ничем не отличается от того же восстановления виртуальной машины и описывать всё в подробностях я не вижу особого смысла.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вариант-на-просторах-интернета&quot;&gt;Вариант на просторах интернета&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Изучая тему, я нашел решение, в котором человек делал бэкап используя &lt;strong&gt;Scripts&lt;/strong&gt;. Т.е. перед началом бэкапа он выполнял скрипт, который делал бэкап используя встроенную утилиту в &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt; и потом уже делал бэкап дисков. Весь механизм описан в этой &lt;a href=&quot;https://www.virtualhome.blog/2021/02/15/postgresql-backup-with-veeam/&quot;&gt;статье&lt;/a&gt; и использовал он &lt;strong&gt;pg_dumpall&lt;/strong&gt;, хотя в сети много тем о том, что &lt;code class=&quot;highlighter-rouge&quot;&gt;dump&lt;/code&gt; это не бэкап.&lt;/p&gt;

&lt;p&gt;По моему мнению такая схема имеет место быть если вы хотите делать бэкап всего через &lt;strong&gt;Veeam&lt;/strong&gt; и не хотите ломать голову над другими решениями. Но я бы немного исправил его подход, а именно:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Использовал бы другую утилиту для бэкапа, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;pgbackrest&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;С помощью &lt;strong&gt;veeam&lt;/strong&gt; делал бы бэкап только диска куда делал бэкап с помощью утилиты &lt;code class=&quot;highlighter-rouge&quot;&gt;pgbackrest&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Каким-то образом удалял бэкап с хоста после проверки&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;чем-хорош-такой-подход&quot;&gt;Чем хорош такой подход&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Немного размышлений на тему почему может быть выгоден такой подход:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вы всё также можете делать выборочный бэкап&lt;/li&gt;
  &lt;li&gt;Вы можете вести статистику бэкапов (провален или выполнен), но это если у вас нет никакого мониторинга&lt;/li&gt;
  &lt;li&gt;У вас все бэкапы в одном месте&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Tue, 12 Apr 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-postgresql-backup</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-postgresql-backup</guid>
        
        <category>veeam</category>
        
        <category>postgres</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Установка Veeam Agent for Linux</title>
        <description>&lt;p&gt;Используя &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; вы можете делать backup приложений на хосте, например добавляется возможность делать backup &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSql&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Есть 2 способа установки агента:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вручную&lt;/li&gt;
  &lt;li&gt;С помощью консоли &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;firewall&quot;&gt;Firewall&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Не забудьте настроить правила на файерволе открыв порты от клиента к серверу и обратно. Список портов можно поссмотреть на &lt;a href=&quot;https://helpcenter.veeam.com/docs/backup/vsphere/used_ports.html?ver=110#linux-server&quot;&gt;офсайте&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;вручную&quot;&gt;Вручную&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала рассмотрим способ установки вручную хотя я всё же рекомендую использовать метод с консолью.&lt;/p&gt;

&lt;p&gt;Все пакеты приложения &lt;code class=&quot;highlighter-rouge&quot;&gt;Veaam&lt;/code&gt; находятся на сайте http://repository.veeam.com/.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Добавим репозиторий, в моём случае для &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/yum.repos.d/veeam.repo
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;veeam&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseurl=http://repository.veeam.com/backup/linux/agent/rpm/el/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/x&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgcheck=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgkey=http://repository.veeam.com/keys/veeam.gpg&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ставим агент &lt;strong&gt;Veeam&lt;/strong&gt; и добавим текущего пользователя в группу veeam. После добавления нужно перезайти в систему.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install -y veeam
sudo rpm -e --nodeps veeamsnap
sudo yum -y install kmod-veeamsnap
sudo usermod -a -G veeam admin
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;p&gt;Если непонятно зачем я удаляю пакет veeamsnap то можно почитать &lt;a href=&quot;https://www.tipoit.kz/veeam-failed-to-load-module-veeamsnap-with-parameters&quot;&gt;статью&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Запускаем агент
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;veeam
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Используя пробел ставим галочку напротив соглашений.
&lt;img src=&quot;static/img/veeam/2022-04-11_14-09.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Используя &lt;code class=&quot;highlighter-rouge&quot;&gt;tab&lt;/code&gt; переходим на кнопку &lt;code class=&quot;highlighter-rouge&quot;&gt;next&lt;/code&gt; и жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Создание образа восстановления можно пропустить. Суть в том, что создаётся загрузочный iso образ вашего сервера, куда входят файлы ОС. Если хотите всё же создать, то потребуется наличие &lt;code class=&quot;highlighter-rouge&quot;&gt;wget&lt;/code&gt; в системе.
Необходимо будет установить пакеты squashfs-tools, xorriso и genisoimage.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum -y install squashfs-tools genisoimage xorriso
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Далее необходимо предоставить ваш лицензионный ключ. 
&lt;img src=&quot;static/img/veeam/2022-04-11_14-14.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Но если у вас нет ключа, то просто нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;FINISH&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;с-помощью-консоли-veeam-backup-and-replication&quot;&gt;С помощью консоли Veeam Backup and Replication&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим в консоли в Inventory &amp;gt; Physical Infrastructure
&lt;img src=&quot;static/img/veeam/2022-04-12_10-19.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Создаём Protection group, где Type устанавливаем в Individual computers
&lt;img src=&quot;static/img/veeam/2022-04-12_10-20.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;В computers добавляем ip-адресс или доменное имя компьютера
&lt;img src=&quot;static/img/veeam/2022-04-12_10-20_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Далее завершаем мастер установки после которого начнётся установка агента&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Сам &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; также требует лицензирования, но если у вас &lt;strong&gt;Veeam Backup and Replication&lt;/strong&gt; с лицензией, то можно использовать и его лицензию.&lt;/p&gt;

&lt;p&gt;Для этого переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;License &amp;gt; Instances&lt;/code&gt; и ставим галочку &lt;code class=&quot;highlighter-rouge&quot;&gt;Allow unlicensed agents to consume instances&lt;/code&gt;. После этого возможно понадобиться перезапустить сервис &lt;code class=&quot;highlighter-rouge&quot;&gt;veeam&lt;/code&gt; на клиенте.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/veeam/2022-04-12_10-23.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также необходимо привязать лицензию к клиенту используя кнопку &lt;code class=&quot;highlighter-rouge&quot;&gt;Manage&lt;/code&gt; по тому же пути &lt;code class=&quot;highlighter-rouge&quot;&gt;License &amp;gt; Instances&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В итоге после всего проделанного в созданной группе вы должны увидеть свой компьютер или сервер.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;зависимости&quot;&gt;Зависимости&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы установить последнюю версию &lt;strong&gt;Veeam Agent for Linux&lt;/strong&gt; понадобиться наличие &lt;code class=&quot;highlighter-rouge&quot;&gt;python&lt;/code&gt; версии 3.0 или выше на клиентском устройстве.&lt;/p&gt;

&lt;p&gt;В случае с &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS7&lt;/code&gt; можно установить следующим образом:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Добавим репозиторий &lt;code class=&quot;highlighter-rouge&quot;&gt;ius&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/yum.repos.d/ius.repo
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IUS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Enterprise&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$basearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseurl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://repo.ius.io/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/$basearch/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repo_gpgcheck&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgcheck&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgkey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://repo.ius.io/RPM-GPG-KEY-IUS&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ставим &lt;code class=&quot;highlighter-rouge&quot;&gt;python&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install -y python36 python36-devel python36-pip
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Tue, 12 Apr 2022 06:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-linux-agent-installation</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-linux-agent-installation</guid>
        
        <category>veeam</category>
        
        <category>linux</category>
        
        <category>backup</category>
        
        
      </item>
    
      <item>
        <title>Powershell - Операторы сравнения</title>
        <description>&lt;p&gt;Как и в любом языке программирования в &lt;strong&gt;PowerShell&lt;/strong&gt; также присутствуют &lt;strong&gt;операторы сравнения&lt;/strong&gt;, при чём не в обычном для людей виде знаков &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;, &amp;gt;, =&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Вместо знаков в &lt;strong&gt;PowerShell&lt;/strong&gt; используются буквы, которые обозначают сами слова сравнения, например &lt;code class=&quot;highlighter-rouge&quot;&gt;-gt&lt;/code&gt; означает &lt;code class=&quot;highlighter-rouge&quot;&gt;Greater than (Больше)&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;таблица-операторов-сравнения&quot;&gt;Таблица операторов сравнения&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Оператор&lt;/th&gt;
      &lt;th&gt;Значение&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-le&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Less than or equal&lt;/td&gt;
      &lt;td&gt;Меньше или равно&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-lt&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Less than&lt;/td&gt;
      &lt;td&gt;Меньше чем&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-ge&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Greater than or equal&lt;/td&gt;
      &lt;td&gt;Больше или равно&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-gt&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Greater than&lt;/td&gt;
      &lt;td&gt;Больше чем&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-ne&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Not equal&lt;/td&gt;
      &lt;td&gt;Не равно&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-eq&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Equal&lt;/td&gt;
      &lt;td&gt;Равно&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-like&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Wildcard comparison&lt;/td&gt;
      &lt;td&gt;Поиск по шаблону&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-notlike&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Wildcard comparison&lt;/td&gt;
      &lt;td&gt;Поиск по несоответствию шаблонов&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-match&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Regular expression comparison&lt;/td&gt;
      &lt;td&gt;Поиск соответствия по регулярным выражениям&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-notmatch&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Regular expression comparison&lt;/td&gt;
      &lt;td&gt;Поиск несоответствия по регулярным выражениям&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-in&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Containment operator&lt;/td&gt;
      &lt;td&gt;Поиск по коллекции&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-notin&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Containment operator&lt;/td&gt;
      &lt;td&gt;Поиск по коллекции (не содержит)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-replace&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Replace operator&lt;/td&gt;
      &lt;td&gt;Заменяет часть или всё значение&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-is&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Type&lt;/td&gt;
      &lt;td&gt;Возвращает &lt;strong&gt;&lt;em&gt;true&lt;/em&gt;&lt;/strong&gt; если объекты одинаковы&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;-isnot&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Type&lt;/td&gt;
      &lt;td&gt;Возвращает true если объекты неодинаковы&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;le&quot;&gt;le&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор означает меньше или равно и эквивалентен &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;=&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;5 -le 8
5 -le 5
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;lt&quot;&gt;lt&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор означает меньше и эквивалентен &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;5 -le 8
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ge&quot;&gt;ge&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор означает больше или равно и эквивалентен &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;gt;=&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;5 -ge 8
10 -ge 8
10 -ge 10

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;gt&quot;&gt;gt&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор означает больше и эквивалентен &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;5 -gt 8
12 -gt 8

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ne&quot;&gt;ne&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор означает не равно и также может использоваться для сравнения буквенных значений.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;2 -ne  2
&lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt; -ne  &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt; -ne  &lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;eq&quot;&gt;eq&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор означает равно и также может использоваться для сравнения буквенных значений.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;2 -eq  2
&lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt; -eq  &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt; -eq  &lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;like&quot;&gt;like&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор сопоставления и ведёт себя аналогично оператору &lt;code class=&quot;highlighter-rouge&quot;&gt;-eq&lt;/code&gt; но работает только со словами и также может принимать регулярные выражения.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -like &lt;span class=&quot;s2&quot;&gt;&quot;home&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -like &lt;span class=&quot;s2&quot;&gt;&quot;*home*&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;notlike&quot;&gt;notlike&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор сопоставления и ведёт себя аналогично оператору &lt;code class=&quot;highlighter-rouge&quot;&gt;-ne&lt;/code&gt; но работает только со словами и также может принимать регулярные выражения.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -notlike &lt;span class=&quot;s2&quot;&gt;&quot;*home*&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -notlike &lt;span class=&quot;s2&quot;&gt;&quot;*abc*&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;match&quot;&gt;match&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор сопоставления и ведёт себя аналогично оператору &lt;code class=&quot;highlighter-rouge&quot;&gt;-like&lt;/code&gt; только с отличием того что он не обращает внимание на место символа поиска в строке.&lt;/p&gt;

&lt;p&gt;Также при использовании &lt;code class=&quot;highlighter-rouge&quot;&gt;-notmatch&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;-match&lt;/code&gt; создаётся автоматически переменная &lt;strong&gt;$Matches&lt;/strong&gt;, к которой вы можете получить доступ.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -like &lt;span class=&quot;s2&quot;&gt;&quot;home&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -like &lt;span class=&quot;s2&quot;&gt;&quot;*home*&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -match &lt;span class=&quot;s2&quot;&gt;&quot;home&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -match &lt;span class=&quot;s2&quot;&gt;&quot;h[qoea]me&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Используя &lt;code class=&quot;highlighter-rouge&quot;&gt;-match&lt;/code&gt; вы также можете разбивать какую-либо строку на переменные присваивая им значения слов из этого предложения используя регулярные выражения.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;I saw Helen yestrday&quot;&lt;/span&gt; -match &lt;span class=&quot;s1&quot;&gt;'.*\s(?&amp;lt;name&amp;gt;\w+)\s(?&amp;lt;date&amp;gt;\w+)'&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$Matches&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yestrday&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                           &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Helen&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                              &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;saw&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Helen&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yestrday&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;notmatch&quot;&gt;notmatch&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор сопоставления и ведёт себя аналогично оператору &lt;code class=&quot;highlighter-rouge&quot;&gt;-notlike&lt;/code&gt; только с отличием того что он не обращает внимание на место символа поиска в строке.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -notlike &lt;span class=&quot;s2&quot;&gt;&quot;*home*&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -notlike &lt;span class=&quot;s2&quot;&gt;&quot;*abc*&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -notmatch &lt;span class=&quot;s2&quot;&gt;&quot;home&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -notmatch &lt;span class=&quot;s2&quot;&gt;&quot;h[aedb]me&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;in-and-notin&quot;&gt;in and notin&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот оператор себя как оператор &lt;code class=&quot;highlighter-rouge&quot;&gt;-like&lt;/code&gt; только здесь вы можете для сравнения передать сразу коллекцию для сопоставления. Т.е. вместо того чтобы сопоставлять по одному значению вы делаете множественное сопоставление.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;avb&quot;&lt;/span&gt; -in  &lt;span class=&quot;s2&quot;&gt;&quot;avb&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;avb&quot;&lt;/span&gt; -in  &lt;span class=&quot;s2&quot;&gt;&quot;asd&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;dasd&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;derwerf&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;grtg&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;avb&quot;&lt;/span&gt; -notin  &lt;span class=&quot;s2&quot;&gt;&quot;avb&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;avb&quot;&lt;/span&gt; -notin  &lt;span class=&quot;s2&quot;&gt;&quot;asd&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;dasd&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;derwerf&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;grtg&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;replace&quot;&gt;replace&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как уже понятно из названия этот оператор служит для замены значения. Например, вы можете переименовывать названия всех документов в папке используя регулярные выражения.&lt;/p&gt;

&lt;p&gt;Пример с изменением расширения всех &lt;code class=&quot;highlighter-rouge&quot;&gt;log файлов&lt;/code&gt; в текущей директории.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Get-ChildItem &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.log | Rename-Item -NewName &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$_&lt;/span&gt;.name -replace  &lt;span class=&quot;s1&quot;&gt;'\.log$'&lt;/span&gt;,&lt;span class=&quot;s1&quot;&gt;'.txt'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если вам важна чувствительность к регистру можно воспользоваться оператором &lt;code class=&quot;highlighter-rouge&quot;&gt;-creplace&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -replace &lt;span class=&quot;s2&quot;&gt;&quot;home&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;****&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -replace &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;+)&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot; **** &quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -replace &lt;span class=&quot;s2&quot;&gt;&quot;HOME&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;****&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;my home here&quot;&lt;/span&gt; -creplace &lt;span class=&quot;s2&quot;&gt;&quot;HOME&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;****&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;****&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;****&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;****&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;home&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;is-and-isnot&quot;&gt;is and isnot&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Операторы сравнения типов (&lt;code class=&quot;highlighter-rouge&quot;&gt;-is&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;-isnot&lt;/code&gt;) используются для определения того, относится ли объект к определенному типу. Возвращает &lt;code class=&quot;highlighter-rouge&quot;&gt;Boolean&lt;/code&gt; значение: &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;abs&quot;&lt;/span&gt; -is &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;int]
&lt;span class=&quot;s2&quot;&gt;&quot;abs&quot;&lt;/span&gt; -isnot &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;int]
123 -is &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;int]
123 -isnot &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;int]
&lt;span class=&quot;s2&quot;&gt;&quot;abs&quot;&lt;/span&gt; -is &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;string]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 07 Apr 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/powershell-comparison_operators</link>
        <guid isPermaLink="true">http://www.tipoit.kz/powershell-comparison_operators</guid>
        
        <category>powershell</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Используем тэги (tags)</title>
        <description>&lt;p&gt;Иногда бывает полезным использование тэгов в большом &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt;. Тэги необходимы для того чтобы выполнить именно определённые &lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt; из всего &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Приведу несколько примеров, когда можно использовать тэги, или даже нужно:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Допустим у вас &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; из 20 - 30 задач (tasks) и вам нужно выполнить только 2 - 3 задачи, например, просто перезапустить сервис или установить какие-то пакеты. В таком случае вы назначаете этим задачам определённый тэг и запускаете его.&lt;/li&gt;
  &lt;li&gt;Ещё один пример это сделать один &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; в котором можно прописать задачи по управлению всеми сервисами, например, тэг для отключения сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSQL&lt;/code&gt; и тэг для его включения. Это позволит вам при необходимости управлять всеми сервисами.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;notice&quot;&gt;
Все файлы в статье вы можете найти в репозитории [github](https://github.com/tipoitkz/ansible-examples).
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-использовать&quot;&gt;Как использовать&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для использования тэгов придётся выполнить следующие 2 шага:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Задать задаче (task) тэг&lt;/li&gt;
  &lt;li&gt;При запуске &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; указать этот тэг&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;задать-задаче-task-тэг&quot;&gt;Задать задаче (task) тэг&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В качестве примера я буду использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; по управлению сервисами. В &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; 2 задачи по управлению сервисом &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat&lt;/code&gt;, где один включает сервис и другой выключает. Для демонстрации я просто использую &lt;code class=&quot;highlighter-rouge&quot;&gt;debug&lt;/code&gt;, понятное дело, что нужно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;service&lt;/code&gt;. Обратите внимание на &lt;code class=&quot;highlighter-rouge&quot;&gt;tags&lt;/code&gt;, их также может быть несколько для одной задачи.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim tasks.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;при-запуске-playbook-указать-этот-тэг&quot;&gt;При запуске playbook указать этот тэг&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь нам осталось только запустить &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; с определённым тэгом. Для этого используем знакомую команду &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible-playbook&lt;/code&gt; и передаем опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--tags&lt;/code&gt;. Опция &lt;code class=&quot;highlighter-rouge&quot;&gt;--tags&lt;/code&gt; может принимать несколько значений, например &lt;code class=&quot;highlighter-rouge&quot;&gt;--tags &quot;tag1,tag2,tag3&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для остановки используем тэг &lt;code class=&quot;highlighter-rouge&quot;&gt;stop metricbeat&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook tasks.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;stop metricbeat&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Stop metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для запуска используем тэг &lt;code class=&quot;highlighter-rouge&quot;&gt;start metricbeat&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook tasks.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;start metricbeat&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Start metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;какие-задачи-запустятся&quot;&gt;Какие задачи запустятся?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если файл слишком большой или &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; писали не вы наверняка появится желание какие именно задачи запустятся при использование определённого тэга.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook tasks.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;start metricbeat&quot;&lt;/span&gt; --list-tasks
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;playbook:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;play&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(localhost):&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAGS:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TAGS:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;используем-роли&quot;&gt;Используем роли&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы задать тэг роли (role) нужно задавать тэг именно в &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; где вызываются эти роли.&lt;/p&gt;

&lt;p&gt;Пример с использованием roles:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim roles.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;roles:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;role:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop_metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;role:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start_metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook roles.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;start metricbeat&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start_metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;******************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Start metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start_metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;********************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Start service2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Пример с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;import_role&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim import_role.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;import_role:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop_metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;import_role:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start_metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;наследование-тэгов&quot;&gt;Наследование тэгов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В &lt;strong&gt;Ansible&lt;/strong&gt; по умолчанию тэги не распространяются на вложенные задачи, т.е. когда мы запускаем задачу в &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt; с определённым тэгом то задача эта запускается только потому что задан тэг для самой задачи, а не для роли, например.&lt;/p&gt;

&lt;p&gt;Если вам вдруг нужно добавить наследование тэга для можно воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;include_tasks&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;include_role&lt;/code&gt; добавляя &lt;strong&gt;apply&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim include_tasks.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;roles/start_metricbeat/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apply:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;roles/stop_metricbeat/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;apply:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook include_tasks.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;stop metricbeat&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_tasks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;****************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;included:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/home/admin/ansible-examples/tags/roles/stop_metricbeat/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Stop metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;****************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Stop service2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Мы видим, что в итоге у нас остановились оба сервиса хотя, как и в случае с &lt;strong&gt;Используем роли&lt;/strong&gt;, но тут немного другой расклад. Тут выполнились обе задачи в роли потому что мы добавили ко всем задачам в роле &lt;code class=&quot;highlighter-rouge&quot;&gt;stop_metricbeat&lt;/code&gt; тэг &lt;code class=&quot;highlighter-rouge&quot;&gt;stop metricbeat&lt;/code&gt;, используя &lt;strong&gt;apply&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для примера запустим то же самое, но только уже без &lt;strong&gt;apply&lt;/strong&gt;, где выполниться только одна задача из роли &lt;code class=&quot;highlighter-rouge&quot;&gt;stop_metricbeat&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim include_tasks_without_apply.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;roles/start_metricbeat/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;roles/stop_metricbeat/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook include_tasks_without_apply.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;stop metricbeat&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_tasks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;****************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;included:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/home/admin/ansible-examples/tags/roles/stop_metricbeat/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Stop metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;зарезервированные-тэги&quot;&gt;Зарезервированные тэги&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Ansible&lt;/strong&gt; предоставляет 2 зарезервированных тэга:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;always&lt;/strong&gt; - задачи с этим тэгом будут выполнятся всегда, в независимости от того какой тэг вы указали при запуске. Убрать это поведение можно используя опцию &lt;code class=&quot;highlighter-rouge&quot;&gt;--skip-tags  always&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;never&lt;/strong&gt; - не трудно догадаться что тут обратная история задачи с этим тэгом не будут выполняться только если вы не укажете конкретно &lt;code class=&quot;highlighter-rouge&quot;&gt;--tags  never&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim always.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;always&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook always.yml --tags&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;start metricbeat&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Stop metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Start metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim never.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;never&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остановки&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тэг&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запуска&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook never.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricbeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Start metricbeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 06 Apr 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-using-tags</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-using-tags</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Powershell - Архивация логов IIS</title>
        <description>&lt;p&gt;Так уж получилось, что логи iis должны лежать на сервере локально, при этом они занимают кучу места на диске. Было решено архивировать их, но после пары месяцев делать это вручную надоело, и я решил написать скрипт.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;функционал&quot;&gt;Функционал&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В общем скрипт бегает по всем папкам в каталоге что указан и ищет файлы которые по типу, который задан в скрипте. Далее архивирует все эти файлы за псоледний месяц (можно изменить) и удаляет источник (тоже можно изменить).&lt;/p&gt;

&lt;p&gt;(!Ссылка на github)[https://github.com/tipoitkz/scripts-powershell/blob/main/iis/archive-iis-logs.ps1]&lt;/p&gt;

&lt;p&gt;(!Ссылка на wiki github)[https://github.com/tipoitkz/scripts-powershell/blob/main/archive-iis-logs.md]&lt;/p&gt;
</description>
        <pubDate>Fri, 18 Feb 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/powersell-script-to-archive-iis-logs</link>
        <guid isPermaLink="true">http://www.tipoit.kz/powersell-script-to-archive-iis-logs</guid>
        
        <category>windows</category>
        
        <category>powerhsell</category>
        
        <category>script</category>
        
        <category>iis</category>
        
        <category>logs</category>
        
        
      </item>
    
      <item>
        <title>Fold - Делаем текст более читаемым в Linux</title>
        <description>&lt;p&gt;Если вы сталкивались в linux с тем что вывод текста файла вылезает за экран и приходится скролить по бокам, или вы просто хотели бы сделать вывод текста немного поуже в ширину то осуществить это вам поможет утилита fold.&lt;/p&gt;

&lt;p&gt;Т.е. fold это утилита в linux которая урезает длину строки в выводе, что помогает пользователю в удобочитаемости. Большинство терминалов имеют ширину экрана 80 символов в строке и иногда чтение файлов с длинными строками вызывает не очень хорошие чувства у пользователей.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;использование-fold&quot;&gt;Использование fold&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для примера создадим файл /tmp/fold.txt и заполним его текстом. Текст можно взять в интернете, используя сервисы генерации рыбы текста.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /tmp/fold.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь выведем содержимое файла обычной командой cat.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /tmp/fold.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2022-02-11_10-14.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В моём случае видно, что текст не выходит за границы экрана и вроде бы всё нормально. Но что, если я хочу укоротить каждую строку. Ну вот такой я человек, хочу и всё.&lt;/p&gt;

&lt;p&gt;Выведем текст ограничивая длину строки в 50 символов используя команду fold.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fold -c50 /tmp/fold.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2022-02-11_10-16.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 11 Feb 2022 07:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-make-text-more-readable-by-using-fold</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-make-text-more-readable-by-using-fold</guid>
        
        <category>linux</category>
        
        <category>centos</category>
        
        
      </item>
    
      <item>
        <title>Linux - Out Of Memory killer</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/kjQo2OQVKvI&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Понятное дело, что каждому процессу в системе необходимо выделение оперативной памяти как физической, так и виртуальной. В обычной ситуации процесс не использует всю память что ему выделена. И логично что если выдавать всем таким процессам память, то её может и не хватить. И для того чтобы не раздавать всю память просто так используется подход резервирования памяти.&lt;/p&gt;

&lt;p&gt;Т.е. когда процесс говорит, что нуждается в 2 Гб памяти ОС резервирует за ним эти 2 Гб, но использование памяти происходит по факту. Возможно, что эти 2 Гб памяти будут использоваться только при пиковой нагрузке на процесс, а сейчас по факту он использует 200-300 Мб. Получается, что в итоге за процессом резервируется 2Гб, но используется только 200-300 Мб. Т.е. все 2Гб будут выделены процессу только тогда, когда они ему действительно нужны.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/oom/memory-allocation.drawio.png&quot; alt=&quot;memmory allocation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Минус такого подхода в том, что может так сложиться что в определённый момент ОС зарезервирует больше памяти чем у неё есть. И если вся память ОЗУ будет израсходована, то произойдёт сбой системы.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/oom/memory-allocation-2.drawio.png&quot; alt=&quot;memmory allocation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Т.е. в системе с 2 Гб ОЗУ процессам может быть зарезервировано все 3 Гб.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;демонстрация&quot;&gt;Демонстрация&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы продемонстрировать что произойдёт с ОС при полной загрузке ОЗУ просто забьём всё свободное место в директориях &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/shm&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;/run&lt;/code&gt;. Перед выполнением запустите в другом терминале команду &lt;code class=&quot;highlighter-rouge&quot;&gt;top&lt;/code&gt; чтобы мониторить загрузку по ОЗУ.&lt;/p&gt;

&lt;div class=&quot;notice&quot;&gt;
  &lt;p&gt;Внимание не повторяйте эти команды если вам важно время работы ОС.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Для начала отключим swap:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo swapoff -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И теперь используя команду &lt;code class=&quot;highlighter-rouge&quot;&gt;dd&lt;/code&gt; забьём всё свободное место:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dd &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/dev/zero &lt;span class=&quot;nv&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/run/fill &lt;span class=&quot;nv&quot;&gt;bs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3k &lt;span class=&quot;nv&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1024k
sudo dd &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/dev/zero &lt;span class=&quot;nv&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/dev/shm/fill &lt;span class=&quot;nv&quot;&gt;bs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3k &lt;span class=&quot;nv&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1024k
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И когда мы это выполнили загрузка по ОЗУ должна быть 100%.&lt;/p&gt;

&lt;p&gt;Теперь попробуем выполнить любую команду.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo df -h
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-bash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fork:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Cannot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allocate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И всё, у вас нет больше памяти для новых процессов. Более того вы даже не сможете выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;reboot&lt;/code&gt; для перезагрузки ОС.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-выбраться&quot;&gt;Как выбраться&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы отменить предыдущий шаг демонстрации можно перезагрузить ОС на горячую, используя кнопку перезагрузки. И второй способ — это убить какой-нибудь не сильно важный процесс в системе, благо команда &lt;code class=&quot;highlighter-rouge&quot;&gt;kill&lt;/code&gt; работает и уже после удалить файлы &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/shm/fill&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;/run/fill&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;kill&lt;/span&gt; -9 1122
rm /dev/shm/fill /run/fill
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;oom-killer&quot;&gt;OOM Killer&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и согласитесь терять вот так боевой сервер, тем более если это физический сервер и стоит он где-то в другом городе не хотелось бы только из-за того, что какой-то процесс отъелся ОЗУ. И для того чтобы такого не происходило у нас есть &lt;strong&gt;Out Of Memory Killer&lt;/strong&gt;. Он принудительно завершает один из процессов что в итоге освобождает память. По сути в блоке сверху я сделал то же самое что и &lt;strong&gt;OOM Killer&lt;/strong&gt;, за исключением того, что я выбрал ненужный мне процесс. &lt;strong&gt;OOM Killer&lt;/strong&gt; же может убить и весьма важный процесс для вас, например процесс &lt;code class=&quot;highlighter-rouge&quot;&gt;PostgreSQL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Понять, что тот или иной процесс был убит &lt;strong&gt;OOM Killer&lt;/strong&gt; можно по записям в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/messages&lt;/code&gt;. Он будет содержать запись &lt;code class=&quot;highlighter-rouge&quot;&gt;Out of Memory: Killed process 125 (vault)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того, чтобы завершить процесс ОС вызывает функцию &lt;strong&gt;out_of_memory&lt;/strong&gt;. После чего &lt;strong&gt;OOM Killer&lt;/strong&gt; решает какой именно процесс ему завершить и потом проделывает это с ним.&lt;/p&gt;

&lt;p&gt;Перед тем как вызвать &lt;strong&gt;out_of_memory&lt;/strong&gt; выполняются следующие проверки:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Достаточно ли в ОС еще места подкачки (swap) (nr_swap_pages &amp;gt; 0)? Если да, то не вызываем &lt;strong&gt;ООМ&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Был ли завершений процесс в течение последних 5 секунд? Если да, то не вызываем &lt;strong&gt;ООМ&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;swapoff -a
perl -wE &lt;span class=&quot;s1&quot;&gt;'my @xs; for (1..2**20) { push @xs, q{a} x 2**20 }; say scalar @xs; sleep;'&lt;/span&gt;
swapon -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Killed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /var/log/messages | grep &lt;span class=&quot;s2&quot;&gt;&quot;Out of&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Jan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;57&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kernel:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Out&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;memory:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Killed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11144&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(perl)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;total-vm:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6500608&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;anon-rss:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3421028&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file-rss:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;shmem-rss:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UID:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pgtables:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12752&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;oom_score_adj:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;какой-процесс-завершать&quot;&gt;Какой процесс завершать?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В функции &lt;strong&gt;out_of_memory&lt;/strong&gt;, которую мы упоминали выше вызывается функция под названием &lt;strong&gt;select_bad_process&lt;/strong&gt;, которая отвечает за выбор процесса для завершения. Она решает насколько тот или иной процесс подходит для уничтожения с помощью функции &lt;strong&gt;badness&lt;/strong&gt;. В итоге благодаря функции &lt;strong&gt;badness&lt;/strong&gt; процесс проходит отбор по правилам и в конце назначается репутация процесса.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/all/2022-01-22_17-44.png&quot; alt=&quot;oom killer functions&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Получается, что &lt;strong&gt;OOM Killer&lt;/strong&gt; не завершает любой процесс, он завершает именно тот который по мнению функции &lt;strong&gt;select_bad_process&lt;/strong&gt; является самым плохим основываясь на оценке процесса (&lt;strong&gt;oom_score&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Посмотреть какую именно оценку получил тот или иной процесс вы всегда можете, выполнив команду &lt;code class=&quot;highlighter-rouge&quot;&gt;cat /proc/$PID/oom_score&lt;/code&gt;, где &lt;code class=&quot;highlighter-rouge&quot;&gt;$PID&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; процесса.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /proc/868/oom_score
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;670&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;notice&quot;&gt;
  &lt;p&gt;Чем выше репутация у процесса, тем больше вероятности что именно его и завершит &lt;strong&gt;OOM Killer&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Оценка вычисляется благодаря функции &lt;strong&gt;int_sqrt&lt;/strong&gt;. Во время оценки внимание обращается на:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Объем памяти, используемый процессом.&lt;/li&gt;
  &lt;li&gt;Размер памяти любого дочернего процесса (не включая поток ядра).&lt;/li&gt;
  &lt;li&gt;Оценка процесса увеличивается для хороших процессов и уменьшается для длительных процессов.&lt;/li&gt;
  &lt;li&gt;У процессов с возможностями &lt;code class=&quot;highlighter-rouge&quot;&gt;CAP_SYS_ADMIN&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;CAP_SYS_RAWIO&lt;/code&gt; снижены оценки.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если процесс запущен от &lt;strong&gt;root&lt;/strong&gt; его значение будет разделено еще на 4, потому что от root запускаются как правило только хорошие процессы. То же самое происходит и с процессами, которые имеют доступ к физическим устройствам (&lt;code class=&quot;highlighter-rouge&quot;&gt;/dev&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Для примера запустим 2 perl скрипта и проверим их репутацию.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;perl -wE &lt;span class=&quot;s1&quot;&gt;'my @xs; for (1..2**15.7) { push @xs, q{a} x 2**15.7 }; say scalar @xs; sleep;'&lt;/span&gt;
perl -wE &lt;span class=&quot;s1&quot;&gt;'my @xs; for (1..2**14.6) { push @xs, q{a} x 2**14.6 }; say scalar @xs; sleep;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3914&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2731&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2706&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;424&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;73.4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.54&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;perl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-wE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@xs;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;15.7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@xs,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q{a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;15.7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;};&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scalar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@xs;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sleep;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4018&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;615&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;590&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;424&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;16.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;perl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-wE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@xs;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;14.6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@xs,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;q{a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;14.6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;};&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scalar&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@xs;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sleep;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /proc/3914/oom_score
cat /proc/4018/oom_score
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;1156&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;773&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге получается, что процесс, который использует больше памяти имеет репутацию больше чем второй процесс.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;отключить-oom-killer&quot;&gt;Отключить OOM Killer&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;notice&quot;&gt;
  &lt;p&gt;Сразу оговорюсь что я не рекомендую это делать, мы уже видели к чему это может привести.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Но если вы всё же хотите отключить &lt;strong&gt;OOM Killer&lt;/strong&gt;, то выполняем следующее:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /proc/sys/vm/panic_on_oom
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo &lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;1 &amp;gt; /proc/sys/vm/panic_on_oom
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;уменьшаем-oom_score&quot;&gt;Уменьшаем oom_score&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вам важно чтобы какой-то процесс не завершался, то можно уменьшиться его репутацию. Для этого в файл &lt;code class=&quot;highlighter-rouge&quot;&gt;oom_adj&lt;/code&gt; помещаем значение от -16 до +15.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /proc/8367/oom_score
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;1157&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; -5 &amp;gt; /proc/8367/oom_adj
cat /proc/8367/oom_score
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;961&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;5 &amp;gt; /proc/8367/oom_adj
cat /proc/8367/oom_score
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;1353&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;отключить-oom-killer-для-процесса&quot;&gt;Отключить OOM Killer для процесса&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите отключить &lt;strong&gt;OOM Killer&lt;/strong&gt; только для определённого процесса в файл &lt;code class=&quot;highlighter-rouge&quot;&gt;oom_adj&lt;/code&gt; записываем число -17. Но нужно понимать, что как только вы перезапустите службу отвечающую за этот процесс его &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; изменится и соответственно и репутация.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; -17 &amp;gt; /proc/8367/oom_adj
cat /proc/8367/oom_score
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При завершении процесса все файлы удаляются, а значит репутация, которую вы установили для процесса не будет назначена другому процессу с тем же &lt;code class=&quot;highlighter-rouge&quot;&gt;pid&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;И в таком случае лучше задавать репутацию в файле сервиса через переменную &lt;strong&gt;OOMScoreAdjust&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;OOMScoreAdjust=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-17&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;postgresql&quot;&gt;PostgreSQL&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В приложении сервера БД PostgreSQL каждый запрос порождает отдельный процесс. Соответственно если ОЗУ закончилось сам сервис PostgreSQL отключен не будет, завершиться только тот процесс, который занял всё ОЗУ.&lt;/p&gt;

&lt;p&gt;При этом сама база перейдёт в режим &lt;code class=&quot;highlighter-rouge&quot;&gt;recovery&lt;/code&gt; из-за отмены транзакции.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Не нужно боятся &lt;strong&gt;OOM Killer&lt;/strong&gt; он наоборот сохранит вам нервы. Другое дело что нужно писать свои сервисы так чтобы они не съедали всё ОЗУ на сервере или ограничивать объём используемого ОЗУ для сервиса.&lt;/p&gt;
</description>
        <pubDate>Mon, 24 Jan 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/what-is-oom-killer</link>
        <guid isPermaLink="true">http://www.tipoit.kz/what-is-oom-killer</guid>
        
        <category>linux</category>
        
        <category>centos</category>
        
        
      </item>
    
      <item>
        <title>WireGuard - Создаём Point-To-Point vpn</title>
        <description>&lt;p&gt;Понятное дело, что у вас уже должен быть устройство, на котором вы будете поднимать сервер &lt;strong&gt;WireGuard&lt;/strong&gt; и, если это просто vpn для обхода ограничений интернета в вашем регионе сервер с &lt;strong&gt;WireGuard&lt;/strong&gt; должен находится в другом регионе, например, в другой стране.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;схема&quot;&gt;Схема&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-20_16-49.png&quot; alt=&quot;схема&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Серверная часть &lt;strong&gt;WireGuard&lt;/strong&gt; будет стоять на виртуальном сервере, который арендуется у &lt;code class=&quot;highlighter-rouge&quot;&gt;digitalocean&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;На своём компьютере я ставлю также &lt;strong&gt;WireGuard&lt;/strong&gt; и подключаюсь к серверу (1)&lt;/li&gt;
  &lt;li&gt;Использую интернет через &lt;code class=&quot;highlighter-rouge&quot;&gt;vpn&lt;/code&gt; (2)&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;выбор-региона-для-виртуалки&quot;&gt;Выбор региона для виртуалки&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы уже ранее работали с облаками и размещали там виртуальные сервера, то вы скорее всего уже знаете о том, что в зависимости от региона пинг до вашей виртуальной машины варьируется. И соответственно идеально было бы разместить так чтобы пинг был минимальный.&lt;/p&gt;

&lt;p&gt;Так как я размещаюсь на &lt;code class=&quot;highlighter-rouge&quot;&gt;digitalocean&lt;/code&gt; у меня есть скрипт, который выдаст вам пинги в зависимости от региона.&lt;/p&gt;

&lt;p&gt;Для windows (cmd):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;{
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-nyc1.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-nyc2.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-nyc3.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-ams2.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-ams3.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-sfo1.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-sfo2.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-sgp1.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-lon1.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-fra1.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-tor1.digitalocean.com/
    curl -w &quot;%{url_effective};%{time_connect}\n&quot; -o /dev/null -s http://speedtest-blr1.digitalocean.com/
} | sort -t';' -k2
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Для Linux:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget -qO - https://raw.githubusercontent.com/jakejarvis/datacenter-speed-tests/master/ping.sh | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Или просто используя &lt;a href=&quot;http://speedtest-lon1.digitalocean.com/&quot;&gt;ссылку&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Теперь, когда мы определились где именно размещать виртуальный сервер выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;deploy&lt;/code&gt; последней версии &lt;code class=&quot;highlighter-rouge&quot;&gt;ubuntu&lt;/code&gt; и назначаем ей &lt;code class=&quot;highlighter-rouge&quot;&gt;floating IP&lt;/code&gt;. Об этом я тут писать не буду, но если интересно или вы никогда этого не делали, то можно посмотреть отрезок на видео внизу.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;настройка-сервера-на-ubuntu&quot;&gt;Настройка сервера на ubuntu&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;1---устанавливаем-wireguard-и-генерируем-ключи&quot;&gt;1 - Устанавливаем WireGuard и генерируем ключи&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала ставим последние обновления и уже потом ставим сам &lt;strong&gt;WireGuard&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt update -y
sudo apt install wireguard -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь, когда мы установили &lt;strong&gt;WireGuard&lt;/strong&gt; нужно создать пары закрытого и открытого ключей для сервера, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;wg genkey&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo wg genkey | sudo tee /etc/wireguard/private.key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;KPfbJtgKfrWxihTpA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ETzcU/yyyyC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rereZDGsdG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также для большей безопасности нелишним будет отобрать права на доступ к файлу у всех кроме владельца.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chmod &lt;span class=&quot;nv&quot;&gt;go&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; /etc/wireguard/private.key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И следующая команда уже создаст нам публичный ключ.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;pnoYatoBe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rrJ&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;574&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttteraxF/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HdCTgfgY=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;2---выбор-ip-адресов&quot;&gt;2 - Выбор ip адресов&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже сгенерировали пару ключей, благодаря которым будет шифроваться весь входящий и исходящий трафик сервера.&lt;/p&gt;

&lt;p&gt;В этом же шаге мы назначим &lt;code class=&quot;highlighter-rouge&quot;&gt;ip адреса&lt;/code&gt; нашей приватной сети. Я решил выбрать подсеть &lt;code class=&quot;highlighter-rouge&quot;&gt;10.10.0.0/24&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Самому серверу &lt;strong&gt;WireGuard&lt;/strong&gt; я выдам ip &lt;code class=&quot;highlighter-rouge&quot;&gt;10.10.0.1&lt;/code&gt;, но вы можете назначить любой другой в пределах 24 маски. Соответственно так как этот ip адрес уже занят для своего компьютера я задам ip &lt;code class=&quot;highlighter-rouge&quot;&gt;10.10.0.2&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;3---создание-конфигурации-сервера-wireguard&quot;&gt;3 - Создание конфигурации сервера WireGuard&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь, когда у нас есть пара ключей и мы выбрали &lt;code class=&quot;highlighter-rouge&quot;&gt;ip адреса&lt;/code&gt; самое время создать файл конфигурации для нашего сервера &lt;strong&gt;WireGuard&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/wireguard/wg0.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Interface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ключ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/wireguard/private.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PrivateKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KPfbJtgKfrWxihTpA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ETzcU/yyyyC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rereZDGsdG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ListenPort&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51830&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SaveConfig&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Обратите внимание на &lt;strong&gt;ListenPort&lt;/strong&gt;, это обозначает тот самый порт, к которому будет подключаться ваш клиент. Можно задать любой другой, используется по умолчанию протокол &lt;code class=&quot;highlighter-rouge&quot;&gt;UDP&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;4---настройка-сетевой-конфигурации-сервера-wireguard&quot;&gt;4 - Настройка сетевой конфигурации сервера WireGuard&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите направить интернет-трафик вашего узла &lt;strong&gt;WireGuard&lt;/strong&gt; (клиент) через сервер &lt;strong&gt;WireGuard&lt;/strong&gt;, вам необходимо настроить &lt;code class=&quot;highlighter-rouge&quot;&gt;IP-переадресацию&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;net.ipv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.ip_forward=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo sysctl -p
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;net.ipv&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.ip_forward&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;5---настройка-файрвола-wireguard&quot;&gt;5 - Настройка файрвола WireGuard&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы разрешить трафик &lt;strong&gt;WireGuard&lt;/strong&gt; VPN через брандмауэр сервера, вам необходимо включить &lt;strong&gt;masquerading&lt;/strong&gt;, которая представляет собой концепцию iptables, обеспечивающую динамическую трансляцию сетевых адресов (&lt;strong&gt;NAT&lt;/strong&gt;) на лету для правильной маршрутизации клиентских подключений.&lt;/p&gt;

&lt;p&gt;Для начала определим наш интерфейс, обычно &lt;code class=&quot;highlighter-rouge&quot;&gt;eth0&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ip route list default
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;via&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;128.199&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;16.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;dev&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;proto&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь добавляем правила для файрволла в файл конфигурации &lt;strong&gt;WireGuard&lt;/strong&gt; сервера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/wireguard/wg0.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Interface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ключ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/wireguard/private.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PrivateKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KPfbJtgKfrWxihTpA&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ETzcU/yyyyC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rereZDGsdG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ListenPort&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51830&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SaveConfig&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PostUp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ufw&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;route&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PostUp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iptables&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-I&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTROUTING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-o&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MASQUERADE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PostUp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tables&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-I&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTROUTING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-o&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MASQUERADE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PreDown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ufw&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;route&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PreDown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;iptables&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-D&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTROUTING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-o&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MASQUERADE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PreDown&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tables&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-t&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nat&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-D&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POSTROUTING&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-o&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;MASQUERADE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И осталось разрешить входящие подключения на порт &lt;strong&gt;51830&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ufw allow 51830/udp
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw &lt;span class=&quot;nb&quot;&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;6---запуск-сервера-wireguard&quot;&gt;6 - Запуск сервера WireGuard&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;И последний этап, который мы проделываем на самом сервер это запуск сервера &lt;strong&gt;WireGuard&lt;/strong&gt; с тем конфигом что мы сделали.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable&lt;/span&gt; --now wg-quick@wg0.service
sudo systemctl status wg-quick@wg0.service
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Active:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;active&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(exited)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;настройка-wireguard-на-стороне-клиента&quot;&gt;Настройка WireGuard на стороне клиента&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Так как мне нужен vpn на компьютере с &lt;code class=&quot;highlighter-rouge&quot;&gt;windows&lt;/code&gt; для начала мне нужно скачать установочный файл по &lt;a href=&quot;https://www.wireguard.com/install/&quot;&gt;ссылке&lt;/a&gt;. Если у вас другая ОС на клиенте по той же ссылке можно найти инструкцию по установке.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;1---генерируем-ключи&quot;&gt;1 - Генерируем ключи&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также, как и для сервера генерируем ключи для клиента.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo wg genkey | sudo tee /etc/wireguard/peer-private.key
sudo chmod &lt;span class=&quot;nv&quot;&gt;go&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; /etc/wireguard/private.key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;aMc+s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zWG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ULDMMIkUWcCn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;svNQF/FPMlH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EFUWQ=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /etc/wireguard/peer-private.key | wg pubkey | sudo tee /etc/wireguard/peer-public.key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UpF&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kWp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ZJIKRfjiuucjpAx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scldIzxSOF/cw&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;2---конфигурации-клиента-wireguard&quot;&gt;2 - Конфигурации клиента WireGuard&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Создаём текстовый файл &lt;strong&gt;wg0.conf&lt;/strong&gt; и записываем в него:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Interface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ключ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/wireguard/peer-private.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PrivateKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aMc+s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zWG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ULDMMIkUWcCn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;svNQF/FPMlH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EFUWQ=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#публичный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ключ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/wireguard/public.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PublicKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pnoYatoBe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rrJ&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;574&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttteraxF/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HdCTgfgY=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AllowedIPs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#статический&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Endpoint&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.144&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51830&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И следующим шагом импортируем настройки в &lt;strong&gt;WireGuard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-20_15-52.png&quot; alt=&quot;wireguard gui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-20_15-54.png&quot; alt=&quot;wireguard gui2&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавление-открытого-ключа-клиента-узла-на-сервер-wireguard&quot;&gt;Добавление открытого ключа клиента узла на сервер WireGuard&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Осталось совсем немного, но перед подключением клиента к серверу важно добавить открытый ключ клиента на сервер &lt;strong&gt;WireGuard&lt;/strong&gt;. Без выполнения этого шага сервер &lt;strong&gt;WireGuard&lt;/strong&gt; не позволит одно ранговому узлу отправлять или получать какой-либо трафик через туннель.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /etc/wireguard/peer-public.key
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UpF&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kWp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ZJIKRfjiuucjpAx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scldIzxSOF/cw&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь выполняем добавление ключа на сервер &lt;strong&gt;WireGuard&lt;/strong&gt; используя следующую команду:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo wg &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;wg0 peer c7UpF4kWp6ZJIKRfjiuucjpAx1gC1scldIzxSOF/cw4&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; allowed-ips 10.10.0.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Чтобы просмотреть что команда выполнилась, и мы добавили клиента выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo wg&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo wg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;interface:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wg&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;key:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pnoYatoBe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rrJ&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;574&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttteraxF/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HdCTgfgY=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;key:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(hidden)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;listening&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51830&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;peer:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UpF&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kWp&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ZJIKRfjiuucjpAx&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gC&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scldIzxSOF/cw&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allowed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ips:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;подключение&quot;&gt;Подключение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь всё готово к подключению и нам всего то нужно нажать &lt;strong&gt;Activate&lt;/strong&gt; нашего туннеля.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-20_17-38.png&quot; alt=&quot;wireguard gui&quot; /&gt;
&lt;img src=&quot;static/img/vpn/2022-01-20_17-44.png&quot; alt=&quot;wireguard gui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;И для проверки просто попробуем пропиговать приватный ip нашего сервера.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo wg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Pinging&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reply&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;451&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTL=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reply&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;462&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTL=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reply&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;482&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTL=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Reply&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bytes=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;time=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;397&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TTL=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;64&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;роутинг&quot;&gt;Роутинг&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите отправлять весь ваш трафик в тунель, т.е. на vpn сервер то &lt;strong&gt;AllowedIPs&lt;/strong&gt; на клиенте нужно изменить.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Interface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ключ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/wireguard/peer-private.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PrivateKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aMc+s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zWG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ULDMMIkUWcCn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;svNQF/FPMlH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EFUWQ=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#/etc/wireguard/public.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PublicKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pnoYatoBe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rrJ&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;574&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttteraxF/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HdCTgfgY=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AllowedIPs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#статический&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Endpoint&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.144&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51830&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После этого можно попробовать открыть сайт заблокированный, или проверить ваш &lt;code class=&quot;highlighter-rouge&quot;&gt;статический ip&lt;/code&gt; чтобы удостоверится в работе vpn.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;назначаем-свой-dns&quot;&gt;Назначаем свой dns&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите переназначить используемый dns сервер добавляем переменную &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; в файл конфигурации клиента.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Interface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;наш&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;приватный&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ключ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/wireguard/peer-private.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PrivateKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;aMc+s&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;zWG&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ULDMMIkUWcCn&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;svNQF/FPMlH&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;EFUWQ=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Address&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10.10&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;DNS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;8.8&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Peer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#/etc/wireguard/public.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PublicKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pnoYatoBe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rrJ&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;574&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ttteraxF/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;91&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hN&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;HdCTgfgY=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;AllowedIPs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#статический&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Endpoint&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.144&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;144.141&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51830&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/h3sxDC103rs&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Fri, 21 Jan 2022 20:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/wireguard-p2p-vpn</link>
        <guid isPermaLink="true">http://www.tipoit.kz/wireguard-p2p-vpn</guid>
        
        <category>vpn</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>Что такое VPN?</title>
        <description>&lt;p&gt;Начнём с самого банального, а именно с расшифровки этих трёх букв &lt;strong&gt;VPN - Virtual Private Network&lt;/strong&gt;, что в переводе на русский язык означает &lt;strong&gt;виртуальная частная (приватная) сеть&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Слово &lt;strong&gt;сеть&lt;/strong&gt; здесь тут участвует потому что объединение 2 или более устройств используя любые каналы связи уже подразумевает создание сети.&lt;/li&gt;
  &lt;li&gt;Что такое &lt;strong&gt;частная или приватная&lt;/strong&gt;, наверное, и так понятно, основной аргумент что не общая, а значит частная. Подразумевается, что в вашей сети только доверенные устройства, хотя сейчас, когда vpn предоставляет куча организаций, да еще и бесплатно то это уже не совсем так.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Виртуальная&lt;/strong&gt; в большей степени означает то что у этой сети нет доступа к вашей физической сети, ну по крайней мере так по умолчанию.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;зачем-нам-vpn&quot;&gt;Зачем нам VPN?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Самый распространённый способ использования &lt;strong&gt;vpn&lt;/strong&gt; это &lt;code class=&quot;highlighter-rouge&quot;&gt;подключение сотрудника с дома или еще откуда-либо к своему рабочему месту&lt;/code&gt;. Т.е. только он, имея сертификат, логин и пароль сможет подключиться к своему рабочему компьютеру, тут вспоминаем о приватности. Не всем сотрудникам конечно это нравится, особенно если ему приходится работать в отпуске. Но во врем пандемии — это очень хорошая возможность сохранить свою заработную плату.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-19_16-49.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;И еще один распространённый способ — это использование &lt;strong&gt;vpn&lt;/strong&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;подключения между собой нескольких офисов, дата-центров&lt;/code&gt;. Эти офисы могут находится в разных городах или даже странах, но благодаря vpn сотрудники этих офисов совместно могут работать с одними общими ресурсами, например, база &lt;code class=&quot;highlighter-rouge&quot;&gt;1с&lt;/code&gt;. Конечно достичь этого можно просто выставив свою базу в интернет, но это чревато плохими последствиями, например, взломом и хищением данных. Т.е. основная цель объединить множество географически распределённых систем в одну сеть, при том сделать это безопасно.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-19_16-41.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ну и самый распространённый вариант в наше время — это просто в&lt;code class=&quot;highlighter-rouge&quot;&gt;ыход в интернет с компьютера либо телефона&lt;/code&gt;. Делается это конечно для обхода разнообразных блокировок интернета. Например, для доступа к сайтам, которые заблокированы в вашем регионе.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;static/img/vpn/2022-01-19_14-59.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;кто-использует&quot;&gt;Кто использует?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как я и говорил больше всего люди используют &lt;strong&gt;vpn&lt;/strong&gt; для выхода в интернет. Этому также способствует наличие множества бесплатных &lt;strong&gt;vpn&lt;/strong&gt; серверов, хотя, как по мне ничего бесплатного не бывает.&lt;/p&gt;

&lt;p&gt;Есть такой сайт &lt;a href=&quot;https://www.gwi.com/&quot;&gt;https://www.gwi.com/&lt;/a&gt;, который занимается статистикой. Так вот у них есть также и статистика того, кто и как пользуется &lt;strong&gt;vpn&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Вот несколько интересных фактов из их исследований:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Даже люди в возрасте от 55-64 используют &lt;strong&gt;vpn&lt;/strong&gt; (28%)&lt;/li&gt;
  &lt;li&gt;34% пользователей используют &lt;strong&gt;vpn&lt;/strong&gt; чтобы защитить свои персональные данные&lt;/li&gt;
  &lt;li&gt;34% используют для прослушивания музыки и 32% для видео&lt;/li&gt;
  &lt;li&gt;72% пользователей используют компьютеры&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Всю эту статистику вы можете скачать по &lt;a href=&quot;https://www.gwi.com/reports/vpn-usage-around-the-world&quot;&gt;ссылке&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-это-работает&quot;&gt;Как это работает?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я не буду слишком вдаваться в подробности потому как я считаю, что 80% читающим это будет неинтересно. Я просто попытаюсь объяснить максимально просто и показать пару примеров.&lt;/p&gt;

&lt;p&gt;Так вот представим ситуацию что вам нужно отправить секретное письмо в какую-то страну и получить ответ, но при этом нельзя это делать через каких-либо третьих лиц, т.е. почта не пойдёт. А сами вы это сделать не можете так как по каким-то причинам въезд вам и адресату запрещен.  Но у вас есть близкий друг, у которого есть возможность слетать туда и отдать лично в руки ваше письмо и соответственно передать вам ответ. Получается благодаря ему вы сделали по сути невозможное.&lt;/p&gt;

&lt;p&gt;Так вот если теперь перевести историю в наши реалии получается, что:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;вместо письма может быть доступ к сайтам, которые у вас не открываются&lt;/li&gt;
  &lt;li&gt;вместо друга используется &lt;strong&gt;vpn&lt;/strong&gt; сервер, только тут он сразу находится в другой стране как правило&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Т.е. вы можете открыть заблокированный ресурс потому что трафик идёт уже не от вас, а от самого &lt;strong&gt;vpn&lt;/strong&gt; сервера. Получается для того же оператора, который предоставляет вам интернет вы не открываете сайт, а просто пересылаете какой-то трафик на vpn сервер.&lt;/p&gt;

&lt;p&gt;Но нужно понимать, что вы можете столкнутся с запретами той страны, в которой находится ваш &lt;strong&gt;vpn&lt;/strong&gt; сервер.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;какой-vpn-использовать&quot;&gt;Какой vpn использовать?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сейчас существует куда &lt;strong&gt;vpn&lt;/strong&gt; как платных, так и бесплатных. Но используя их вы должны понимать, что вы не знаете кем и как настроен тот &lt;strong&gt;vpn&lt;/strong&gt; который вы используете. Т.е. никто не гарантирует вам сохранность ваших данных, только если на словах. Особенно не рекомендую использовать такие &lt;strong&gt;vpn&lt;/strong&gt; для подключения к интернет банкингу.&lt;/p&gt;

&lt;p&gt;Поэтому я лично стараюсь использовать свой личный &lt;strong&gt;vpn&lt;/strong&gt; сервер. И у меня есть несколько статей, о том, как его настроить:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tipoit.kz/configure-openvpn-pn-pfsense&quot;&gt;ipsec vpn (более безопасный)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 19 Jan 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/what-is-vpn</link>
        <guid isPermaLink="true">http://www.tipoit.kz/what-is-vpn</guid>
        
        <category>vpn</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>ELK - комбинированный поиск</title>
        <description>&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;elk&lt;/code&gt; существует возможность делать вложенный поиск, т.е искать по заданным критериям в уже выполненном поиске. Такой поиск также называется как &lt;strong&gt;bool query&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Включает в себя 4 оператора:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;must&lt;/li&gt;
  &lt;li&gt;must_not&lt;/li&gt;
  &lt;li&gt;should&lt;/li&gt;
  &lt;li&gt;filter&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Рассмотрим каждый из них подробнее чтобы понять в чем их различия.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;must&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Равнозначен &lt;strong&gt;and&lt;/strong&gt;, т.е означает что введённое значение должно находится в выведенных документах. Чем больше &lt;strong&gt;must&lt;/strong&gt; в условиях тем больше совпадений должно быть найдено.&lt;/p&gt;

&lt;p&gt;Например выведем все документы со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;logstah&lt;/code&gt; в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt; и значением &lt;code class=&quot;highlighter-rouge&quot;&gt;Engineering&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;category&lt;/code&gt;. Видим что их количество 91&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;logstah&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Engineering&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Например выведем все документы со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;logstah&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;access&lt;/code&gt; в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt; и значением &lt;code class=&quot;highlighter-rouge&quot;&gt;Releases&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;category&lt;/code&gt;. Видим что их количество 21&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Elastic&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Releases&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;access&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;must_not&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Оператор &lt;strong&gt;must not&lt;/strong&gt; означает что в результатах поиска не должно присутствовать переданное значение. В примере ищем поле  &lt;code class=&quot;highlighter-rouge&quot;&gt;content &lt;/code&gt; с присутствующим словом &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;category&lt;/code&gt; с отсутствующим значением &lt;code class=&quot;highlighter-rouge&quot;&gt;News&lt;/code&gt; ( всё корме &lt;code class=&quot;highlighter-rouge&quot;&gt;News&lt;/code&gt; ).&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Elastic&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must_not&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;News&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;should&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Should&lt;/strong&gt; в отличии от первых двух не исключает никаких документов из вывода. Он просто сортирует  вывод в зависимости от запроса.&lt;/p&gt;

&lt;p&gt;Например выведем документы с полем &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt;, в котором находится слово &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt;. В выводе видим первые документы имеют разных &lt;code class=&quot;highlighter-rouge&quot;&gt;author&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Elastic&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Например выведем документы с полем &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt;, в котором находится слово &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt; и полем &lt;code class=&quot;highlighter-rouge&quot;&gt;author&lt;/code&gt; используя &lt;code class=&quot;highlighter-rouge&quot;&gt;should&lt;/code&gt;. В выводе видим первые документы имеют &lt;code class=&quot;highlighter-rouge&quot;&gt;author&lt;/code&gt; которого мы указали в поиске &lt;code class=&quot;highlighter-rouge&quot;&gt;Amy White&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Elastic&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;should&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match_phrase&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Amy White&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для &lt;strong&gt;should&lt;/strong&gt; можно задать параметр &lt;strong&gt;minimum_should_match&lt;/strong&gt;, который задаёт количество совпадений при многоразовым &lt;strong&gt;should&lt;/strong&gt; ( по умолчанию 0 для  многоразовым &lt;strong&gt;should&lt;/strong&gt; и 1 для одного  &lt;strong&gt;should&lt;/strong&gt; ).  Если его выставить, то уже будет фильтрация документов.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET blogs/_search
{
  &quot;_source&quot;: {
    &quot;includes&quot;: [&quot;author&quot;,&quot;title&quot;]
  },
  &quot;query&quot;: {
    
    &quot;bool&quot;: {
      &quot;must&quot;: [
        {
          &quot;match&quot;: {
            &quot;content&quot;: &quot;Elastic&quot;
          }
        }
      ]
      , &quot;should&quot;: [
        {&quot;match&quot;: { &quot;title&quot;: &quot;stack&quot; }},
        {&quot;match&quot;: { &quot;title&quot;: &quot;query&quot; }},
        {&quot;match&quot;: { &quot;title&quot;: &quot;speed&quot; }}
      ]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET blogs/_search
{
  &quot;_source&quot;: {
    &quot;includes&quot;: [&quot;author&quot;,&quot;title&quot;]
  },
  &quot;query&quot;: {
    
    &quot;bool&quot;: {
      &quot;must&quot;: [
        {
          &quot;match&quot;: {
            &quot;content&quot;: &quot;Elastic&quot;
          }
        }
      ]
      , &quot;should&quot;: [
        {&quot;match&quot;: { &quot;title&quot;: &quot;stack&quot; }},
        {&quot;match&quot;: { &quot;title&quot;: &quot;query&quot; }},
        {&quot;match&quot;: { &quot;title&quot;: &quot;speed&quot; }}
      ],
      &quot;minimum_should_match&quot;: 1
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;filter&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Filter&lt;/code&gt; также исключает документы из вывода и в общем отвечает на вопрос да или нет. Т.е допустим вы хотите получить документы находящиеся в интервале какого-то времени. Соответственно вы задаёте данный интервал и если интервал совпадает ( ответ ДА ), то документ будет выведен.&lt;/p&gt;

&lt;p&gt;Например выведем все документы со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt; в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt;. Видим что их количество 716.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;publish_date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Elastic&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Например выведем все документы со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt; в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt; и дата публикации &lt;code class=&quot;highlighter-rouge&quot;&gt;publish_date&lt;/code&gt; позднее чем  &lt;code class=&quot;highlighter-rouge&quot;&gt;2017-05-24&lt;/code&gt;. Видим что их количество 166.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;blogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;publish_date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Elastic&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;range&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;publish_date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lte&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2017-05-24&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Итоговая таблица что на что влияет&lt;/p&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;оператор&lt;/th&gt;
      &lt;th&gt;влияет на hits&lt;/th&gt;
      &lt;th&gt;влияет на _score&lt;/th&gt;
      &lt;th&gt;фильтрует вывод&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;must&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
      &lt;td&gt;N&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;must_not&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
      &lt;td&gt;N&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;should&lt;/td&gt;
      &lt;td&gt;N&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
      &lt;td&gt;N&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;filter&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
      &lt;td&gt;N&lt;/td&gt;
      &lt;td&gt;Y&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Tue, 18 Jan 2022 06:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-bool-query</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-bool-query</guid>
        
        <category>elasticsearch</category>
        
        <category>elk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Wallpapers - Обои для рабочего стола (Топ за 2021)</title>
        <description>&lt;p&gt;Ну и раз уже прошёл 2021 год я решил создать тему с обоями от &lt;a href=&quot;https://www.smashingmagazine.com/category/wallpapers/page/2/&quot;&gt;Smashing Magazine&lt;/a&gt; за 2021 год.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://disk.yandex.kz/d/lw2xaQeGurGGyQ&quot;&gt;скачать без календаря&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://disk.yandex.kz/d/l3G67D7ot1VR_A&quot;&gt;скачать с календарём&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Jan 2022 00:54:39 +0600</pubDate>
        <link>http://www.tipoit.kz/walpappers-top-of-2021</link>
        <guid isPermaLink="true">http://www.tipoit.kz/walpappers-top-of-2021</guid>
        
        <category>windows</category>
        
        <category>wallpapers</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>Wallpapers - Обои для рабочего стола (Январь 2022)</title>
        <description>&lt;p&gt;На дворе уже январь 2022 года. И если вам также хочется новых картинок на вашем рабочем столе, то предлагаю вам тему для Windows, в которой обои от &lt;a href=&quot;https://www.smashingmagazine.com/2021/12/desktop-wallpaper-calendars-january-2022/&quot;&gt;Smashing Magazine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://disk.yandex.kz/d/fwDGscvQzi-8Xg&quot;&gt;скачать&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;соцсети&quot;&gt;Соцсети&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://t.me/tipoitkz&quot;&gt;Группа в Telegram&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Jan 2022 00:54:39 +0600</pubDate>
        <link>http://www.tipoit.kz/walpappers</link>
        <guid isPermaLink="true">http://www.tipoit.kz/walpappers</guid>
        
        <category>windows</category>
        
        <category>wallpapers</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>YubiKey - Получение идентификатора токена (Token ID)</title>
        <description>&lt;p&gt;На самом деле всё просто каждый &lt;code class=&quot;highlighter-rouge&quot;&gt;Ubikey&lt;/code&gt; может генерировать &lt;a href=&quot;https://www.tipoit.kz/yubikey-enable-2fa-in-linux&quot;&gt;OTP&lt;/a&gt;, в котором как раз и содержится &lt;strong&gt;Token ID&lt;/strong&gt;. &lt;strong&gt;Token ID&lt;/strong&gt; - это первые 12 символов &lt;code class=&quot;highlighter-rouge&quot;&gt;OTP&lt;/code&gt;, который генерирует &lt;code class=&quot;highlighter-rouge&quot;&gt;Ubikey&lt;/code&gt;. Т.е. проще всего сгенерировать &lt;code class=&quot;highlighter-rouge&quot;&gt;OTP&lt;/code&gt; используя &lt;code class=&quot;highlighter-rouge&quot;&gt;Ubikey&lt;/code&gt; в текстовый редактор или в терминал и отсчитать от начала 12 символов, и вы получите ваш &lt;code class=&quot;highlighter-rouge&quot;&gt;Ubikey&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Ну и если вы не хотите отсчитывать, можно воспользоваться терминалом:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;read &lt;/span&gt;opt; &lt;span class=&quot;nv&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt;  &lt;span class=&quot;nv&quot;&gt;$opt&lt;/span&gt; | cut -c1-12&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;После вы генерируете &lt;code class=&quot;highlighter-rouge&quot;&gt;OTP&lt;/code&gt; используя ваш &lt;code class=&quot;highlighter-rouge&quot;&gt;Ubikey&lt;/code&gt;, например, у меня это сканер по центру. В итоге в переменную &lt;strong&gt;ID&lt;/strong&gt; запишется ваш &lt;strong&gt;Token ID&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$ID&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ccytuctkoplk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 04 Jan 2022 21:47:39 +0600</pubDate>
        <link>http://www.tipoit.kz/yubikey-get-token-id</link>
        <guid isPermaLink="true">http://www.tipoit.kz/yubikey-get-token-id</guid>
        
        <category>security</category>
        
        <category>YubiKey</category>
        
        
      </item>
    
      <item>
        <title>Yubico OTP - Включаем двухфакторную аутентификацию в Linux</title>
        <description>&lt;p&gt;&lt;strong&gt;OTP&lt;/strong&gt; расшифровывается как &lt;strong&gt;One  Time  Password&lt;/strong&gt;, ну и если кто-то нуждается в переводе на русский язык: &lt;strong&gt;одноразовый пароль&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Одноразовый пароль&lt;/strong&gt; действителен только лишь для одного сеанса аутентификации, т.е. после того как вы его использовали, например, для входа в систему он уже становится неактуальным. Также актуальность временного пароля может ограничиваться временем активности пароля.&lt;/p&gt;

&lt;p&gt;Основным преимуществом &lt;strong&gt;одноразового пароля&lt;/strong&gt; по сравнению с обычными является то что его &lt;strong&gt;нельзя использовать повторно&lt;/strong&gt;. Т.е. даже если такой пароль будет перехвачен злоумышленником, то он не сможет использовать его повторно, например, выполняя команды, требующие повторного ввода пароля.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;yubico--otp&quot;&gt;Yubico  OTP&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;О том, что такое &lt;code class=&quot;highlighter-rouge&quot;&gt;Yubico&lt;/code&gt; я уже писал ранее, можно ознакомиться &lt;a href=&quot;https://www.tipoit.kzwhat-is-yubikey&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yubico  OTP&lt;/strong&gt; - это простой, но безопасный механизм аутентификации, который поддерживается всеми выпускаемыми версиями &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey&lt;/code&gt;. &lt;strong&gt;Yubico  OTP&lt;/strong&gt; может использоваться как второй фактор в схеме двухфакторной аутентификации или сам по себе, обеспечивая однофакторную аутентификацию, т.е. как основное средство аутентификации, как и дополнительное.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;yubicloud&quot;&gt;YubiCloud&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;YubiCloud&lt;/strong&gt; - это веб-служба от компании &lt;code class=&quot;highlighter-rouge&quot;&gt;Yubico&lt;/code&gt; для проверки одноразовых паролей. Перед использованием &lt;strong&gt;YubiCloud&lt;/strong&gt; вам необходимо получить &lt;code class=&quot;highlighter-rouge&quot;&gt;API ключ&lt;/code&gt;. Также для людей, которые не доверяют серверам в интернете, которые обслуживают не они есть возможность развернуть свои сервера &lt;strong&gt;YubiCloud&lt;/strong&gt;, подробнее по &lt;a href=&quot;https://developers.yubico.com/Software_Projects/Yubico_OTP/YubiCloud_Validation_Servers/&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;способы-применения&quot;&gt;Способы применения&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Есть возможность применить &lt;strong&gt;OTP&lt;/strong&gt; используя 2 способа:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Плагины интеграции для &lt;code class=&quot;highlighter-rouge&quot;&gt;Windows  login&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;FreeRADIUS&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Wordpress&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;phpBB&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;PAM&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Библиотеки для языков программирования, используемые для создания собственной интеграции.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;получаем-api&quot;&gt;Получаем API&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Переходим &lt;a href=&quot;https://upgrade.yubico.com/getapikey/&quot;&gt;сюда&lt;/a&gt; и заполняем поля. Для того чтобы заполнить &lt;strong&gt;YubiKey  OTP&lt;/strong&gt; нужно активировать &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey&lt;/code&gt;, чтобы он вставил значение. В итоге мы должны получить наши &lt;code class=&quot;highlighter-rouge&quot;&gt;Client  ID&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;Secret  key&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;применение&quot;&gt;Применение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;1.Первым делом поставим пакет &lt;code class=&quot;highlighter-rouge&quot;&gt;pam_yubico&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install epel-release -y
sudo dnf install pam_yubico -y

sudo apt update
sudo apt install libpam-yubico -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;2.Создаём файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/yubico-mapping&lt;/code&gt; и добавляем в него тех пользователей, которые должны иметь возможность логиниться при помощи &lt;code class=&quot;highlighter-rouge&quot;&gt;yubico&lt;/code&gt; в формате &lt;code class=&quot;highlighter-rouge&quot;&gt;пользователь:yubikey токен&lt;/code&gt; (только первые 12 символов). Для того чтобы получить токен просто нажимаем на сканер &lt;code class=&quot;highlighter-rouge&quot;&gt;yubikey&lt;/code&gt;. Также вы можете добавить пользователю несколько ключей, просто используя строку типа &lt;code class=&quot;highlighter-rouge&quot;&gt;пользователь:yubikey токен:yubikey токен2:yubikey токен3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Если не поняли как получить токен советую к прочтению &lt;a href=&quot;https://www.tipoit.kz/yubikey-get-token-id&quot;&gt;статью&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/yubico-mapping
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;admin:crtyccjflici&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;test:crtyccjflici&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;3.Редактируем &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/pam.d/sshd&lt;/code&gt;,  &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt;  мы получили когда регистрировались на сайте.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/pam.d/sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;auth&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;required&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pam_yubico.so&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1624&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authfile=/etc/yubico-mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;4.Если хотите логиниться только используя yubikey&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/pam.d/sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#@include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;common-auth&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;если&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;UBUNTU&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#auth&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;substack&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password-auth&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auth&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;required&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pam_yubico.so&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1624&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authfile=/etc/yubico-mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;5.Настраиваем  &lt;code class=&quot;highlighter-rouge&quot;&gt;SELINUX&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setsebool -P authlogin_yubikey on
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;6.Пробуем залогиниться&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh  &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;@192.168.0.132
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;YubiKey&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`test':&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;permission-denied-please-try-again&quot;&gt;Permission denied, please try again.&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Может сложится так что у вас не будет запроса &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey&lt;/code&gt; при попытке залогиниться на конечный хост, а будет только запрос пароля, после ввода которого вы просто получите ошибку &lt;strong&gt;Permission denied, please try again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для решения этой проблемы выполняем следующее:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ChallengeResponseAuthentication&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Видео&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/bX6XdZ_jYsc&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Tue, 04 Jan 2022 21:30:39 +0600</pubDate>
        <link>http://www.tipoit.kz/yubikey-enable-2fa-in-linux</link>
        <guid isPermaLink="true">http://www.tipoit.kz/yubikey-enable-2fa-in-linux</guid>
        
        <category>security</category>
        
        <category>OTP</category>
        
        <category>Yubico</category>
        
        
      </item>
    
      <item>
        <title>ELK - Мониторинг json файла и failed to parse field of type [keyword]</title>
        <description>&lt;p&gt;Понадобилось отправлять данные с файла, который содержит данные в формате &lt;code class=&quot;highlighter-rouge&quot;&gt;json&lt;/code&gt; в &lt;strong&gt;elasticsearch&lt;/strong&gt;. Для этого конечно я решил использовать &lt;strong&gt;filebeat&lt;/strong&gt;, собственно он и служит для мониторинга файлов.&lt;/p&gt;

&lt;p&gt;Итоговая схема доставки: &lt;strong&gt;filebeat&lt;/strong&gt; -&amp;gt; &lt;strong&gt;logstash&lt;/strong&gt; -&amp;gt; &lt;strong&gt;elasticsearch&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;настройка-filebeat&quot;&gt;Настройка filebeat&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут в целом ничего сложного просто добавляем новый &lt;code class=&quot;highlighter-rouge&quot;&gt;input&lt;/code&gt; и задаём файл для мониторинга.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/filebeat/filebeat.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;filebeat.inputs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;paths:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/*.json&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;json.keys_under_root:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;json.overwrite_keys:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;json.add_error_key:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;json.expand_keys:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;processors:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add_tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;json-test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart filebeat
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;добавляем-данные-в-файл&quot;&gt;Добавляем данные в файл&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого просто создаём файл &lt;code class=&quot;highlighter-rouge&quot;&gt;json&lt;/code&gt; в каталоге &lt;code class=&quot;highlighter-rouge&quot;&gt;tmp&lt;/code&gt; и заполняем его данными. Для генерации тестовых данных можно воспользоваться &lt;a href=&quot;https://json-generator.com/#&quot;&gt;онлайн генератором&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ошибка-failed-to-parse-field-of-type-keyword&quot;&gt;Ошибка failed to parse field of type [keyword]&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;И вроде всё работает, и я получаю данные, т.е. документы появляются в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;: &lt;code class=&quot;highlighter-rouge&quot;&gt;filebeat-*&lt;/code&gt;, но только если я записываю в файл простой массив без вложенностей.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;balance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;$3,357.79&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;picture&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://placehold.it/32x32&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eyeColor&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;brown&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Murray Suarez&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;gender&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;male&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;company&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;IDEALIS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;murraysuarez@idealis.com&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;phone&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;+1 (833) 600-3849&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;986 Beverly Road, Gulf, Pennsylvania, 9249&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;registered&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2019-04-24T03:48:24 -06:00&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;greeting&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Hello, Murray Suarez! You have 10 unread messages.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;favoriteFruit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;apple&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но вот как только я пытаюсь проиндексировать уже сложный массив я получаю ошибку: &lt;strong&gt;failed to parse field [friends] of type [keyword]&lt;/strong&gt;. Ошибка появляется на этапе передачи документа в &lt;strong&gt;elasticsearch&lt;/strong&gt;, т.е. на последнем этапе.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;balance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;$1,325.77&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;picture&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://placehold.it/32x32&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eyeColor&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;green&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Janette Becker&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;gender&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;female&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;company&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TETAK&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;janettebecker@tetak.com&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;phone&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;+1 (908) 551-2528&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;address&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;106 Coleman Street, Frizzleburg, Iowa, 1948&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;registered&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2020-06-08T05:07:20 -06:00&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;greeting&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Hello, Janette Becker! You have 5 unread messages.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;favoriteFruit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;banana&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;friends&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Kristie Ewing&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Vance Wooten&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Clark Mcfadden&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение-failed-to-parse-field-of-type-keyword&quot;&gt;Решение failed to parse field of type [keyword]&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ошибка заключается в том, что &lt;strong&gt;elasticsearch&lt;/strong&gt; не может правильно сопоставить тип поля. И нужно вручную сопоставить тип поля в шаблоне (&lt;code class=&quot;highlighter-rouge&quot;&gt;mapping&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Но если там куча полей сопоставлять их вручную это ад. Один из вариантов упростить это, который я и выбрал будет просто проиндексировать всё в новый index в следствии чего автоматом сделается нормальный &lt;code class=&quot;highlighter-rouge&quot;&gt;mapping&lt;/code&gt;, который мы можем дальше использовать для шаблона.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/logstash/conf.d/output.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filebeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;[agent][type]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;json-test&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;[tags]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-1:9000&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-2:9000&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-3:9000&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;json-test-%{+YYYY.MM.dd}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;filebeat&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;agent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;json-test&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;not&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-1:9000&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-2:9000&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-3:9000&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filebeat-%{+YYYY.MM.dd}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге всё проиндексировалось, и я получил данные. Дальше можно получить весь &lt;code class=&quot;highlighter-rouge&quot;&gt;mapping&lt;/code&gt; и уже дальше его использовать в своём &lt;code class=&quot;highlighter-rouge&quot;&gt;template&lt;/code&gt;, ну а так как мне всё равно нужен был новый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; меня всё устраивает.&lt;/p&gt;

&lt;p&gt;Если проанализировать вывод ниже понятно, что &lt;strong&gt;elasticsearch&lt;/strong&gt; пытался создать поле &lt;code class=&quot;highlighter-rouge&quot;&gt;friends&lt;/code&gt; с типом &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;, тогда как тип должен быть &lt;code class=&quot;highlighter-rouge&quot;&gt;long&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET json-test-2021.12.08/_mapping
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;json-test-2021.12.08&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@version&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;address&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;agent&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ephemeral_id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;hostname&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;balance&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;company&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ecs&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;eyeColor&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;favoriteFruit&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;friends&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;gender&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;greeting&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;architecture&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;containerized&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;boolean&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;hostname&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ip&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mac&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;os&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;codename&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;kernel&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;platform&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;input&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;log&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;file&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;offset&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;phone&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;picture&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;registered&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 08 Dec 2021 20:51:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-json-file-monitoring-and-failed-to-parse-field-of-type-keyword</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-json-file-monitoring-and-failed-to-parse-field-of-type-keyword</guid>
        
        <category>elkstack</category>
        
        <category>filebeat</category>
        
        
      </item>
    
      <item>
        <title>Vault - Используем Api с curl</title>
        <description>&lt;p&gt;У самого &lt;strong&gt;Vault&lt;/strong&gt; есть веб версия, где можно создавать, удалять или получать секреты. Также можно использовать одноименную утилиту &lt;strong&gt;vault&lt;/strong&gt; на самом сервере.&lt;/p&gt;

&lt;p&gt;Но вот вы дошли до того что решили использовать &lt;strong&gt;vault&lt;/strong&gt; в скриптах. И что искать утилиты на &lt;code class=&quot;highlighter-rouge&quot;&gt;github&lt;/code&gt;? Всё проще у &lt;strong&gt;vault&lt;/strong&gt; есть &lt;code class=&quot;highlighter-rouge&quot;&gt;api&lt;/code&gt; и в этой статье я рассмотрю некоторые из них, самые распространенные.&lt;/p&gt;

&lt;p&gt;Для всех примеров я буду использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;curl&lt;/code&gt;, так как он стоит почти везде по умолчанию.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;vault-api---авторизация-и-получение-token&quot;&gt;Vault Api - Авторизация и получение token&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl --request POST https://vault.example.lan/v1/auth/userpass/login/username --data &lt;span class=&quot;s1&quot;&gt;'{&quot;password&quot;: &quot;dd43deqedd3we&quot;}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если всё правильно, то получаем вывод типа:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;request_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;96139453-389b-7581-686b-a1dee32381c6&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lease_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;renewable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lease_duration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;wrap_info&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;warnings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;auth&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;client_token&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s.dsfdsfsdfsdfew543&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;accessor&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;dwwerewrwerew&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;policies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;token_policies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;identity_policies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;metadata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lease_duration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2764800&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;renewable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;entity_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;861f20d9-a8f7-dabf-f081-321046ac74bd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;token_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;service&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;orphan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;username&lt;/strong&gt; - пользователь, под которым логинимся&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;client_token&lt;/strong&gt; - токен, который используется далее для манипуляций с секретами&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;vault-api---получаем-секреты&quot;&gt;Vault Api - Получаем секреты&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;header&lt;/code&gt; передаем наш &lt;code class=&quot;highlighter-rouge&quot;&gt;token&lt;/code&gt; полученный выше.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -H &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: s.dsfdsfsdfsdfew543&quot;&lt;/span&gt; -X GET https://vault.example.lan/v1/kv/postgresql/192.168.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;https://vault.example.lan/v1/kv/postgresql/192.168.0.1&lt;/strong&gt; - путь к секрету&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;При выполнении команда выдаст весь список секретов по пути и если вдруг вам нужно вытащить определённое значение, то можно воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;jq&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -H &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: s.dsfdsfsdfsdfew543&quot;&lt;/span&gt; -X GET https://vault.example.lan/v1/kv/postgresql/192.168.0.1 2&amp;gt;/dev/null | jq .data.my_key -r
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;my_value_only&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;vault-api---просмотр-списка-секретов&quot;&gt;Vault Api - Просмотр списка секретов&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если есть желание вывести список всех секретов по пути выполняем следующее.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -H &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: s.dsfdsfsdfsdfew543&quot;&lt;/span&gt; -X LIST https://vault.example.lan/v1/kv/postgresql/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;request_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;65d65a5e-699c-028a-0c13-b8094f0add19&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lease_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;renewable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lease_duration&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keys&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;192.168.0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]},&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;wrap_info&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;warnings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;auth&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;vault-api---добавляем-секреты&quot;&gt;Vault Api - Добавляем секреты&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -H &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: s.dsfdsfsdfsdfew543&quot;&lt;/span&gt; -H &lt;span class=&quot;s2&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt; -X POST -d &lt;span class=&quot;s1&quot;&gt;'{&quot;value&quot;:&quot;bar&quot;}'&lt;/span&gt; https://vault.example.lan/v1/kv/postgresql/192.168.0.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;’{“value”:”bar”}’&lt;/strong&gt; - значение секрета&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;https://vault.example.lan/v1/kv/postgresql/192.168.0.2&lt;/strong&gt; - путь к секрету&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;vault-api---удаляем-секреты&quot;&gt;Vault Api - Удаляем секреты&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -H &lt;span class=&quot;s2&quot;&gt;&quot;X-Vault-Token: s.dsfdsfsdfsdfew543&quot;&lt;/span&gt; -X DELETE https://vault.example.lan/v1/kv/postgresql/192.168.0.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</description>
        <pubDate>Wed, 01 Dec 2021 05:56:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vault-use-vault-api</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vault-use-vault-api</guid>
        
        <category>linux</category>
        
        <category>vault</category>
        
        
      </item>
    
      <item>
        <title>Netflix как TikTok?</title>
        <description>&lt;p&gt;Netflix прямо сейчас тестирует функции показа коротких видео на подобии TikTok. Новый функционал рассчитан на молодую аудиторию, т.е. детей. Новый функционал назвали Kids Clips.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.bloomberg.com/news/articles/2021-11-09/netflix-to-roll-out-tiktok-like-short-clip-feature-aimed-at-kids&quot;&gt;Bloomberg&lt;/a&gt; утверждает, что эта новая функция будет доступна некоторым пользователям уже на этой неделе. На данный момент новый функционал тестируется в приложении Netflix на iOS, которое состоит из коротких клипов вырезок из детских шоу и фильмов, которые находятся в самом Netflix.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Также Kids Clips воспроизводит видео не в вертикальном, а горизонтальном положении, что больше подойдёт, наверное, для планшетов и телевизоров. Хотя зная, что обычно детям включают телевизор упор на горизонтальное положение, выглядит логичным.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Компания планирует ежедневное добавление новых видео, состоящих из кусков существующего контента на платформе.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Пока никаких данных о официальном запуске от Netflix не было, так как функция всё еще находится на стадии тестирования. На данный момент новый функционал доступен на территории Канады, США, Ирландии и Латинскую Америки.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

</description>
        <pubDate>Wed, 10 Nov 2021 16:40:39 +0600</pubDate>
        <link>http://www.tipoit.kz/is-netflik-like-tiktok</link>
        <guid isPermaLink="true">http://www.tipoit.kz/is-netflik-like-tiktok</guid>
        
        <category>news</category>
        
        
      </item>
    
      <item>
        <title>MariaDB - Last_IO_Errno 1045</title>
        <description>&lt;p&gt;Наткнулся я тут недавно на ошибочку &lt;code class=&quot;highlighter-rouge&quot;&gt;Access denied for user '%s'@'%s'  (using password: %s)&lt;/code&gt; при репликации бд в режиме Active-Active.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;предыстория&quot;&gt;Предыстория&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Создал я значит репликацию &lt;code class=&quot;highlighter-rouge&quot;&gt;Active-Active&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;MariaDB&lt;/code&gt;. Всё находилось в докере, так как бд используется для &lt;code class=&quot;highlighter-rouge&quot;&gt;mailcow&lt;/code&gt;, а он как известно весь на докере. Делал реплику я для отказоустойчивости &lt;code class=&quot;highlighter-rouge&quot;&gt;mailcow&lt;/code&gt;, этакий кластер из 2 серверов.&lt;/p&gt;

&lt;p&gt;Так вот сделал я реплику, и она даже работала, но люблю я потестить перед вводом в прод так как не престаю удивляться странным багам в &lt;code class=&quot;highlighter-rouge&quot;&gt;opensource продуктах&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;И первый тест был простое выключение контейнера с &lt;code class=&quot;highlighter-rouge&quot;&gt;mariadb&lt;/code&gt; и последующее включение. Зеркало оставшегося контейнера конечно ругалось что реплика недоступна, но как только первый контейнер подымался репликация работала как надо. И первый этап теста пройден.&lt;/p&gt;

&lt;p&gt;Остался второй этап, который судя по первому ничего плохого и не мог предвещать. А заключался второй тест в простой перезагрузке хоста с контейнерами, т.е. по сути такой же рестарт контейнера. Ну вот я перезагрузил и в логах вижу это &lt;code class=&quot;highlighter-rouge&quot;&gt;Access denied for user '%s'@'%s'  (using password: %s)&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;что-за&quot;&gt;Что за?&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как это пользователь не может подключиться? Ладно, проверяем и как бы всё работает.&lt;/p&gt;

&lt;p&gt;Читаем  документацию  и  видим  вот  такую  строчку &lt;code class=&quot;highlighter-rouge&quot;&gt;The password used for a replication user account in a &lt;/code&gt;CHANGE MASTER TO&lt;code class=&quot;highlighter-rouge&quot;&gt; statement is limited to 32 characters in length&lt;/code&gt;. Ну ладно захотелось вам ограничить, но какого чёрта это всё работает при создании реплики, да и после перезапуска контейнера? А вылезает только после перезагрузки самого хоста, да еще и ошибка такая информативная.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение&quot;&gt;Решение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну как бы всё просто пароль пользователя, который используется для репликации должен быть не больше 32 символов, а лучше и поменьше.&lt;/p&gt;
</description>
        <pubDate>Tue, 09 Nov 2021 06:15:39 +0600</pubDate>
        <link>http://www.tipoit.kz/mariadb-Last_IO_Errno-1045</link>
        <guid isPermaLink="true">http://www.tipoit.kz/mariadb-Last_IO_Errno-1045</guid>
        
        <category>linux</category>
        
        <category>mariadb</category>
        
        <category>mysql</category>
        
        
      </item>
    
      <item>
        <title>Linux - Управление разделами HDD используя Parted</title>
        <description>&lt;p&gt;&lt;strong&gt;Parted&lt;/strong&gt; - встроенная утилита у ОС семейства &lt;code class=&quot;highlighter-rouge&quot;&gt;RedHat&lt;/code&gt; благодаря которой вы можете создавать, удалять и изменять разделы н жёстком диске. Да там всё также присутствует &lt;code class=&quot;highlighter-rouge&quot;&gt;fdisk&lt;/code&gt;, но &lt;code class=&quot;highlighter-rouge&quot;&gt;RedHat &lt;/code&gt;рекомендует использовать &lt;strong&gt;parted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для простора информации о диске:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vda print
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;h2 id=&quot;интерактивный-режим&quot;&gt;Интерактивный режим&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также, как и в &lt;code class=&quot;highlighter-rouge&quot;&gt;fdisk&lt;/code&gt; вы можете зайти в интерактивный режим для этого просто вводим команду &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo parted /dev/vda&lt;/code&gt;, где уже дальше можно выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;help&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для выхода из интерактивного режима пишем &lt;code class=&quot;highlighter-rouge&quot;&gt;quit&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;единицы-измерения-размера&quot;&gt;Единицы измерения размера&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;В общем и целом, утилита довольно таки хорошо сама подбирает единицу измерения (KB, MB, TB). Но если вам хочется вывести всё в одном формате, то можно воспользоваться опцией &lt;strong&gt;unit&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vda unit OPTION print
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Где &lt;code class=&quot;highlighter-rouge&quot;&gt;OPTION&lt;/code&gt; может принимать следующие значения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;s&lt;/strong&gt; - вывод в секторах&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;B&lt;/strong&gt; - вывод в байтах&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MiB, GiB, TiB&lt;/strong&gt; - мибибайты, гигибайты и тибибайты соответственно&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MB, GB, TB&lt;/strong&gt; - мегабайт, гигабайт, терабайт&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;1-создаём-таблицу-разделов-на-новом-диске&quot;&gt;1. Создаём таблицу разделов на новом диске&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Про сами таблицы разделов вы можете почитать тут если вам вдруг интересно или вы про них ничего не знаете.&lt;/p&gt;

&lt;p&gt;Для того чтобы создать &lt;code class=&quot;highlighter-rouge&quot;&gt;MBR&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vdd mklabel msdos
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы создать &lt;code class=&quot;highlighter-rouge&quot;&gt;GPT&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vdd mklabel gpt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;2-создаём-раздел&quot;&gt;2. Создаём раздел&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Есть небольшой минус по сравнению с утилитой &lt;code class=&quot;highlighter-rouge&quot;&gt;fdisk&lt;/code&gt; тут начало и конец раздела нужно указывать руками, т.е. подсказки о том где начинается пустота вам не дадут.&lt;/p&gt;

&lt;p&gt;Для создания раздела на диске с &lt;code class=&quot;highlighter-rouge&quot;&gt;MBR&lt;/code&gt; используется &lt;strong&gt;mkpart&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vdd mkpart primary xfs 20MB 1000MB
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;xfs - тип файловой системы&lt;/li&gt;
  &lt;li&gt;20MB - начало раздела&lt;/li&gt;
  &lt;li&gt;1000MB - конец раздела&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;И в итоге у вас появится раздел &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/vdd1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для создания раздела на диске с &lt;code class=&quot;highlighter-rouge&quot;&gt;GPT&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vdd mkpart partition_name xfs 20MB 1000MB
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;3-создание-файловой-системы&quot;&gt;3. Создание файловой системы&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;После создания раздела нужно и создать на нём файловую систему, для этого используем &lt;strong&gt;mkfs&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkfs.xfs /dev/vdd1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для получения полного списка файловых систем введите в консоли &lt;strong&gt;mkfs.&lt;/strong&gt; и нажмите &lt;code class=&quot;highlighter-rouge&quot;&gt;TAB&lt;/code&gt; несколько раз.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;4-монтирование-нового-раздела&quot;&gt;4. Монтирование нового раздела&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы получить доступ к новому разделу нужно прикрепить его к папке используя команду &lt;strong&gt;mount&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Например, создадим папку &lt;code class=&quot;highlighter-rouge&quot;&gt;new_part&lt;/code&gt; и сделаем на нее &lt;strong&gt;mount&lt;/strong&gt; нового раздела.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir /new_part 
sudo mount  /dev/vdd1 /new_part 
df -h
sudo mount | grep /dev/vdd1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но это не совсем правильный способ, и он годится только если вам нужен новый раздел на время, так как после перезагрузки сервера он пропадёт и папка &lt;code class=&quot;highlighter-rouge&quot;&gt;/new_part&lt;/code&gt; будет снова пустая.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;5-постоянное-монтирование-нового-раздела&quot;&gt;5. Постоянное монтирование нового раздела&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы наш раздел был виден и после перезагрузки сервера нужно сделать &lt;strong&gt;mount&lt;/strong&gt; используя файл &lt;strong&gt;/etc/fstab&lt;/strong&gt;. При загрузке ОС ядро делает автоматический &lt;strong&gt;mount&lt;/strong&gt; всех разделов описанных в этом файле.&lt;/p&gt;

&lt;p&gt;Будьте осторожны с манипуляциями в этом файле. Если вы напишите что-то не так и перезагрузите сервер он &lt;strong&gt;запустится в режиме emergency&lt;/strong&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Первое поле&lt;/th&gt;
      &lt;th&gt;Второе поле&lt;/th&gt;
      &lt;th&gt;Третье поле&lt;/th&gt;
      &lt;th&gt;Четвертое поле&lt;/th&gt;
      &lt;th&gt;Пятое поле&lt;/th&gt;
      &lt;th&gt;Шестое поле&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Содержит UUID диска или сетевой путь&lt;/td&gt;
      &lt;td&gt;Папка куда монтировать&lt;/td&gt;
      &lt;td&gt;Указывает тип файловой системы&lt;/td&gt;
      &lt;td&gt;принимает разные значения (подробнее в &lt;code class=&quot;highlighter-rouge&quot;&gt;man fstab&lt;/code&gt;)&lt;/td&gt;
      &lt;td&gt;выставляется в 1 если нужно использовать для dump&lt;/td&gt;
      &lt;td&gt;указывает в каком порядке проверять проверять файловую систему при загрузке ОС (обычно 0 для xfs и 1 для ext)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;fs_spec&lt;/td&gt;
      &lt;td&gt;fs_file&lt;/td&gt;
      &lt;td&gt;fs_vfstype&lt;/td&gt;
      &lt;td&gt;fs_mntops&lt;/td&gt;
      &lt;td&gt;fs_freq&lt;/td&gt;
      &lt;td&gt;fs_passno&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Например, создадим папку &lt;code class=&quot;highlighter-rouge&quot;&gt;new_part&lt;/code&gt; и сделаем на нее &lt;strong&gt;mount&lt;/strong&gt; нового раздела.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Получаем &lt;strong&gt;UUID нашего раздела&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo blkid /dev/vdd1
sudo lsblk --fs
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем запись с нашим разделом
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/fstab 
&lt;span class=&quot;sb&quot;&gt;```&lt;/span&gt;json
&lt;span class=&quot;nv&quot;&gt;UUID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3cd0d4ca-93f6-423b-a469-70ab2b10b667 /new_part xfs defaults 0 0
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Делаем &lt;strong&gt;mount&lt;/strong&gt; заодно проверяя что мы нигде не ошиблись
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount -a 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем что &lt;strong&gt;mount&lt;/strong&gt; прошёл успешно
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;df -h
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;удаляем-раздел&quot;&gt;Удаляем раздел&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для удаления используем &lt;strong&gt;rm и номер раздела&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Получаем список всех разделов
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vdd print
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Удаляем ненужный нам раздел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/vdd rm 1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;udevadm-settle&quot;&gt;udevadm settle&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы в скриптах создаёте раздел и производите потом с ним какие-то манипуляции, то лучше после создания раздела использовать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;udevadm settle&lt;/code&gt;. Она в целом ничего не делает, а просто останавливает ваш скрипт пока создание раздела не завершится. Этакий &lt;strong&gt;timeout&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/xzsBJwD4Uso&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

</description>
        <pubDate>Thu, 28 Oct 2021 16:36:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-managing-partitiones-with-parted</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-managing-partitiones-with-parted</guid>
        
        <category>linux</category>
        
        <category>storage</category>
        
        <category>parted</category>
        
        
      </item>
    
      <item>
        <title>Postfix - Удаление исходящего сообщения с сервера</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;переходим-в-директорию-с-исходящими-письмами&quot;&gt;Переходим в директорию с исходящими письмами&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию письма хранятся в директории /var/vmail/.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /var/vmail/vmail1/mydomain.kz/i/n/f/info-2019.04.15.16.54.50/Maildir/.Sent/cur
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;поиск-необходимого-письма&quot;&gt;Поиск необходимого письма&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя простой  &lt;code class=&quot;highlighter-rouge&quot;&gt;grep&lt;/code&gt; ищем письмо, содержащее интересующий нас контент.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;grep -rnw . -e &lt;span class=&quot;s1&quot;&gt;'dasdas@ergerger.com'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;удаляем-письмо&quot;&gt;Удаляем письмо&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;rm ./1635235147.M118537P31668.mail.mydomain.kz&lt;span class=&quot;se&quot;&gt;\,&lt;/span&gt;S&lt;span class=&quot;se&quot;&gt;\=&lt;/span&gt;2060231&lt;span class=&quot;se&quot;&gt;\,&lt;/span&gt;W&lt;span class=&quot;se&quot;&gt;\=&lt;/span&gt;2087152&lt;span class=&quot;se&quot;&gt;\:&lt;/span&gt;2&lt;span class=&quot;se&quot;&gt;\,&lt;/span&gt;S
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 26 Oct 2021 20:36:39 +0600</pubDate>
        <link>http://www.tipoit.kz/postfix-delete-message-from-server</link>
        <guid isPermaLink="true">http://www.tipoit.kz/postfix-delete-message-from-server</guid>
        
        <category>postfix</category>
        
        <category>mail</category>
        
        
      </item>
    
      <item>
        <title>Systemd - Operation not permitted</title>
        <description>&lt;p&gt;Можете попасть на такую ошибку при создании сервиса systemd.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;причина-ошибки&quot;&gt;Причина ошибки&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Дело в том, что вы возможно используете точки в пути для WorkingDirectory, например /etc/./. Не знаю зачем вам это понадобилось, но разработчики любят костыли.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;устраняем&quot;&gt;Устраняем&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Редактируем ваш файл sysytemd и пишем правильный путь.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/systemd/system/my-service.service
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;WorkingDirectory=/etc/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl start my-service
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 01 Oct 2021 16:18:39 +0600</pubDate>
        <link>http://www.tipoit.kz/systemd-operation-not-permitted</link>
        <guid isPermaLink="true">http://www.tipoit.kz/systemd-operation-not-permitted</guid>
        
        <category>linux</category>
        
        <category>systemd</category>
        
        
      </item>
    
      <item>
        <title>Linux - Управление разделами SWAP</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;размер-для-swap&quot;&gt;Размер для SWAP&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ниже приведены рекомендации по размерам для &lt;strong&gt;SWAP&lt;/strong&gt; в зависимости от ситуации.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;ОЗУ&lt;/th&gt;
      &lt;th&gt;SWAP&lt;/th&gt;
      &lt;th&gt;SWAP (если гибернация)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2ГБ или меньше&lt;/td&gt;
      &lt;td&gt;ОЗУ * 2&lt;/td&gt;
      &lt;td&gt;ОЗУ * 3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;от 2ГБ до 8ГБ&lt;/td&gt;
      &lt;td&gt;ОЗУ&lt;/td&gt;
      &lt;td&gt;ОЗУ * 2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;от 8ГБ до 64ГБ&lt;/td&gt;
      &lt;td&gt;меньше 4ГБ&lt;/td&gt;
      &lt;td&gt;1.5 от объёма ОЗУ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;больше 64ГБ&lt;/td&gt;
      &lt;td&gt;меньше 4ГБ&lt;/td&gt;
      &lt;td&gt;не рекомендуется использовать гибернацию&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Во время гибернации перед тем как заснуть ваш компьютер перемещает данные с &lt;code class=&quot;highlighter-rouge&quot;&gt;ОЗУ&lt;/code&gt; в &lt;strong&gt;SWAP&lt;/strong&gt;. Ну а когда вы его включаете после гибернации то наоборот со &lt;strong&gt;SWAP&lt;/strong&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;ОЗУ&lt;/code&gt;. Поэтому мы видим что в колонке с гибернацией &lt;strong&gt;SWAP&lt;/strong&gt; всегда больше чем &lt;code class=&quot;highlighter-rouge&quot;&gt;ОЗУ&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;создание-раздела-swap&quot;&gt;Создание раздела SWAP&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для создания раздела &lt;strong&gt;SWAP&lt;/strong&gt; мы будем использовать уже нам знакомую утилиту &lt;code class=&quot;highlighter-rouge&quot;&gt;parted&lt;/code&gt;, о которой я писал ранее.&lt;/p&gt;

&lt;p&gt;Для начала выбираем диск, на котором нужно создать раздел со &lt;strong&gt;SWAP&lt;/strong&gt;. Для примера создадим &lt;strong&gt;SWAP&lt;/strong&gt; раздел размером 4ГБ на диске &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdd&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;просмотр-всех-дисков-в-ос&quot;&gt;Просмотр всех дисков в ОС&lt;/h4&gt;
  &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted -l
&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Запись &lt;code class=&quot;highlighter-rouge&quot;&gt;Error: /dev/sdd: unrecognised disk label&lt;/code&gt; намекает как раз на то что это новый диск.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;создаём-таблицу-разделов-gpt-на-диске-sdd&quot;&gt;Создаём таблицу разделов gpt на диске sdd&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sdd mklabel gpt
sudo parted /dev/sdd p
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Table:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;создаём-сам-swap-раздел-на-диске-sdd&quot;&gt;Создаём сам SWAP раздел на диске sdd&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo parted /dev/sdd mkpart swap-part linux-swap 1MiB 4GiB
sudo parted /dev/sdd p
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если вы не поняли, что за что отвечает можно посмотреть видео в низу или вызвать &lt;code class=&quot;highlighter-rouge&quot;&gt;parted&lt;/code&gt; в интерактивном режиме &lt;code class=&quot;highlighter-rouge&quot;&gt;parted /dev/sdd mkpart&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если вы собираетесь это делать в скрипте не забываем о &lt;code class=&quot;highlighter-rouge&quot;&gt;udevadm settle&lt;/code&gt;, о нём я писал &lt;a href=&quot;https://www.tipoit.kz/linux-managing-partitiones-with-parted&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;форматируем-swap-раздел&quot;&gt;Форматируем SWAP раздел&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если обычный раздел мы форматируем, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;mkfs&lt;/code&gt; то в ситуации со &lt;strong&gt;SWAP&lt;/strong&gt; придётся использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;mkswap&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkswap /dev/sdd1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выводе нам сразу предоставят &lt;strong&gt;UUID раздела&lt;/strong&gt;, мелочь конечно, но приятно.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;82&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-849&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-444&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f-bc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-52748&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ffa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;88&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;активация-swap-раздела&quot;&gt;Активация SWAP раздела&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;На данный момент мы только создали этот &lt;strong&gt;SWAP&lt;/strong&gt; раздел, но наша система его еще не использует. Этим мы и займёмся в этой главе.&lt;/p&gt;

&lt;p&gt;Для активации используется команда &lt;code class=&quot;highlighter-rouge&quot;&gt;swapon&lt;/code&gt;, а для деактивации - &lt;code class=&quot;highlighter-rouge&quot;&gt;swapoff&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;временная-активация&quot;&gt;Временная активация&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Под временной активацией понимается что вы активируете &lt;strong&gt;SWAP&lt;/strong&gt; только для активной ОС, т.е. если ваш компьютер перезагружается созданный вами &lt;strong&gt;SWAP&lt;/strong&gt; снова становится неактивным (по аналогии с mount).&lt;/p&gt;

&lt;p&gt;Приступим к активации:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo free
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Swap:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2129916&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2129916&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo swapon /dev/sdd1
sudo free
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;Swap:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6323192&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6323192&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если есть желание проверить что активация действительно временная можно перезагрузить компьютер и снова выполнить &lt;code class=&quot;highlighter-rouge&quot;&gt;free&lt;/code&gt; (показывает информации по виртуальной памяти).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;постоянная-активация&quot;&gt;Постоянная активация&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь сделаем всё по уму, так как надо. Для того чтобы у нас не сбрасывалась активация делаем запись в &lt;code class=&quot;highlighter-rouge&quot;&gt;fstab&lt;/code&gt; как мы уже это делали в статье ранее про &lt;code class=&quot;highlighter-rouge&quot;&gt;parted&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;82&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-849&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-444&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f-bc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-52748&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ffa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;88&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo swapon -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Последняя команда сделает активацию всех записей в &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/fstab&lt;/code&gt; с меткой &lt;code class=&quot;highlighter-rouge&quot;&gt;swap&lt;/code&gt;. &lt;strong&gt;UUID раздела&lt;/strong&gt; нам вывела команда &lt;code class=&quot;highlighter-rouge&quot;&gt;mkswap&lt;/code&gt;, но если вы её потеряли не беда выполняем команду:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo lsblk --fs /dev/sdd1 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь при загрузке ОС активация &lt;strong&gt;SWAP&lt;/strong&gt; будет проходить автоматически.&lt;/p&gt;

&lt;p&gt;Второе значение стоит &lt;code class=&quot;highlighter-rouge&quot;&gt;swap&lt;/code&gt;, хотя если выполнить команду &lt;code class=&quot;highlighter-rouge&quot;&gt;man fstab&lt;/code&gt; там написано, что для &lt;strong&gt;SWAP&lt;/strong&gt; можно и none. Но &lt;code class=&quot;highlighter-rouge&quot;&gt;RedHat&lt;/code&gt; не рекомендует так делать так как становится труднее &lt;code class=&quot;highlighter-rouge&quot;&gt;debug&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;приоритет-swap-раздела&quot;&gt;Приоритет SWAP раздела&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если мы выполним команду &lt;code class=&quot;highlighter-rouge&quot;&gt;swapon&lt;/code&gt; то мы увидим что у нас несколько &lt;strong&gt;SWAP&lt;/strong&gt; разделов и у них есть приоритетность (поле PRIO). В данном случае первым стоит раздел, который был создан при установке ОС.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo swapon
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TYPE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SIZE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;USED&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PRIO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/dm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/dev/sdd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Представим ситуации что я хочу, чтобы сперва страницы памяти перемещались на раздел &lt;code class=&quot;highlighter-rouge&quot;&gt;/dev/sdd1&lt;/code&gt;. Для этого в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/fstab&lt;/code&gt; вместо &lt;code class=&quot;highlighter-rouge&quot;&gt;defaults&lt;/code&gt; я могу прописать &lt;code class=&quot;highlighter-rouge&quot;&gt;pri=1&lt;/code&gt;, или дописать к &lt;code class=&quot;highlighter-rouge&quot;&gt;defaults&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;82&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-849&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-444&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f-bc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-52748&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ffa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;88&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;swap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults,pri=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo swapoff /dev/sdd1
sudo swapon -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Или если используете команду &lt;code class=&quot;highlighter-rouge&quot;&gt;swapon&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo swapon /dev/sdd1 -p 1
sudo swapon -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/0G1GorSXcVA&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Sat, 25 Sep 2021 04:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/linux-managing-swap-devices</link>
        <guid isPermaLink="true">http://www.tipoit.kz/linux-managing-swap-devices</guid>
        
        <category>linux</category>
        
        <category>SWAP</category>
        
        
      </item>
    
      <item>
        <title>ELK - Обновление кластера</title>
        <description>&lt;p&gt;Версии &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; обозначаются как &lt;code class=&quot;highlighter-rouge&quot;&gt;X&lt;/code&gt;,&lt;code class=&quot;highlighter-rouge&quot;&gt; Y&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;Z&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;X&lt;/strong&gt; - основная (&lt;strong&gt;major&lt;/strong&gt;) версия&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Y&lt;/strong&gt; - второстепенная (&lt;strong&gt;minor&lt;/strong&gt;) версия&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Z&lt;/strong&gt; - это уровень исправления (&lt;strong&gt;patch&lt;/strong&gt;) или отладочного (&lt;strong&gt;maintenance&lt;/strong&gt;) выпуска&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В основной версии добавляются критические изменения и новые функции. Второстепенная версия добавляет предупреждения об устаревании и новые функции. Критические изменения происходят в экспериментальных функциях или из-за исправлений ошибок. &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; любит выпускать множество новых основных функций в второстепенных выпусках. Имейте в виду, что вы можете увидеть второстепенные версии, наполненные новыми функциями!&lt;/p&gt;

&lt;p&gt;Для примера возьмём версию &lt;code class=&quot;highlighter-rouge&quot;&gt;7.13.2&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;7 - X&lt;/li&gt;
  &lt;li&gt;13 - Y&lt;/li&gt;
  &lt;li&gt;2 - Z&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Совместимость версий&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; будет работать только с индексами, созданными в предыдущей основной версии. Например, &lt;code class=&quot;highlighter-rouge&quot;&gt;индекс&lt;/code&gt; в 6.x можно использовать в кластере 7.x, но индекс в 5.x нельзя использовать в кластере 7.x. &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; просто не запустится.&lt;/p&gt;

&lt;p&gt;Обновление с 5.x до 7.x требует, чтобы все ваши старые индексы были переиндексированы, чтобы ваши данные были приведены в соответствие с текущими стандартами текущего выпуска.&lt;/p&gt;

&lt;p&gt;Существует два возможных сценария, которые возникают при обновлении кластера:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Последовательное обновление не требует простоев и позволяет продолжать работать с кластером. Например, обновление с версии 7.1 до 7.2.&lt;/li&gt;
  &lt;li&gt;Полный перезапуск кластера вызывает некоторое время простоя и приводит к отключению всех узлов. Например, при обновлении с 6.2 до 7.1.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Помощник по обновлению (Upgrade Assistant)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Помощник по обновлению поможет вам подготовиться к обновлению. Это приложение &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;, которое определяет устаревшие настройки и поможет вам в процессе решения проблем. Рекомендуется использовать этот инструмент, чтобы определить состояние вашего кластера перед обновлением.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Подготовка к обновлению&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перед обновлением рекомендуется выполнить несколько вещей, которые нужно сделать для подготовки:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Проверьте &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/logging.html#deprecation-logging&quot;&gt;журналы устаревания&lt;/a&gt; - вы можете увидеть, используете ли вы какие-либо устаревшие функции, и они могут не существовать в следующей версии, до которой вы обновляетесь. Представляет из себя лог файл в папке логов &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;. Создаётся ежедневно и имеет максимальный размер в 1Гб.&lt;/li&gt;
  &lt;li&gt;Просмотрите критические изменения - убедитесь, что вы установили первую основную (major) версию (например, 7.0, 6.0, 5.0).&lt;/li&gt;
  &lt;li&gt;Резервное копирование данных - как обычно любой вендор рекомендует сперва сделать бэкап перед обновлением, в нашем случае &lt;a href=&quot;https://www.tipoit.kz/elk-backups&quot;&gt;snapshot&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Последовательное обновление&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже говорили о том, что такой вид обновления не требует перезапуска всего кластера. Смысл в том, что мы по очереди обновляем все узлы в кластере &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для обновления выполняем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Естественно сперва делаем &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Выключаем &lt;code class=&quot;highlighter-rouge&quot;&gt;shard allocation&lt;/code&gt; для реплик &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster.routing.allocation.enable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;primaries&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_flush/synced&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Останавливаем узел, который хотим обновить
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl stop elasticsearch.service
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если вы используете &lt;code class=&quot;highlighter-rouge&quot;&gt;machine learning&lt;/code&gt;, то выполните пункт 3 по &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html&quot;&gt;ссылке&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Скопируйте на всякий случай файл конфига &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Обновляем узел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum update elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверьте что в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt; ничего не изменилось, например вы могли использовать нестандартные &lt;code class=&quot;highlighter-rouge&quot;&gt;path.data&lt;/code&gt; и т.д.&lt;/li&gt;
  &lt;li&gt;Запускаем узел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl start elasticsearch.service
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ждём пока узел войдёт в кластер. Можно для просмотра воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;GET _cat/nodes&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Включаем  &lt;code class=&quot;highlighter-rouge&quot;&gt;shard allocation&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster.routing.allocation.enable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;all&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ждём пока состояние кластера будет зелёным &lt;code class=&quot;highlighter-rouge&quot;&gt;GET _cat/health&lt;/code&gt;. Если создались новые &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; то возможно статус вашего кластера будет жёлтым пока большинство узлов не обновится.&lt;/li&gt;
  &lt;li&gt;Повторить этап с 2 по 11 на всех остальных узлах кластера&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Для просмотра версии нод в клатере можно восспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;GET /_cat/nodes?h=ip,name,version&amp;amp;v=true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для просмотра всех активных нод в кластере можно восспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;GET _cat/nodes?v=true&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Major&lt;/strong&gt; и &lt;strong&gt;minor&lt;/strong&gt; версии содержат много новых функций&lt;/li&gt;
  &lt;li&gt;В основном &lt;strong&gt;Major&lt;/strong&gt; версии включают критические изменения&lt;/li&gt;
  &lt;li&gt;Последовательное обновление позволяет перезапускать узлы в кластере по одному (без простоев)&lt;/li&gt;
  &lt;li&gt;Полный перезапуск кластера обычно ускоряет обновление, хотя для этого требуется отключить все узлы перед обновлением (приводит к простою)&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 21 Sep 2021 05:17:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-cluster-update</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-cluster-update</guid>
        
        <category>elkstack</category>
        
        <category>updates</category>
        
        
      </item>
    
      <item>
        <title>ELK - [UNABLE_TO_GET_ISSUER_CERT_LOCALLY]</title>
        <description>&lt;p&gt;Если вы отправляете запросы в elk на сайт с самоподписаным сертификатом или куда еще лучше между вами есть MITM государственный (кто с KZ тот поймёт) то вы можете получить ошибку &lt;strong&gt;[UNABLE_TO_GET_ISSUER_CERT_LOCALLY] unable to get local issuer certificate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;В моём случае я получаю такую ошибку, когда пытаюсь отправить alert в telegram используя webhook. И так как используется государственный MITM сертификат подменяется.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;решение&quot;&gt;Решение&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для решения можно отключить проверку валидности сертификата для определённого url, используя &lt;a href=&quot;https://www.elastic.co/guide/en/kibana/7.14/alert-action-settings-kb.html&quot;&gt;xpack.actions.customHostSetting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для этого:&lt;/p&gt;

&lt;p&gt;1.Правим конфиг файл Kibana&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo vim /etc/kibana/kibana.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.actions.customHostSettings:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;url:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;https://api.telegram.org&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ssl:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rejectUnauthorized:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;verificationMode:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'none'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;2.Перезапускаем Kibana&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo systemctl restart kibana
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;примечание&quot;&gt;Примечание&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Важное замечание эта функция была добавлена в версии 7.14. Так что если у вас кластер старее, то надо обновится.&lt;/p&gt;

</description>
        <pubDate>Thu, 09 Sep 2021 06:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-UNABLE_TO_GET_ISSUER_CERT_LOCALLY</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-UNABLE_TO_GET_ISSUER_CERT_LOCALLY</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Шаблоны поиска (Search Templates)</title>
        <description>&lt;p&gt;Если вы часто пишите запросы скорее всего у вас один и тот же запрос повторяется большое количество раз. И конечно можно упростить использование таких запросов применяя &lt;strong&gt;шаблоны поиска&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Вы просто создаёте &lt;strong&gt;шаблон&lt;/strong&gt; с запросом и далее используете его при поиске передавая в этот &lt;strong&gt;шаблон&lt;/strong&gt; параметры. Я бы просто назвал это &lt;strong&gt;скриптом&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание шаблона&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для создания &lt;strong&gt;шаблона поиска&lt;/strong&gt; используется &lt;strong&gt;_scripts&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_scripts/my-search-template&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lang&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mustache&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;my-search-template&lt;/strong&gt; - имя шаблона&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;lang&lt;/strong&gt; - язык скрипта. Список всех языков &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html&quot;&gt;тут&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;**, ** - переменные, которые будут передаваться при поиске&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование шаблона&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите вызвать &lt;strong&gt;шаблон поиска&lt;/strong&gt;, вы просто используете конечную точку &lt;strong&gt;_search / template&lt;/strong&gt; и в теле запроса.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_search/template&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-search-template&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;params&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пустые значения для переменных&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно рано или поздно вы придёте к пустым значениям в переменных для &lt;strong&gt;шаблона поиска&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы не использовать значение в поиске если оно пустое скрываем его.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_scripts/my-search-template&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lang&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mustache&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		
		&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;range&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;gte&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;**, ** - если значение &lt;code class=&quot;highlighter-rouge&quot;&gt;date&lt;/code&gt; пустое, то не выполняем данный блок.&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Thu, 09 Sep 2021 02:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-search-templates</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-search-templates</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Обновление кластера</title>
        <description>&lt;p&gt;Версии &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; обозначаются как &lt;code class=&quot;highlighter-rouge&quot;&gt;X&lt;/code&gt;,&lt;code class=&quot;highlighter-rouge&quot;&gt; Y&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;Z&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;X&lt;/strong&gt; - основная (&lt;strong&gt;major&lt;/strong&gt;) версия&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Y&lt;/strong&gt; - второстепенная (&lt;strong&gt;minor&lt;/strong&gt;) версия&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Z&lt;/strong&gt; - это уровень исправления (&lt;strong&gt;patch&lt;/strong&gt;) или отладочного (&lt;strong&gt;maintenance&lt;/strong&gt;) выпуска&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В основной версии добавляются критические изменения и новые функции. Второстепенная версия добавляет предупреждения об устаревании и новые функции. Критические изменения происходят в экспериментальных функциях или из-за исправлений ошибок. &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; любит выпускать множество новых основных функций в второстепенных выпусках. Имейте в виду, что вы можете увидеть второстепенные версии, наполненные новыми функциями!&lt;/p&gt;

&lt;p&gt;Для примера возьмём версию &lt;code class=&quot;highlighter-rouge&quot;&gt;7.13.2&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;7 - X&lt;/li&gt;
  &lt;li&gt;13 - Y&lt;/li&gt;
  &lt;li&gt;2 - Z&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Совместимость версий&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; будет работать только с индексами, созданными в предыдущей основной версии. Например, &lt;code class=&quot;highlighter-rouge&quot;&gt;индекс&lt;/code&gt; в 6.x можно использовать в кластере 7.x, но индекс в 5.x нельзя использовать в кластере 7.x. &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; просто не запустится.&lt;/p&gt;

&lt;p&gt;Обновление с 5.x до 7.x требует, чтобы все ваши старые индексы были переиндексированы, чтобы ваши данные были приведены в соответствие с текущими стандартами текущего выпуска.&lt;/p&gt;

&lt;p&gt;Существует два возможных сценария, которые возникают при обновлении кластера:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Последовательное обновление не требует простоев и позволяет продолжать работать с кластером. Например, обновление с версии 7.1 до 7.2.&lt;/li&gt;
  &lt;li&gt;Полный перезапуск кластера вызывает некоторое время простоя и приводит к отключению всех узлов. Например, при обновлении с 6.2 до 7.1.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Помощник по обновлению (Upgrade Assistant)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Помощник по обновлению поможет вам подготовиться к обновлению. Это приложение &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;, которое определяет устаревшие настройки и поможет вам в процессе решения проблем. Рекомендуется использовать этот инструмент, чтобы определить состояние вашего кластера перед обновлением.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Подготовка к обновлению&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перед обновлением рекомендуется выполнить несколько вещей, которые нужно сделать для подготовки:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Проверьте &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/logging.html#deprecation-logging&quot;&gt;журналы устаревания&lt;/a&gt; - вы можете увидеть, используете ли вы какие-либо устаревшие функции, и они могут не существовать в следующей версии, до которой вы обновляетесь. Представляет из себя лог файл в папке логов &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;. Создаётся ежедневно и имеет максимальный размер в 1Гб.&lt;/li&gt;
  &lt;li&gt;Просмотрите критические изменения - убедитесь, что вы установили первую основную (major) версию (например, 7.0, 6.0, 5.0).&lt;/li&gt;
  &lt;li&gt;Резервное копирование данных - как обычно любой вендор рекомендует сперва сделать бэкап перед обновлением, в нашем случае &lt;a href=&quot;https://www.tipoit.kz/elk-backups&quot;&gt;snapshot&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Последовательное обновление&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы уже говорили о том, что такой вид обновления не требует перезапуска всего кластера. Смысл в том, что мы по очереди обновляем все узлы в кластере &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для обновления выполняем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Естественно сперва делаем &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Выключаем &lt;code class=&quot;highlighter-rouge&quot;&gt;shard allocation&lt;/code&gt; для реплик &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster.routing.allocation.enable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;primaries&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_flush/synced&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Останавливаем узел, который хотим обновить
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl stop elasticsearch.service
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если вы используете &lt;code class=&quot;highlighter-rouge&quot;&gt;machine learning&lt;/code&gt;, то выполните пункт 3 по &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html&quot;&gt;ссылке&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Скопируйте на всякий случай файл конфига &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Обновляем узел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum update elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверьте что в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt; ничего не изменилось, например вы могли использовать нестандартные &lt;code class=&quot;highlighter-rouge&quot;&gt;path.data&lt;/code&gt; и т.д.&lt;/li&gt;
  &lt;li&gt;Запускаем узел
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl start elasticsearch.service
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ждём пока узел войдёт в кластер. Можно для просмотра воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;GET _cat/nodes&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Включаем  &lt;code class=&quot;highlighter-rouge&quot;&gt;shard allocation&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster.routing.allocation.enable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;all&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ждём пока состояние кластера будет зелёным &lt;code class=&quot;highlighter-rouge&quot;&gt;GET _cat/health&lt;/code&gt;. Если создались новые &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; то возможно статус вашего кластера будет жёлтым пока большинство узлов не обновится.&lt;/li&gt;
  &lt;li&gt;Повторить этап с 2 по 11 на всех остальных узлах кластера&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Для просмотра версии нод в клатере можно восспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;GET /_cat/nodes?h=ip,name,version&amp;amp;v=true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для просмотра всех активных нод в кластере можно восспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;GET _cat/nodes?v=true&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Major&lt;/strong&gt; и &lt;strong&gt;minor&lt;/strong&gt; версии содержат много новых функций&lt;/li&gt;
  &lt;li&gt;В основном &lt;strong&gt;Major&lt;/strong&gt; версии включают критические изменения&lt;/li&gt;
  &lt;li&gt;Последовательное обновление позволяет перезапускать узлы в кластере по одному (без простоев)&lt;/li&gt;
  &lt;li&gt;Полный перезапуск кластера обычно ускоряет обновление, хотя для этого требуется отключить все узлы перед обновлением (приводит к простою)&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Wed, 01 Sep 2021 23:01:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-cluster-update</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-cluster-update</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Unable to create temporary keystore [/etc/elasticsearch/elasticsearch.keystore.tmp]</title>
        <description>&lt;p&gt;Просто даём группе права на запись в директорию /etc/elasticsearch.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;chmod g+w /etc/elasticsearch
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 01 Sep 2021 22:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-unable-to-create-temporary-keystore</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-unable-to-create-temporary-keystore</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Контроль динамики</title>
        <description>&lt;p&gt;По умолчанию, когда вы добавляете документ в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; индекс создаётся автоматически если его не существует.&lt;/p&gt;

&lt;p&gt;Например, если добавить документ в несуществующий индекс &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index-1&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch &lt;/code&gt;создаст его автоматически.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my title is&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Отключение автоматического создания индекса&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы вдруг хотите отключить поведение по умолчанию и не создавать автоматически несуществующие индексы можно использовать &lt;strong&gt;action.auto_create_index&lt;/strong&gt;, выставив его значение в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;action.auto_create_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my title is&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге при попытке проиндексировать документ в несуществующий индекс вы получите ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;statusCode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;502&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bad Gateway&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Client request timeout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Автоматического создания индекса по pattern&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также возможно указать какие именно индексы можно создавать автоматически всё также используя &lt;strong&gt;action.auto_create_index&lt;/strong&gt;. Для этого в значение &lt;strong&gt;action.auto_create_index&lt;/strong&gt; выставляется в pattern, который вас устраивает.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;action.auto_create_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-*,metricbeat-*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Разбирая пример выше получается, что автоматически будут создаваться индексы, начинающиеся на &lt;code class=&quot;highlighter-rouge&quot;&gt;my-&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat-&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Также для использования некоторых продуктов от &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt; необходимо автоматическое создание индексов для этих продуктов. Для этого рекомендуется использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;pattern&lt;/code&gt; с возможными значениями индексов.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;action.auto_create_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*.monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Динамическое создание полей&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если это не первая статья, которую вы читает на моём сайте то вы уже должны знать, что по умолчанию при автоматическом создании поля ему присваивается 2 типа &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt;. Иногда бывает необходимость присваивать для определённых полей только один определённый тип, именно автоматически, а не вручную. Для этого используем &lt;strong&gt;dynamic_templates&lt;/strong&gt; при создании индекса.&lt;/p&gt;

&lt;p&gt;Например, пусть всё что строковое пусть индексируется с типом &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dynamic_templates&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_field_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match_mapping_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mapping&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my-index-1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dynamic_templates&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_field_type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match_mapping_type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mapping&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ограничения&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Иногда не лишним бывает и ограничить динамическое создание индексов либо полей. Для этого используются следующие настройки:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;index.mapping.total_fields.limit&lt;/strong&gt; - Максимальное количество полей в индексе (по умолчанию 1000)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;index.mapping.depth.limit&lt;/strong&gt; - Максимальная глубина поля, которая измеряется количеством внутренних объектов. Значение по умолчанию равно 20.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;index.mapping.nested_fields.limit&lt;/strong&gt; - Максимальное количество отдельных вложенных отображений в индексе. Вложенный тип следует использовать только в особых случаях, когда нужно запрашивать массивы объектов независимо друг от друга. Чтобы защитить себя от плохо спроектированных сопоставлений, этот параметр ограничивает количество уникальных вложенных типов для каждого индекса. По умолчанию 50.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;index.mapping.nested_objects.limit&lt;/strong&gt; - Максимальное количество вложенных объектов &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt;, которое может содержать один документ для всех вложенных типов. Это ограничение помогает предотвратить ошибки нехватки памяти, когда документ содержит слишком много вложенных объектов. По умолчанию 10000.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Небольшое разъяснение по поводу  &lt;strong&gt;index.mapping.nested_fields.limit&lt;/strong&gt;.
Например, если в следующем примере мы не определяем поле &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;user&quot;&lt;/code&gt; как поле &lt;code class=&quot;highlighter-rouge&quot;&gt;nested&lt;/code&gt; в сопоставлении, запрос для &lt;code class=&quot;highlighter-rouge&quot;&gt;user.name: Wagner&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;user.car: Audi&lt;/code&gt; вернет совпадение, и это будет ошибкой:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;group&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;staff&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Wagner&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BMW&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Alice&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Audi&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Когда вы отключаете динамические индексы не забудьте занести в белый список все шаблоны индексов для системных индексов.&lt;/li&gt;
  &lt;li&gt;Используя динамические шаблоны, вы можете определить отображение поля на основе его имени или типа данных.&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Fri, 13 Aug 2021 21:26:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-dynamic-control</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-dynamic-control</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>FreeIpa - Управление сроками действия пароля</title>
        <description>&lt;p&gt;По умолчанию сроком действия пароля и его сложностью можно управлять через политику паролей в FreeIPA. Но бывает необходимость отключить срок действия пароля или же выставить срок больше чем в политике для определённой учетной записи, например, если это служебная учетная запись. Конечно в идеале лучше менять пароль перед его истечением мониторя его срок действия.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Смена срока действия пароля для одного пользователя&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Авторизуемся в домене
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;kinit
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Меняем срок действия пароля
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ipa user-mod my-username --setattr&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;krbPasswordExpiration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;20121231011529Z
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://youtu.be/Q0KwUO7KC3M&quot;&gt;click me&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 02 Aug 2021 21:05:39 +0600</pubDate>
        <link>http://www.tipoit.kz/freeipa-change-password-expiration</link>
        <guid isPermaLink="true">http://www.tipoit.kz/freeipa-change-password-expiration</guid>
        
        <category>linux</category>
        
        <category>freeipa</category>
        
        
      </item>
    
      <item>
        <title>ELK - Шаблоны индекса (Index Templates)</title>
        <description>&lt;p&gt;В большем случае у большинства &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; в вашем кластере одни и те же настройки (количество реплик, количество shards и т.д). И желание не настраивать каждый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; отдельно является естественным, зачем вам тратить драгоценное время на такую ерунду. И такую процедуру в &lt;strong&gt;Elasticsearch&lt;/strong&gt; можно автоматизировать. Для этого применяется &lt;strong&gt;шаблоны (Templates)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Шаблоны (Templates)&lt;/strong&gt; позволяют вам устанавливать значения, которые будут автоматически применяться к вновь созданным &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;, что полезно, когда вам нужно создать несколько &lt;code class=&quot;highlighter-rouge&quot;&gt;индексов&lt;/code&gt; с одинаковыми настройками и сопоставлениями.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание шаблона (template)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для создания или удаления &lt;strong&gt;шаблонов (templates)&lt;/strong&gt; используется &lt;strong&gt;_template&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Пример создания &lt;strong&gt;шаблона&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_template/my-index-template&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_patterns&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_replicas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;index_patterns&lt;/strong&gt; - к какому index применять шаблон (может принимать pattern)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;order&lt;/strong&gt; - приоритет шаблона, чем выше, тем приоритетнее&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;settings&lt;/strong&gt; - собственно сами настройки index&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;my-index-template&lt;/strong&gt; - название шаблона, может быть любым&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Множественные шаблоны&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Внимательные читатели уже, наверное, догадались о чём пойдёт речь. Бывает необходимость применить &lt;strong&gt;множественные шаблоны&lt;/strong&gt;, т.е к одному &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; применить несколько &lt;strong&gt;шаблонов&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;На то какой именно из &lt;strong&gt;шаблонов&lt;/strong&gt; примениться к &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; влияет &lt;strong&gt;order&lt;/strong&gt;, о котором я уже упомянул выше. По умолчанию он выставляется в значение 1. Если у вас несколько &lt;strong&gt;шаблонов&lt;/strong&gt; с разным &lt;strong&gt;order&lt;/strong&gt; то примениться тот &lt;strong&gt;шаблон&lt;/strong&gt;, у которого &lt;strong&gt;order&lt;/strong&gt; выше.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_template/my-index-template&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index_patterns&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_replicas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index-v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index-v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my-index-v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;..........&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...............&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;number_of_shards&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		 &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_replicas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;......................&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</description>
        <pubDate>Wed, 28 Jul 2021 00:53:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-index-templates</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-index-templates</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Псевдонимы индекса (Index Aliases)</title>
        <description>&lt;p&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt; предоставляет механизм для создания &lt;strong&gt;псевдонимов (aliases)&lt;/strong&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. Суть в том, что вы задаёте &lt;strong&gt;псевдоним (alias)&lt;/strong&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; и уже в запросах для доступа к этому &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; используете именно его &lt;strong&gt;alias&lt;/strong&gt;, а не имя &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Рассмотрим одну из самых частых применений псевдонимов. Допустим у вас есть &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;, название которого постоянно меняется, например, вы добавляете к названию версию вашего приложения &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index-v1&lt;/code&gt;. И соответственно при каждом новом релизе имя вашего &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; меняется. И вам либо вашему приложению, которое обращается к этому &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; постоянно надо менять имя &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; при запросе. Естественно это глупая задача и для её решения используется как раз-таки &lt;strong&gt;псевдонимы (aliases)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;При использовании &lt;strong&gt;псевдонимов (aliases)&lt;/strong&gt; при создании нового &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; вы назначаете ему тот же &lt;strong&gt;alias&lt;/strong&gt; что и был у старого &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; и удаляете этот &lt;strong&gt;alias&lt;/strong&gt; у старого &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. Соответственно ваше приложение всё также обращается к старому &lt;strong&gt;alias&lt;/strong&gt; и получает данные с нового &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Вы также можете назначать один и тот же &lt;strong&gt;alias&lt;/strong&gt; множествам &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; если этого требует ситуация.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/alias-1.png&quot; alt=&quot;without alias&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В такой реализации для того чтобы обратиться к новому &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; вам надо менять запрос.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index-v&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/alias-2.png&quot; alt=&quot;with alias&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В такой реализации вам нужно добавить &lt;strong&gt;alias&lt;/strong&gt; к новому &lt;code class=&quot;highlighter-rouge&quot;&gt;index (my-index-v2)&lt;/code&gt; и удалить у старого &lt;code class=&quot;highlighter-rouge&quot;&gt;index (my-index-v1)&lt;/code&gt;. Соответственно в самом запросе всё остаётся также, как и было.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index-alias/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание alias&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы создать &lt;strong&gt;alias&lt;/strong&gt; или удалить его используется &lt;strong&gt;_aliases&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Пример создания:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_aliases&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;actions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;add&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-alias&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Пример создания и удаления:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_aliases&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;actions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;add&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-v2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-alias&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;remove&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-v1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-alias&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 18 Jul 2021 19:40:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-aliases</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-aliases</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Горячо-теплая (Hot-Warm) архитектура</title>
        <description>&lt;p&gt;В какой-то момент времени возможно вы придёте к тому, что захотите контролировать на каком именно узле должны находиться определённые &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt;. Для этого вы как раз можете использовать функцию перемещения &lt;code class=&quot;highlighter-rouge&quot;&gt;shard&lt;/code&gt; от горячего хоста к теплому. Это также поможет вам хранить уже не особо нужные данные на более дешевом оборудовании, которое обрабатывает только &lt;code class=&quot;highlighter-rouge&quot;&gt;READ-ONLY&lt;/code&gt; операции и делает это не так часто, если мы говорим о теплых узлах. Горячие узлы наоборот должны максимально быть заточены на запись и обработку данных, при этом не имея большого дискового пространства (конечно всё зависит от количества данных).&lt;/p&gt;

&lt;p&gt;Для горячих узлов важными серверными компонентами являются &lt;code class=&quot;highlighter-rouge&quot;&gt;CPU&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;IO операции&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Фильтрация Shard&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы задать на каком именно узле &lt;strong&gt;Elasticsearch&lt;/strong&gt; хранить &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt; используются:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;node.attr&lt;/strong&gt; - задаёт наименование узла&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;index.routing.allocation&lt;/strong&gt; - назначает на какие узлы перемещать &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Параметры &lt;strong&gt;index.routing.allocation&lt;/strong&gt; поддерживают три типа фильтров: &lt;strong&gt;include&lt;/strong&gt;, &lt;strong&gt;exclude&lt;/strong&gt; и &lt;strong&gt;require&lt;/strong&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;тип&lt;/th&gt;
      &lt;th&gt;действие&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;include&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Присвойте индекс узлу, имя (node.attr) которого имеет хотя бы одно из значений, разделенных запятыми.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;require&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Присвойте индекс узлу, имя (node.attr) которого имеет все значения, разделенные запятыми.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;exclude&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Присвойте индекс узлу, имя (node.attr) которого не имеет значений, разделенных запятыми.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Представим ситуации что мы разбили наши узлы на 3 категории по дисковому месту (size) и хотим, чтобы &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index&lt;/code&gt; хранился именно на среднем по месту узле (medium).&lt;/p&gt;

&lt;p&gt;1.Для начала зададим всем атрибут &lt;code class=&quot;highlighter-rouge&quot;&gt;size&lt;/code&gt; с разными значениями для всех узлов.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;node.attr.size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;big&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node.attr.size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;small&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node.attr.size:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;medium&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;2.Далее заставляем &lt;code class=&quot;highlighter-rouge&quot;&gt;index my-index&lt;/code&gt; храниться на узле со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;size: medium&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index.routing.allocation.require.size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;medium&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;У каждого узла может быть множество атрибутов заданных с помощью &lt;strong&gt;node.attr&lt;/strong&gt;. Соответственно вы можете использовать множественную фильтрации для &lt;strong&gt;index.routing.allocation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Также вы можете использовать и встроенные атрибуты:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;_name&lt;/strong&gt; - Сопоставляет узлы по имени узла&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;_host_ip&lt;/strong&gt; - Сопоставление узлов по IP-адресу хоста&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;_publish_ip&lt;/strong&gt; - Сопоставление узлов по публичному IP-адресу&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;_ip&lt;/strong&gt; - Соответствует либо _host_ip, либо _publish_ip&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;_host&lt;/strong&gt; - Сопоставляет узлы по имени хоста&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;_id&lt;/strong&gt; - Сопоставляет узлы по id&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Вы можете настраивать узлы в кластере для использования архитектуры горячего и теплого типа.&lt;/li&gt;
  &lt;li&gt;Используйте горячие узлы для индексации&lt;/li&gt;
  &lt;li&gt;Используйте теплые узлы для старых индексов, доступных только для чтения&lt;/li&gt;
  &lt;li&gt;Контроль расположения index называется &lt;strong&gt;Shard filtering&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 18 Jul 2021 02:10:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-shard-filtering</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-shard-filtering</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Кросс-кластерный поиск</title>
        <description>&lt;p&gt;Имея множество кластеров, вы можете распределять нагрузку при запросе между всеми узлами ваших кластеров. Возможно это благодаря поддержке Кросс-кластерного поиска (Cross-Cluster Search) в Elasticsearch.&lt;/p&gt;

&lt;p&gt;На схеме ниже продемонстрирована работа Кросс-кластерного поиска. Т.е вы выполняете запрос на одном из узлов в Кластере 2 и дальше Elasticsearch сам распараллеливает запрос между другими кластерами.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/ccs_minimize_roundtrips1.png&quot; alt=&quot;Cross-Cluster Search&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Регистрация удаленных кластеров&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для добавления удаленного кластера используется &lt;code class=&quot;highlighter-rouge&quot;&gt;cluster.remote&lt;/code&gt;. Вам необходимо предоставить список узлов (seeds), который представляет собой список узлов в удаленном кластере.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_cluster/settings&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;persistent&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster.remote&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_cluster_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;seeds&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node1:9300&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node2:9300&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node3:9300&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Поиск в удалённом кластере&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как вы добавили удаленный кластер вы также можете искать нужные вам документы именно в этом кластере. Поиск осуществляется как обычно за исключением добавлением имени удаленного кластера перед &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_cluster_name:my_index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_text&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Используем кросс-кластерный поиск&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и конечно самое интересное это и есть сам кросс-кластерный поиск. Для его использования делаем всё тоже самое что и делали при поиске в удаленном кластере с добавлением через запятую того же &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; в исходном кластере.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index,my_cluster_name:my_index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_text&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В результатах будет видно какой документ находится в удаленном кластере. Поле &lt;code class=&quot;highlighter-rouge&quot;&gt;_index&lt;/code&gt; будет иметь значение &lt;code class=&quot;highlighter-rouge&quot;&gt;my_cluster_name:my_index&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Конечно если у вас десятки удаленных кластеров писать их все через запятую очень муторно, поэтому используем *. Благодаря этому поиск будет осуществлён во всех удаленных кластерах.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index,*:my_index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_text&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Как это работает&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию при запросе &lt;code class=&quot;highlighter-rouge&quot;&gt;координирующий узел (coordinating node)&lt;/code&gt; отправляет по одному запросу в каждый из зарегистрированных кластеров. Это действие по умолчанию, но его можно изменить, выставив значение параметра &lt;code class=&quot;highlighter-rouge&quot;&gt;ccs_minimize_roundtrips&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;При значении &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt; Координирующий узел (coordinating node) отправляет по одному запросу в каждый кластер для сбора всей информации о &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt;, а затем отправляет запрос каждому &lt;code class=&quot;highlighter-rouge&quot;&gt;shard&lt;/code&gt;, участвующему в запросе. Рекомендуется выставлять значение параметра &lt;code class=&quot;highlighter-rouge&quot;&gt;ccs_minimize_roundtrips&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt; только если у вас минимальная задержка на сетевом уровне между кластерами.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/ccs_minimize_roundtrips.png&quot; alt=&quot;Cross-Cluster Search&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1 - Поступает запрос поиска к &lt;code class=&quot;highlighter-rouge&quot;&gt;Node2&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;2 - &lt;code class=&quot;highlighter-rouge&quot;&gt;Node2&lt;/code&gt; получает информацию о &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt; на удаленном кластере&lt;/li&gt;
  &lt;li&gt;3 - Запрос выполняется на локальных &lt;code class=&quot;highlighter-rouge&quot;&gt;shards &lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;4 - Запрос выполняется на удаленных &lt;code class=&quot;highlighter-rouge&quot;&gt;shards &lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index,*:my_index/_search?css_minimize_roundtrip=&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_text&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</description>
        <pubDate>Fri, 16 Jul 2021 05:40:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-cross-cluster-search</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-cross-cluster-search</guid>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Grafana - Включаем ldap аутентификацию (freeipa)</title>
        <description>&lt;p&gt;Конечно по умолчанию можно отделаться и созданием локальных учетных записей в самой &lt;strong&gt;Grafana&lt;/strong&gt;, но только если вы используете её в &lt;code class=&quot;highlighter-rouge&quot;&gt;enterprise&lt;/code&gt; среде, с большим количеством сотрудников у вас уже скорее всего есть &lt;code class=&quot;highlighter-rouge&quot;&gt;ldap&lt;/code&gt; и не использовать его в роли сервера авторизации для всего будет просто преступлением.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включаем  ldap аутентификацию&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;1.Редактируем основной файл конфигурации &lt;strong&gt;Grafana&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/grafana/grafana.ini
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;auth.ldap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;config_file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/grafana/ldap.toml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow_sign_up&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;2.Редактируем файл с настройками &lt;code class=&quot;highlighter-rouge&quot;&gt;ldap&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/grafana/ldap.toml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;servers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#правильно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;указывать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;несколько&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;freeipa1.dc1.my.local freeipa1.dc2.my.local&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;пользователь&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;просмотра&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;груп&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;и&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;пользователей&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#грубо&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;говоря&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;под&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ним&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Grafana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;попадает&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ldap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bind_dn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;uid=grafana,cn=users,cn=accounts,dc=my,dc=local&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bind_password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'password'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;search_filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;(uid=%s)&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;search_base_dns&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cn=users,cn=accounts,dc=my,dc=local&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;servers.group_mappings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#какая&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;группа&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ldap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;является&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;администраторами&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Grafana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group_dn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cn=grafana-admins,cn=groups,cn=accounts,dc=my,dc=local&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;org_role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Admin&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;servers.group_mappings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#какая&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;группа&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ldap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;является&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;редакторами&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Grafana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group_dn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cn=grafana-editors,cn=groups,cn=accounts,dc=my,dc=local&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;org_role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Editor&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;servers.group_mappings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#какая&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;группа&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ldap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;является&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;читателями&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Grafana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group_dn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cn=grafana-viewers,cn=groups,cn=accounts,dc=my,dc=local&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;org_role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Viewer&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;3.Перезапускаем сервис &lt;strong&gt;Grafana&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart grafana-server
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание пользователей FreeIpa&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Далее необходимо создать пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana&lt;/code&gt; и группы &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana-viewers&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana-editors&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana-admins&lt;/code&gt; в &lt;a href=&quot;https://www.tipoit.kz/freeipa-install&quot;&gt;FreeIpa&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;И уже в зависимости от необходимых действий в &lt;strong&gt;Grafana&lt;/strong&gt; добавляем пользователей &lt;a href=&quot;https://www.tipoit.kz/freeipa-install&quot;&gt;FreeIpa&lt;/a&gt; в группы &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana-viewers&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana-editors&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;grafana-admins&lt;/code&gt;.&lt;/p&gt;

</description>
        <pubDate>Thu, 15 Jul 2021 23:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/grafana-enable-ldap</link>
        <guid isPermaLink="true">http://www.tipoit.kz/grafana-enable-ldap</guid>
        
        <category>grafana</category>
        
        <category>ldap</category>
        
        <category>freeipa</category>
        
        
      </item>
    
      <item>
        <title>ELK - Безопасность</title>
        <description>&lt;p&gt;Естественно если вы прокидываете ваш кластер &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; во вне, то нужно очень сильно подумать о том, как его обезопасить от взлома.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Кластер без лицензии&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рассмотрим базовые методы защиты кластера без лицензии &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Первым в голову приходит настроить на &lt;code class=&quot;highlighter-rouge&quot;&gt;firewall&lt;/code&gt; доступ только с доверенных адресов. Также сам &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; рекомендует не прокидывать во не порт 9200.&lt;/p&gt;

&lt;p&gt;Вторым методом конечно является прокидывание во вне не самого кластера &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;, а прокси сервера перед ним (&lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;) и реализация аутентификации на этом прокси сервере.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Кластер с лицензией&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы обладаете золотой и платиновой лицензией вам доступны некоторые коммерческие функции безопасности. Включая ведение журнала аудита, фильтрацию &lt;code class=&quot;highlighter-rouge&quot;&gt;IP&lt;/code&gt;, интеграцию с &lt;code class=&quot;highlighter-rouge&quot;&gt;LDAP&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;Active Directory&lt;/code&gt; и другие механизмы аутентификации. Лицензии &lt;code class=&quot;highlighter-rouge&quot;&gt;Platinum&lt;/code&gt; включают функции безопасности, такие как безопасность на уровне полей и документов, управление доступом на основе атрибутов, поддержка шифрования в состоянии покоя и режим соответствия &lt;code class=&quot;highlighter-rouge&quot;&gt;Федеральному стандарту обработки информации (FIPS) 140-2&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включаем функцию безопасности&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Хотя &lt;code class=&quot;highlighter-rouge&quot;&gt;безопасность Elasticsearch&lt;/code&gt; доступна, она не включена по умолчанию. Вам необходимо включить функцию безопасности на каждом узле в кластере с помощью файла &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;С версии 7 вам нужно будет настроить безопасность транспортного уровня (&lt;code class=&quot;highlighter-rouge&quot;&gt;TLS / SSL&lt;/code&gt;) для обмена данными между узлами (в бесплатной версии тоже). В частности, это защищает информацию об имени пользователя и пароле от перехвата, что может привести к взлому кластера.&lt;/p&gt;

&lt;p&gt;Если вы планируете запускать &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; в среде Федерального стандарта обработки информации &lt;a href=&quot;https://ru.wikipedia.org/wiki/FIPS_140-2&quot;&gt;(FIPS) 140-2,&lt;/a&gt; вам необходимо установить для &lt;code class=&quot;highlighter-rouge&quot;&gt;xpack.security.fips_mode&lt;/code&gt; значение &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt; в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После включения функции безопасности вам нужно будет перезапустить все узлы кластера и после этого выполнять команду, которая задаст пароли для всех встроенных пользователей &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bin/elasticsearch-setup-password interactive
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настраиваем TLS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Для начала нужно сгенерировать сертификаты
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bin/elasticsearch-certutil cert -out config/certificate.p12
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Копируем этот сертификат на все узлы кластера&lt;/li&gt;
  &lt;li&gt;Включаем &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS&lt;/code&gt; взаимодействие на всех узлах кластера
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.verification_mode:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;certificate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.keystore.path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;certificate.p&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.truststorepath:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;certificate.p&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем все узлы кластера&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Kibana&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После включения &lt;code class=&quot;highlighter-rouge&quot;&gt;xpack&lt;/code&gt; анонимный доступ к кластеру &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; заканчивается и соответственно если используется &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;, то нужно указать пользователя для авторизации.&lt;/p&gt;

&lt;p&gt;Вариант 1
Прописывается пароль и логин в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana.yml&lt;/code&gt;. Из-за этого является не самым безопасным вариантом.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim kibana.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kibana&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;adsadsadsad&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Вариант 2
Используем &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana keystore&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bin/kibana-keystore create
bin/kibana-keystore add elasticsearch.username&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; kibana
bin/kibana-keystore add elasticsearch.password&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; adsadsadsad
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;После этого перезапускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt; и можем авторизоваться под пользователем &lt;code class=&quot;highlighter-rouge&quot;&gt;elastic&lt;/code&gt; пароль которому задавался при выполнении команды &lt;code class=&quot;highlighter-rouge&quot;&gt;bin/elasticsearch-setup-password interactive&lt;/code&gt;&lt;/p&gt;

</description>
        <pubDate>Mon, 28 Jun 2021 00:55:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-security</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-security</guid>
        
        <category>elkstack</category>
        
        <category>security</category>
        
        
      </item>
    
      <item>
        <title>ELK - Бэкап кластера</title>
        <description>&lt;p&gt;Если мы говорим о репликации &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;, то конечно тут как такого &lt;strong&gt;бэкапа&lt;/strong&gt; нет. Вы просто настраиваете репликацию &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; и храните копии &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; на нескольких узлах. &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; рекомендует строить кластера минимум с 3 узлами. Т.е в такой реализации вы можете иметь 2 копии &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;.  Но если вы теряете все 3 узла кластера, то о данных конечно можно забыть.&lt;/p&gt;

&lt;p&gt;Поэтому считать репликацию &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; за &lt;strong&gt;бэкапы&lt;/strong&gt; не совсем правильно.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Snapshot и восстановление&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;API Snapshot and Restore&lt;/strong&gt; обеспечивает механизм резервного копирования кластера. Он берет текущее состояние и данные в вашем кластере и сохраняет их в репозиторий. Вы должны сделать снимки своих данных, сохранить их в репозитории, а затем при необходимости восстановить эти данные.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Создание репозитория&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы сделать &lt;strong&gt;snapshot&lt;/strong&gt; вы сперва должны создать и настроить репозиторий, куда вы будете хранить &lt;strong&gt;snapshot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; поддерживает следующие типы репозиториев:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Shared file system (fs) - обычная папка в файловой системе&lt;/li&gt;
  &lt;li&gt;Read-only URL&lt;/li&gt;
  &lt;li&gt;S3 - файловое хранилище поддерживающее S3 API (&lt;a href=&quot;http://www.tipoit.kz/minio-install&quot;&gt;minio&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;HDFS&lt;/li&gt;
  &lt;li&gt;Azure&lt;/li&gt;
  &lt;li&gt;Google Cloud Storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для того чтобы создать репозиторий используется &lt;strong&gt;_snapshot&lt;/strong&gt;. Для того чтобы создание &lt;strong&gt;snapshot&lt;/strong&gt; завершилось удачно все узлы кластера должны иметь доступ к репозиторию.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_snapshot/my_repo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;location&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/mnt/backup&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если вы используете репозиторий типа &lt;code class=&quot;highlighter-rouge&quot;&gt;FS&lt;/code&gt;, то его нужно будет также добавить в &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt; используя &lt;code class=&quot;highlighter-rouge&quot;&gt;path.repo&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repo:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/mnt/backup&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Shared file system&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сверху мы уже его коснулись, добавлю еще немного о его настройках:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;max_restore_bytes_per_sec - скорость восстановления узла&lt;/li&gt;
  &lt;li&gt;max_snapshot_bytes_per_sec - частота моментальных snapshot узла. По умолчанию 40 МБ в секунду.&lt;/li&gt;
  &lt;li&gt;compress - включает сжатие&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если вы хотите, чтобы моментальный снимок выполнялся быстрее, увеличьте &lt;code class=&quot;highlighter-rouge&quot;&gt;max_restore_bytes_per_sec&lt;/code&gt;. Если вы хотите замедлить его вы можете уменьшить оба параметра.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_snapshot/my_repo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;location&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/mnt/backup&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;б&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;compress&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;max_restore_bytes_per_sec&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;10mb&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;max_snapshot_bytes_per_sec&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;10mb&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание snapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После создания репозитория вы можете создать &lt;strong&gt;snapshot&lt;/strong&gt; всех индексов с помощью &lt;strong&gt;_snapshot&lt;/strong&gt;. &lt;strong&gt;Snapshot&lt;/strong&gt; представляют собой копию данных на определенный момент времени и игнорируют любые изменения, которые происходят после создания &lt;strong&gt;snapshot&lt;/strong&gt;. &lt;strong&gt;Snapshot&lt;/strong&gt;  являются инкрементными, и будут скопированы только данные, которые были добавлены / изменены после предыдущего &lt;strong&gt;snapshot&lt;/strong&gt;. Рекомендуется делать частые снимки по нескольким причинам:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В случае аварии вы потеряете лишь небольшой объем данных.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Snapshot&lt;/strong&gt; будет выполняться быстрее&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_01
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;Snapshot определённых index&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно было бы глупо бэкапить &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; которые вас не интересуют, которые вы можете себе позволить потерять.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_02
{
  &quot;indices&quot;: &quot;my-index-*&quot;,
  &quot;ignore_unavailable&quot;: true,
  &quot;include_global_state&quot;: true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;Проверка состояния Snapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно же вы захотите знать в каком состоянии сейчас процесс &lt;strong&gt;Snapshot&lt;/strong&gt;. Для этого можно воспользоваться &lt;strong&gt;_status&lt;/strong&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_02/_status
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Также вы можете запустить процесс создания &lt;strong&gt;Snapshot&lt;/strong&gt; в интерактивном режиме.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_02?wait_for_completion=true
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;Управление Snapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Получить информацию обо всех &lt;strong&gt;Snapshot&lt;/strong&gt; в репозитории можно используя следующий &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;GET _snapshot/my_repo/_all
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Получить информацию об определенном &lt;strong&gt;Snapshot&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;GET _snapshot/my_repo/my_snapshot_2021_06_19_02
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Удалить &lt;strong&gt;Snapshot&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;DELETE _snapshot/my_repo/my_snapshot_2021_06_19_02
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;Автоматический Snapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно выполнять каждый раз &lt;strong&gt;Snapshot&lt;/strong&gt; вручную это не дело. Если вы хотите автоматизировать этот процесс, вы можете использовать политики управления жизненным циклом снимков (&lt;code class=&quot;highlighter-rouge&quot;&gt;SLM&lt;/code&gt;). Политики определяют, когда вы хотите сделать снимок и как долго вы его храните.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT /_slm/policy/everyday-snapshot
{
  &quot;schedule&quot;: &quot;0 55 1 * * ?&quot;,
  &quot;name&quot;: &quot;&amp;lt;everyday-{now/d}&amp;gt;&quot;,
  &quot;repository&quot;: &quot;my_repo&quot;,
  &quot;config&quot;: {
    &quot;indices&quot;: [&quot;*&quot;]
  },
  &quot;retention&quot; {
    &quot;expire_after&quot; &quot;7d&quot;,
    &quot;min_count&quot;: 5
    &quot;max_count&quot;: 25
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Также вы можете создать &lt;code class=&quot;highlighter-rouge&quot;&gt;SLM&lt;/code&gt; используя &lt;code class=&quot;highlighter-rouge&quot;&gt;GUI&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt; в меню &lt;code class=&quot;highlighter-rouge&quot;&gt;Stack Management&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Восстановление Shapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ну и конечно куда же без восстановления. Для этого используется &lt;strong&gt;_restore&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_02/_restore
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Есть возможность восстановить только определённый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_02/_restore 
{
  &quot;indices&quot;: &quot;my-index-*&quot;,
  &quot;include_global_state&quot;: false
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Если вам нужно восстановить в новый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-josn&quot;&gt;PUT _snapshot/my_repo/my_snapshot_2021_06_19_02/_restore 
{
  &quot;indices&quot;: &quot;my-index-*&quot;,
  &quot;include_global_state&quot;: false,
  &quot;rename_pattern&quot;: &quot;my-index-(.+)&quot;,
  &quot;rename_replacement&quot;: &quot;restored-my-index-$1&quot;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Для того чтобы восстановить &lt;strong&gt;Shapshot&lt;/strong&gt; в другом кластере просто зарегистрируйте тот же репозиторий в новом кластере и делайте восстановление.&lt;/p&gt;

</description>
        <pubDate>Sun, 20 Jun 2021 07:10:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-backups</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-backups</guid>
        
        <category>elkstack</category>
        
        <category>backups</category>
        
        
      </item>
    
      <item>
        <title>ELK - Painless скрипты</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Скрипты (Scripting)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рано или поздно вы придёте к тому что захочется использовать что-то специфическое чего нет в стандартных &lt;a href=&quot;https://www.tipoit.kz/ingest-node-and-pipelines&quot;&gt;processors&lt;/a&gt; которые предоставляет &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;. Для этого &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; предоставляет возможность написания своих собственных скриптов, которые вы потом можете вызывать, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;script processor&lt;/code&gt;, который использует &lt;strong&gt;Painless programming language&lt;/strong&gt; .&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Painless programming language&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Painless&lt;/strong&gt; - это язык &lt;code class=&quot;highlighter-rouge&quot;&gt;сценариев (Scripting)&lt;/code&gt;, разработанный специально для использования в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;. Он довольно быстр и безопасен. Этот язык имеет синтаксис, подобный &lt;code class=&quot;highlighter-rouge&quot;&gt;Groovy&lt;/code&gt;, и поддерживает все типы данных &lt;code class=&quot;highlighter-rouge&quot;&gt;Java&lt;/code&gt; с подмножеством &lt;code class=&quot;highlighter-rouge&quot;&gt;Java API&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для просмотра какие методы и классы вы можете использовать в &lt;strong&gt;Painless&lt;/strong&gt; пройдите по &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference.html&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование Painless&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала нужно создать наш скрипт, который вы сможете использовать после в &lt;a href=&quot;https://www.tipoit.kz/ingest-node-and-pipelines&quot;&gt;processors&lt;/a&gt;. Выполнятся этот скрипт будет в &lt;a href=&quot;https://www.tipoit.kz/ingest-node-and-pipelines&quot;&gt;pipeline&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для примера напишем скрипт, который поменяет значение поля &lt;code class=&quot;highlighter-rouge&quot;&gt;category&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Создаём документ
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Introducing beta releases: Elasticsearch and My-App!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Lite&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём новый &lt;code class=&quot;highlighter-rouge&quot;&gt;pipeline&lt;/code&gt; со скриптом
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_ingest/pipeline/change_category&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;processors&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ctx['category'] = 'Blog'&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Делаем &lt;a href=&quot;https://www.tipoit.kz/elk-changing-data&quot;&gt;переиндексацию&lt;/a&gt; и проверяем документ в новом index
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;change_category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;op_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;create&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Вы также можете использовать скрипт в переиндексации, не создавая его заранее. Просто прописываете его внутри &lt;code class=&quot;highlighter-rouge&quot;&gt;_reindex&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ctx['category'] = 'Blog'&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Кэширование скриптов&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Все скрипты хранятся в &lt;strong&gt;cache&lt;/strong&gt;. Как только &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; понимает, что скрипт создан он компилирует его и кладёт в &lt;strong&gt;cache&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;По умолчанию в &lt;strong&gt;cache&lt;/strong&gt; хранится ограниченное количество таких скриптов, значение по умолчанию - 100 скриптов. Вы можете менять это количество используя &lt;code class=&quot;highlighter-rouge&quot;&gt;script.cache.max_size&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Также вы можете установить время жизни скрипта в &lt;strong&gt;cache&lt;/strong&gt; используя параметр &lt;code class=&quot;highlighter-rouge&quot;&gt;script.cache.expire&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;По умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; не даст скомпилировать больше 75 скриптов за промежуток времени в 5 минут. Вы также можете исправить это используя &lt;code class=&quot;highlighter-rouge&quot;&gt;script.max_compilations_rate&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Painless&lt;/strong&gt; это язык сценариев, разработанный специально для использования в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Скрипты могут быть встроенными (пример переиндексации) или храниться в кластере&lt;/li&gt;
  &lt;li&gt;Когда &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; впервые видит новый скрипт, он компилирует его и сохраняет скомпилированную версию в &lt;strong&gt;cache&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sat, 19 Jun 2021 23:22:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-painless-scrpits</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-painless-scrpits</guid>
        
        <category>elkstack</category>
        
        <category>scripts</category>
        
        
      </item>
    
      <item>
        <title>ELK - Ingest Node и Pipelines</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Ingest Node (узел поглощения данных)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Узел поглощения данных (Ingest Node)&lt;/strong&gt; - легковесное решение для предварительной обработки и дополнения документов в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; до индексирования.&lt;/p&gt;

&lt;p&gt;Если настройки узла &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; не менялись, то по умолчания каждая узел (node) является &lt;strong&gt;ingest node&lt;/strong&gt;. Настроить является ли узел &lt;strong&gt;ingest node&lt;/strong&gt; можно в файле конфигурации &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt;. Свойство  &lt;code class=&quot;highlighter-rouge&quot;&gt;node.ingest&lt;/code&gt; может принимать значения &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt;, по умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingest Node&lt;/strong&gt; используется для предварительной обработки документов до момента их фактического индексирования. Благодаря этому мы можем выполнять обработку сырых логов и дополнять их внутри &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;, минуя &lt;code class=&quot;highlighter-rouge&quot;&gt;Logstash&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Обработка данных происходит путем перехвата составных и индексирующих запросов, применения трансформаций данных (используя &lt;strong&gt;pipelines&lt;/strong&gt;) и отправки документов обратно к &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt;, который уже кладёт измененные данные в index.&lt;/p&gt;

&lt;p&gt;Для предварительной обработки данных перед индексированием необходимо указать &lt;strong&gt;контейнер (pipeline)&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/my_type?pipeline=my_pipeline_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Pipeline (конвейер)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как мы уже поняли ранее именно &lt;strong&gt;Pipeline&lt;/strong&gt; отвечает за саму модификацию данных. Для этого внутри &lt;strong&gt;Pipeline&lt;/strong&gt; используются &lt;strong&gt;процессоры (processors)&lt;/strong&gt;, как множественные, так и одинарные. Список всех &lt;strong&gt;processors&lt;/strong&gt; вы может найти по &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-processors.html&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Перед использованием &lt;strong&gt;Pipeline&lt;/strong&gt; вы сперва должны его зарегистрировать. Он регистрируется внутри кластера и соответственно любой узел кластера может его использовать.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_ingest/pipeline/my_pipeline_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my pipline's description&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;processors&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#one&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ore&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;more&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;processors&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;on_failure&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#processors&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;which&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;will&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;be&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exucuted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;onfailure&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для примера рассмотрим процессор &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/set-processor.html&quot;&gt;set&lt;/a&gt;, который добавляет новое поле в документ или меняет его значение, если значение поля было задано ранее.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_ingest/pipeline/add_new_test_filed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;add test field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;processors&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;set&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;test_field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы проверить как наш &lt;strong&gt;Pipeline&lt;/strong&gt; отрабатывает можно воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;_simulate&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_ingest/pipeline/add_new_test_filed/_simulate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;docs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;The great time&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bobik Bob&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выводе получим:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;test_field&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;The great time&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bobik Bob&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Вы также можете использовать &lt;strong&gt;Pipeline&lt;/strong&gt; и при вызове &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; &lt;a href=&quot;https://www.tipoit.kz/elk-changing-data&quot;&gt;_update_by_query&lt;/a&gt;, синтаксис выглядит так &lt;code class=&quot;highlighter-rouge&quot;&gt;POST my-index-01/_update_by_query?pipeline=my_pipeline_name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Вы также можете установить &lt;strong&gt;Pipeline&lt;/strong&gt; по умолчанию для индекса. Это означает, что любой документ, который будет проиндексирован в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;, будет автоматически применен к этому &lt;strong&gt;Pipeline&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;default_pipeline&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_pipeline_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также естественно вы можете использовать &lt;strong&gt;PIpeline&lt;/strong&gt; и при переиндексации. Каждый документ, который будет переиндексирован, пройдет через указанный &lt;strong&gt;PIpeline&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_pipeline_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ну и наконец вы можете использовать конкретный &lt;strong&gt;PIpeline&lt;/strong&gt; при создании какого-либо документа.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;?pipeline=my_pipeline_name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;The great time&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bobik Bob&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Использование PIpeline в Processors&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы также можете воспользоваться возможностью указать вместо processor другой существующий &lt;strong&gt;PIpeline&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_ingest/pipeline/add_new_test_filed_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;processors&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;add_new_test_filed&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Ingest node&lt;/strong&gt; предоставляет возможность предварительной обработки документа перед его индексированием&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PIpeline&lt;/strong&gt; - это набор процессоров, которые выполняются &lt;strong&gt;Ingest node&lt;/strong&gt; при индексировании документа.&lt;/li&gt;
  &lt;li&gt;Для проверки работы &lt;strong&gt;PIpeline&lt;/strong&gt; можно воспользоваться &lt;strong&gt;_simulate&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Если указаны несколько &lt;strong&gt;Processor&lt;/strong&gt; их выполнение будет производится по очереди&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sat, 19 Jun 2021 00:49:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ingest-node-and-pipelines</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ingest-node-and-pipelines</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Elk - Изменение данных</title>
        <description>&lt;p&gt;Иногда бывает необходимым поменять уже проиндексированные данные, например, добавить какое-то новое поле. Также может быть вам нужно просто удалить какой-либо документ.&lt;/p&gt;

&lt;p&gt;В этой статье поговорим о том какими методами воспользоваться для изменения документов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Переиндексация (Reindex)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Операция переиндексации&lt;/strong&gt; - это копия на определенный момент времени. Другими словами, в целевой &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; будут скопированы только те документы, которые существовали на момент запуска &lt;strong&gt;переиндексации&lt;/strong&gt;. Поэтому, если у вас есть новые документы, проиндексированные после начала операции &lt;strong&gt;переиндексации&lt;/strong&gt;, они не будут приняты во внимание.&lt;/p&gt;

&lt;p&gt;Для того чтобы скопировать все документы со старого &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; в новый используется &lt;strong&gt;_reindex&lt;/strong&gt;. Если при выполнении &lt;strong&gt;_reindex&lt;/strong&gt; у вас не создан конечный (destination) &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;, то он создастся автоматически. Т.е если у вас схема &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; не меняется, то нет смысла создавать его вручную.&lt;/p&gt;

&lt;p&gt;Пример переноса всех документов с &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index-01&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index-02&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Workspace Paused&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Множественная переиндексация&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также используя &lt;strong&gt;переиндексацию&lt;/strong&gt;, вы можете объединять данные из нескольких индексов в один, копируя все документы в новый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. Но тут важно, что если в двух &lt;code class=&quot;highlighter-rouge&quot;&gt;index &lt;/code&gt;документы с одинаковыми &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;type&lt;/code&gt; то в целевом &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; запишется только один документ. Точнее сперва проиндексируется документ с одного &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; и потом уже заменится документом другого &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Workspace Paused&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car 2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-03&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Используя свойство &lt;code class=&quot;highlighter-rouge&quot;&gt;version_type&lt;/code&gt; со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;external&lt;/code&gt; вы можете контролировать какое именно значение из нескольких &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; с одинаковым &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; проиндексируется. В таком подходе в целевом &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; окажется документом с наивысшим &lt;code class=&quot;highlighter-rouge&quot;&gt;version&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Workspace Paused&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car 2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car 2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car 2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-03&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-03&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Переиндексация уникальных документов&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если использовать примеры сверху, то сколько бы вы не запускали операцию &lt;strong&gt;_reindex&lt;/strong&gt; она всегда будет индексировать документы заново. Это происходит потому что по умолчанию работает подход &lt;code class=&quot;highlighter-rouge&quot;&gt;read-&amp;gt;delete-&amp;gt;ingest&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы индексировать только те документы, что не существуют в целевом (destination) &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; используется &lt;code class=&quot;highlighter-rouge&quot;&gt;op_type&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-03&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;op_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;create&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Переиндексация с удалённого кластера&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также в качестве source для &lt;strong&gt;_reindex&lt;/strong&gt; можно использовать удалённый (remote) кластер &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для использования данного метода придётся задать логин и пароль для подключения к удалённому кластеру.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;remote&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://my-remote-cluster:9200&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;USERNAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;connect_timeout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;60s&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-03&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Throttling&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Requests_per_second&lt;/strong&gt; -  параметр ограничивает количество документов, переиндексируемых по секундам. В следующем примере показано, как регулировать операцию переиндексации, ограничивая количество запросов в секунду до 100.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex?request_per_second=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Параллельная переиндексация&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Можно распараллелить задачу &lt;strong&gt;переиндексации&lt;/strong&gt; с помощью &lt;strong&gt;нарезки (Slicing)&lt;/strong&gt;. Распараллеливание может повысить эффективность вашего запроса. Чтобы настроить его, вам нужно определить количество срезов, которое вы хотите использовать. Вы также можете использовать значение auto, чтобы &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; выбирал сам.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex?slices=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Размер партии&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Переиндексация&lt;/strong&gt; происходит партиями (кусками), размер партии по умолчанию - 1000. Также вы можете задать свой значение, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;size&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-03&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Фильтр переиндексации&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Бывает так что вам нужно перенести не все документы с &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; а только какую-то часть. Допустим нужно отсортировать по полю &lt;code class=&quot;highlighter-rouge&quot;&gt;category&lt;/code&gt; значение которого является &lt;code class=&quot;highlighter-rouge&quot;&gt;unix&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для этого используем обычный &lt;code class=&quot;highlighter-rouge&quot;&gt;query&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_reindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-02&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unix&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;dest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index-03&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Изменение данных поля&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда мы говорили о переиндексации это означало что мы говорим о копировании данных. А что если нам нужно поменять какие-либо данный в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;? &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; предоставляет и такую возможность, для реализации которой придётся использовать &lt;strong&gt;_update_by_query&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Например, изменим значение поля &lt;code class=&quot;highlighter-rouge&quot;&gt;title&lt;/code&gt; с &lt;code class=&quot;highlighter-rouge&quot;&gt;Buy a car 7&lt;/code&gt; на &lt;code class=&quot;highlighter-rouge&quot;&gt;Don't buy a car&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index-01&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_update_by_query&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ctx._source.title = 'Don't buy a car'&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lang&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;painless&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match_phrase&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car 7&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-01&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Если вам нужно поменять значение нескольких полей добавляйте их в поле source разделяя знаком ;, например &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;source&quot;: &quot;ctx._source.title = 'Don't buy a car';ctx._source.category = 'Unix'&quot;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Также &lt;strong&gt;_update_by_query&lt;/strong&gt; используется для обновления структуры (mapping) вашего &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. Т.е изменить структуру &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; вы можете и без этой команды, но нужно также подтвердить изменение &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; выполнив &lt;strong&gt;_update_by_query&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для примера представим, что у нас есть поле car где описывается марка и модель автомобиля. Нам понадобилось разбить эти значения по отдельности.&lt;/p&gt;

&lt;p&gt;1.Добавляем данные в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BMW X3&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;2.Добавляем новое поле&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mark&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;3.Теперь пробуем запустить агрегирование терминов и в итоге получим значение 0&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs-demo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;terms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;car.mark&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;4.А теперь выполним &lt;strong&gt;_update_by_query&lt;/strong&gt; и заново запустим запрос&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_update_by_query&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs-demo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;terms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;car.mark&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Удаление документов&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Иногда необходимо удалить какой-либо документ из &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. Для этого используем &lt;strong&gt;_delete_by_query&lt;/strong&gt;, который нам и позволит это сделать.&lt;/p&gt;

&lt;p&gt;Например, если вы хотите удалить все документы с определённым полем &lt;code class=&quot;highlighter-rouge&quot;&gt;title&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-02&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_delete_by_query&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match_phrase&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buy a car 2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</description>
        <pubDate>Fri, 18 Jun 2021 21:29:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-changing-data</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-changing-data</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Elk - Анализаторы (Analyzers)</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Роль анализатора&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда строки помещаются в поле типа текста (&lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt;) при индексировании, они обрабатываются &lt;strong&gt;анализатором (Analyzer)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Анализатор Elasticsearch&lt;/strong&gt; можно рассматривать как конвейер, который получает &lt;code class=&quot;highlighter-rouge&quot;&gt;исходный текст&lt;/code&gt;, разбивает его на &lt;code class=&quot;highlighter-rouge&quot;&gt;токены&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;tokens&lt;/code&gt;) и возвращает их. Эти &lt;code class=&quot;highlighter-rouge&quot;&gt;токены&lt;/code&gt; записываются в &lt;a href=&quot;https://www.tipoit.kz/elk-inverted-index-and-doc-values&quot;&gt;инвертированный индекс&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Компоненты анализатора&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждое поле типа &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; обрабатываясь &lt;strong&gt;анализатором&lt;/strong&gt;, проходит 3 этапа.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html&quot;&gt;Character Filter&lt;/a&gt; (символьный фильтр)&lt;/th&gt;
      &lt;th&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html&quot;&gt;Tokenizer&lt;/a&gt; (Токенизатор)&lt;/th&gt;
      &lt;th&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html&quot;&gt;Token Filter&lt;/a&gt; (Фильтр токенизатора)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Первый компонент &lt;strong&gt;анализатора&lt;/strong&gt;, работает с исходным текстом. &lt;strong&gt;Character Filter&lt;/strong&gt; может принимать ноль или более фильтров. Цель символьного фильтра - преобразовать исходный текст в зависимости от используемого фильтра. Этот преобразованный текст передается следующему компоненту анализатора - &lt;strong&gt;Tokenizer&lt;/strong&gt;.&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Tokenizer&lt;/strong&gt; получает преобразованный текст после &lt;strong&gt;Character Filter&lt;/strong&gt; и создаёт &lt;code class=&quot;highlighter-rouge&quot;&gt;токены&lt;/code&gt;. У каждого &lt;strong&gt;анализатора (Analyzer)&lt;/strong&gt; должен быть настроен &lt;strong&gt;Tokenizer&lt;/strong&gt;. &lt;code class=&quot;highlighter-rouge&quot;&gt;Токены&lt;/code&gt;, созданные &lt;strong&gt;Tokenizer&lt;/strong&gt;, либо возвращаются &lt;strong&gt;анализатором&lt;/strong&gt;, либо передаются &lt;strong&gt;Token Filter&lt;/strong&gt;, если задана фильтрация.&lt;/td&gt;
      &lt;td&gt;Последний компонент анализатора. &lt;strong&gt;Token Filter&lt;/strong&gt; добавляют, удаляют или изменяют &lt;code class=&quot;highlighter-rouge&quot;&gt;токены&lt;/code&gt;, созданные &lt;strong&gt;Tokenizer&lt;/strong&gt;. &lt;strong&gt;Анализаторы (Analyzers)&lt;/strong&gt; имеют ноль или более фильтров токенов.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Все эти три этапа поле типа &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; проходит поэтапно.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование анализатора&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для использования &lt;strong&gt;анализатора&lt;/strong&gt; мы можем обратиться к его &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;_analyze&lt;/code&gt;. Вы можете использовать большое количество типов &lt;strong&gt;анализатора&lt;/strong&gt;. Весь список можно посмотреть на &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html&quot;&gt;офсайте&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Рассмотрим использование нескольких из них:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html&quot; title=&quot;Standard analyzer&quot;&gt;Standard Analyzer&lt;/a&gt; - заменяет все заглавные буквы на прописные, разбивает предложение на токены используя пробел либо спецсимволы.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_analyze&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;standard&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;It supports lower-casing and stop words.&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;it,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;supports,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lower,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;casing,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;words&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html&quot; title=&quot;Language analyzers&quot;&gt;Language Analyzers&lt;/a&gt; - действует почти так же как Standard, плюс еще убирает окончания со слов. Например, вместо того, чтобы искать &lt;code class=&quot;highlighter-rouge&quot;&gt;supports&lt;/code&gt; вы можете искать &lt;code class=&quot;highlighter-rouge&quot;&gt;support&lt;/code&gt;. Также удаляет стоп слова (&lt;code class=&quot;highlighter-rouge&quot;&gt;stopwords&lt;/code&gt;): &lt;code class=&quot;highlighter-rouge&quot;&gt;and&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;or&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;it&lt;/code&gt; и т.д. Можно задавать свои собственные &lt;code class=&quot;highlighter-rouge&quot;&gt;stopwords&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_analyze&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;english&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;It supports lower-casing and stop words.&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;support,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;lower,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;case,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stop,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;word&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если рассматривать область применения &lt;code class=&quot;highlighter-rouge&quot;&gt;Language analyzers&lt;/code&gt; то сразу модно понять что это упрощает пользователю поиск документов по ключевым словам. Логично что пользователь не будет искать слово &lt;code class=&quot;highlighter-rouge&quot;&gt;supports&lt;/code&gt;, он в 95% случаев будет искать именно слово &lt;code class=&quot;highlighter-rouge&quot;&gt;support&lt;/code&gt;. И благодаря использованию &lt;code class=&quot;highlighter-rouge&quot;&gt;Language analyzers&lt;/code&gt; ему также будут показаны документы где находится слово &lt;code class=&quot;highlighter-rouge&quot;&gt;supports&lt;/code&gt;. Тогда как без использования этого анализатора для поиска данного документа придётся искать слово &lt;code class=&quot;highlighter-rouge&quot;&gt;supports&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Применение на index&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь давайте рассмотрим, как это все применить к новому индексу. Для примера будем использовать следующие критерии:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Имя индекса будет &lt;code class=&quot;highlighter-rouge&quot;&gt;my-index-1&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Применим &lt;code class=&quot;highlighter-rouge&quot;&gt;Character Filter mapping&lt;/code&gt;, который позволяет заменять какое-либо значение на другое значение (My-App =&amp;gt; MyApp)&lt;/li&gt;
  &lt;li&gt;Применим &lt;code class=&quot;highlighter-rouge&quot;&gt;Tokenizer standard&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Применим &lt;code class=&quot;highlighter-rouge&quot;&gt;Token Filter lowercase, stop и snowball&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Применим наш анализатор к полю &lt;code class=&quot;highlighter-rouge&quot;&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1.Создаём сам индекс&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analysis&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;char_filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_char_filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mapping&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My-App =&amp;gt; MyApp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_snowball_filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;snowball&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;language&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;English&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_analyzer_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;custom&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;char_filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_char_filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;tokenizer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;standard&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;lowercase&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_snowball_filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_analyzer_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;search_analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;standard&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;2.Проверяем на какие токены поделиться наше поле &lt;code class=&quot;highlighter-rouge&quot;&gt;title&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_analyze&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Introducing beta releases: Elasticsearch and My-App!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_analyzer_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#tokens&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;introduc,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;beta,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;releas,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myapp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;3.Добавляем несколько документов&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Introducing beta releases: Elasticsearch and My-App!&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Introducing beta releases: Elasticsearch and My-App!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_analyzer_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;4.Делаем поиск по слову &lt;code class=&quot;highlighter-rouge&quot;&gt;releas&lt;/code&gt; и находим документы со словом &lt;code class=&quot;highlighter-rouge&quot;&gt;releases&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;releas&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

</description>
        <pubDate>Mon, 14 Jun 2021 23:31:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-analyzers</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-analyzers</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Playbooks и plays</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/SzSbF6XwDNE&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
  &lt;p&gt;Playbooks&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я уже ни раз упоминал о &lt;strong&gt;Ansible Playbook&lt;/strong&gt; в своих статьях ранее, и я думаю если вы читали то уже в целом поняли что это такое.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ansible Playbook&lt;/strong&gt; - это основной файл вашего проекта &lt;strong&gt;Ansible&lt;/strong&gt;. Именно в нём вы прописываете какие роли или задачи вы хотите выполнять и на каких конечных хостах.&lt;/p&gt;

&lt;p&gt;Для примера рассмотрим создание &lt;strong&gt;Ansible Playbook&lt;/strong&gt; для установки &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; на всех хостах в группе &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim install_nginx_playbook.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;become:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app_for_install:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yum:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{{ app_for_install }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{{ app_for_install }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;started&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook -i inventory/static.yml install_nginx_playbook.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Play&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Play&lt;/strong&gt; - это собственно то, что внутри &lt;strong&gt;Ansible Playbook&lt;/strong&gt;. &lt;strong&gt;Ansible Playbook&lt;/strong&gt; состоит из одного или множества &lt;strong&gt;play&lt;/strong&gt;. Т.е когда мы пишем какие-либо задачи (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt;) мы помещаем их в &lt;strong&gt;play&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Рассмотрим тот же пример что и с &lt;strong&gt;Ansible Playbook&lt;/strong&gt;, только поделим один &lt;strong&gt;play&lt;/strong&gt; на 2.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim install_nginx_plays.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#Play&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;started&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;become:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app_for_install:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yum:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{{ app_for_install }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#Play&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;started&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;become:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app_for_start:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{{ app_for_start }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;started&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook -i inventory/static.yml install_nginx_plays.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Это просто демонстрация примера, понятно, что в &lt;code class=&quot;highlighter-rouge&quot;&gt;production&lt;/code&gt; не нужно делить 2 однотипных задачи (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt;) на 2 разных &lt;strong&gt;play&lt;/strong&gt;.&lt;/p&gt;

</description>
        <pubDate>Sat, 12 Jun 2021 22:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-playbooks-and-plays</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-playbooks-and-plays</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Ansible - использование Handlers</title>
        <description>&lt;p&gt;Иногда при запуске какого-либо &lt;strong&gt;Ansible Playbook&lt;/strong&gt; у вас будут задачи, которые нужно выполнить если только предшествующая им задача была выполнена (этакая реализация условия if).&lt;/p&gt;

&lt;p&gt;Для примера у вас есть &lt;strong&gt;Ansible Playbook&lt;/strong&gt; где вы ставите &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; последней версии и перезапускаете службу &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yum:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;restarted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При первом запуске &lt;strong&gt;Ansible Playbook&lt;/strong&gt; всё пройдёт по плану у вас установиться &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; и перезапуститься служба. Но представим ситуации что вы запускаете эту задачу повторно (возможно в надежде что вышла более новая версия &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;), и в таком случае может получиться что &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt; у вас последней версии и установка будет пропущена, но сервис всё также перезапуститься. Логично в такой ситуации перезапускать сервис только если он был установлен либо обновлён. Для этого нам понадобится &lt;strong&gt;handlers&lt;/strong&gt;, который вызывается с использованием &lt;strong&gt;notify&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yum:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;notify:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;handlers:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;restarted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В такой реализации перезапуск сервиса будет только после того как сам сервис установился либо обновился, т.е задача &lt;code class=&quot;highlighter-rouge&quot;&gt;Install nginx&lt;/code&gt; отработала.&lt;/p&gt;

&lt;p&gt;По умолчанию &lt;strong&gt;handlers&lt;/strong&gt; запускаются после того, как все задачи в конкретном &lt;strong&gt;Ansible Playbook&lt;/strong&gt; были выполнены. Если вам нужно запустить &lt;strong&gt;handlers&lt;/strong&gt; раньше восспользуйтесь млдулем &lt;strong&gt;meta&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yum:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;notify:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Flush&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;handlers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;meta:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;flush_handlers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Second&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;task&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yum:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;handlers:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;service:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;restarted&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того, чтобы использовать &lt;strong&gt;handlers&lt;/strong&gt; ролях прописываем их в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;roles/rolename/handlers/main.yml&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 12 Jun 2021 20:25:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-using-handlers</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-using-handlers</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Ansible - использование переменных</title>
        <description>&lt;p&gt;Как и в любых языках программирования при написании &lt;strong&gt;Ansible playbook&lt;/strong&gt; вы можете использовать переменные. Делается это для:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Простота замены какого-либо значения. Например, когда у вас встречается одно и то же значение во многих местах &lt;strong&gt;Ansible playbook&lt;/strong&gt; правильней всего будет это значение вывести в отдельную переменную и заменить значение при необходимости достаточно будет всего в одном месте.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Использовать отдельные значения для каждой группы хостов. Например, вы можете ставить определённые утилиты для группы &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; хостов и уже совсем другие утилиты для группы &lt;code class=&quot;highlighter-rouge&quot;&gt;db&lt;/code&gt; хостов.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В общем использовать переменные можно для определения каких-либо фактов, путей к файлам, версий дистрибутива, который вы собираетесь ставить и т.д.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;как-задать-переменную&quot;&gt;Как задать переменную&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы задать значение переменной используя синтаксис &lt;code class=&quot;highlighter-rouge&quot;&gt;YAML&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_value&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;правила-наименования&quot;&gt;Правила наименования&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как и во многих языках программирования &lt;strong&gt;Ansible&lt;/strong&gt; имеет правила, описывающие стили наименования переменных. Например, имя переменной должно содержать только буквы, цифры и знак &lt;code class=&quot;highlighter-rouge&quot;&gt;_&lt;/code&gt;, также имя переменной должно начинаться либо с буквы, либо со знака &lt;code class=&quot;highlighter-rouge&quot;&gt;_&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Также не рекомендуется задавать имена переменным, которые используются как ключевые слова в &lt;a href=&quot;https://docs.python.org/3/reference/lexical_analysis.html#keywords&quot;&gt;Python&lt;/a&gt; либо &lt;a href=&quot;https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html#playbook-keywords&quot;&gt;Ansible&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;использование-переменной&quot;&gt;Использование переменной&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для использования переменной её достаточно вызвать в нужном вам месте помещая в &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;{{ }}&quot;&lt;/code&gt;. Использовать переменную можно в параметрах задач (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt;), в шаблонах (&lt;code class=&quot;highlighter-rouge&quot;&gt;templates&lt;/code&gt;), названиях задач (&lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt;) и т.д.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- name: Debug {{ my_var }}
  debug:
	msg: &quot;My variable value is {{ my_var }}&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Приоритет переменных&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В Ansible описать переменные можно используя разное количество мест. Также приоритет одних и тех же переменных, указанных в разных местах будет зависеть от того где указаны переменные.&lt;/p&gt;

&lt;p&gt;В этом списке будет указаны приоритет от самого высокого приоритета к меньшему.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;категория&lt;/th&gt;
      &lt;th&gt;описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;extra vars&lt;/td&gt;
      &lt;td&gt;ansible-playbook -e  “user=my_user”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;role params&lt;/td&gt;
      &lt;td&gt;переменные описанные в роли&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;set_facts / registered vars&lt;/td&gt;
      &lt;td&gt;переменные описанные в playbook используя set_facts&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;include_vars&lt;/td&gt;
      &lt;td&gt;добавляется указанием файла с переменными и списка переменных&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;task vars&lt;/td&gt;
      &lt;td&gt;переменные только для задачи&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;block vars&lt;/td&gt;
      &lt;td&gt;переменные только для блока&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;role vars&lt;/td&gt;
      &lt;td&gt;описываются в папке роли roles/role/vars/main.yml&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;play vars_files&lt;/td&gt;
      &lt;td&gt;добавляется указанием файла с переменными&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;play vars_prompt&lt;/td&gt;
      &lt;td&gt;вбивается вручную на запрос&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;play vars&lt;/td&gt;
      &lt;td&gt;указывается в playbook используя vars:&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;host facts&lt;/td&gt;
      &lt;td&gt;ansible facts&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;playbook host_vars&lt;/td&gt;
      &lt;td&gt;описываются в одноимённой директории с файлом именем хоста&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;inventory host_vars&lt;/td&gt;
      &lt;td&gt;описывается в файле инвентаризации&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;playbook group_vars&lt;/td&gt;
      &lt;td&gt;описываются в одноимённой директории с файлом именем группы хостов&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;inventory group_vars&lt;/td&gt;
      &lt;td&gt;описывается в файле инвентаризации&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;playbook group_vars/all&lt;/td&gt;
      &lt;td&gt;описываются в одноимённой директории с файлом all.yml&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;inventory group_vars/all&lt;/td&gt;
      &lt;td&gt;описывается в файле инвентаризации&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;role defaults&lt;/td&gt;
      &lt;td&gt;описываются в папке роли roles/role/defaults/main.yml&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Если вы только начали изучать &lt;strong&gt;Ansible&lt;/strong&gt; не думаю, что стоит зацикливаться и стараться досконально понять приоритетность описывания переменных. Так как вы не будете использовать больше половины вариантов указания переменных.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;playbook-host_vars&quot;&gt;playbook host_vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Суть в том, что в корневой папке создаётся еще одна папка &lt;code class=&quot;highlighter-rouge&quot;&gt;host_vars&lt;/code&gt; и уже в ней создаётся файл с переменными для определённого хоста. Имя файла должно быть таким же, как и имя хоста.&lt;/p&gt;

&lt;p&gt;Благодаря этому можно менять значение одной и той же переменной для каждого хоста.&lt;/p&gt;

&lt;p&gt;Например, представим, что у нас есть хост &lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt; и зададим для него значение переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;my_var&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;my_value&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir host_vars
vim host_vars/mylab-vm-2.dc2.my.local.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;playbook-group_vars&quot;&gt;playbook group_vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Суть в том, что в корневой папке создаётся еще одна папка &lt;code class=&quot;highlighter-rouge&quot;&gt;group_vars&lt;/code&gt; и уже в ней создаётся файл с переменными для определённой группы хостов. Имя файла должно быть таким же, как и имя группы.&lt;/p&gt;

&lt;p&gt;Благодаря этому можно менять значение одной и той же переменной для каждой группы, или описывать переменные только для одной группы.&lt;/p&gt;

&lt;p&gt;Например, представим, что у нас есть группа &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; и опишем для нее переменную.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir group_vars 
vim group_vars/web.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_value1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;set_facts&quot;&gt;set_facts&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используется как отдельная задача (&lt;code class=&quot;highlighter-rouge&quot;&gt;task&lt;/code&gt;) в &lt;strong&gt;Ansible Playbook&lt;/strong&gt; перед задачей, в которой используется переменная.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;set_facts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_value3&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Value is {{ my_var }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;registered-vars&quot;&gt;registered vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вывод задачи можно записать в переменную используя &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt;. Далее можно использовать эту переменную в своих целях.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/my.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;absent&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;register:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_var&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{{ my_var }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{'path': '/tmp/my.txt', 'changed': True, 'diff': {'before': {'path': '/tmp/my.txt', 'state': 'file'}, 'after': {'path': '/tmp/my.txt', 'state': 'absent'}}, 'state': 'absent', 'failed': False}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;inventory-host_vars&quot;&gt;inventory host_vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Описывает переменную для хоста в файле инвентаризации.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;inventory-group_vars&quot;&gt;inventory group_vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Описывает переменную для группы хостов в файле инвентаризации.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;role-vars&quot;&gt;role vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Описывает переменные, которые будут видны только внутри этой роли. Файл создаётся в директории роли, в подпапке &lt;code class=&quot;highlighter-rouge&quot;&gt;vars&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir roles/role/vars
vim roles/role/vars/main.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;task-vars&quot;&gt;task vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Переменные описываются в определённой задаче (&lt;code class=&quot;highlighter-rouge&quot;&gt;task&lt;/code&gt;) используя &lt;code class=&quot;highlighter-rouge&quot;&gt;vars&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Value is {{ my_var }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_var:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;adssadas&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;play-vars_prompt&quot;&gt;play vars_prompt&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перед выполнением задач (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt;) вам будет предоставлена возможность ввести вручную значение для переменной.&lt;/p&gt;

&lt;p&gt;Описывается в основном &lt;strong&gt;Ansible Playbook&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;vars_prompt:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_var&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;prompt:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;private:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;no&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;msg:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Value is {{ my_var }}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;extra-vars&quot;&gt;extra vars&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Указывается при вызове самой команды &lt;strong&gt;Ansible&lt;/strong&gt;. Может быть полезным если вы передаёте значение переменной с другого места самому &lt;strong&gt;Ansible&lt;/strong&gt;, например, через &lt;strong&gt;Gitlab&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook play1.yml -i inventory&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;tatic.yml -e &lt;span class=&quot;s2&quot;&gt;&quot;my_var=my_value&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;специальные-переменные-special-vars&quot;&gt;Специальные переменные (Special vars)&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Во многих языках программирования есть уже специальные зарезервированные переменные и конечно &lt;strong&gt;Ansible&lt;/strong&gt; в этом случае не исключение. В &lt;strong&gt;Ansible&lt;/strong&gt; существует несколько типов специальных переменных: &lt;code class=&quot;highlighter-rouge&quot;&gt;магические переменные, переменные соединения и факты (magic variables, connection variables, and facts)&lt;/code&gt;. Логично что такие переменные зарезервированы и использовать такие имена переменных не рекомендуется.&lt;/p&gt;

&lt;p&gt;Благодаря этим переменным &lt;strong&gt;Ansible&lt;/strong&gt; даёт нам возможность получить информацию о наших хостах, группах, ролях и другого благодаря &lt;code class=&quot;highlighter-rouge&quot;&gt;магическим переменным (magic variables)&lt;/code&gt;. Список всех этих магических переменных можно получить по &lt;a href=&quot;https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#magic-variables&quot;&gt;ссылке&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Под &lt;code class=&quot;highlighter-rouge&quot;&gt;фактами&lt;/code&gt; подразумеваются переменные, благодаря которым вы можете получить максимум информации о хосте, на котором вы выполняете задачи с помощью &lt;strong&gt;Ansible&lt;/strong&gt;. Для того чтобы получить список всех возможных переменных можно выполнить команду: &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible &amp;lt;hostname&amp;gt; -m ansible.builtin.setup&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Также вам понадобятся еще и &lt;code class=&quot;highlighter-rouge&quot;&gt;переменные соединения (connection variables)&lt;/code&gt;. Они используются для того чтобы задать параметры подключения к вашим хостам. Наиболее востребованные используются для установки пользователя, повышения привилегий, ip-адреса и т.д.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;best-practices&quot;&gt;Best Practices&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Прочитав всё выше изложенное проведу несколько заметок:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Всегда при создании переменных задавайте имя, которое максимально описывает назначение переменной&lt;/li&gt;
  &lt;li&gt;Если у вас есть переменные со значениями по умолчанию помещайте их в &lt;strong&gt;group_vars/all&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Предпочтительное описывать переменные в &lt;strong&gt;group_vars&lt;/strong&gt; и &lt;strong&gt;host_vars&lt;/strong&gt; чем делать это в файле инвентаризации&lt;/li&gt;
  &lt;li&gt;Если у вас есть переменные для определенной роли, то помещайте их в папку с ролью&lt;/li&gt;
  &lt;li&gt;Если у вас есть переменные, которые необходимо переопределить в роли описывайте эти переменные в вызове роли&lt;/li&gt;
  &lt;li&gt;Не храните пароли в переменных (в открытом виде)&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 12 Jun 2021 05:04:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-using-variables</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-using-variables</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Специальные команды Ansible</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Где использовать&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Специальные команды (ad hoc commands)&lt;/strong&gt; отлично подходят для редко повторяемых задач. Например, если вы хотите отключить все сервера, вы можете выполнить это вызвав одну команду. Специальная команда выглядит так:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;pattern] -m &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;module] -a &lt;span class=&quot;s2&quot;&gt;&quot;[module options]&quot;&lt;/span&gt; -b
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;[pattern]&lt;/code&gt; - хосты, к которым будет применяться команда&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;[module]&lt;/code&gt; - используемый модуль&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;[module options]&lt;/code&gt; - аргументы модуля&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-b&lt;/code&gt; - говорит о том, что для выполнения команды нужно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пример перезагрузки сервера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Модулем по умолчанию для &lt;strong&gt;Ansible&lt;/strong&gt; является модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;command&lt;/code&gt;. Вы можете использовать специальную задачу, чтобы вызвать командный модуль и перезагрузить сервера.&lt;/p&gt;

&lt;p&gt;Советую почитать &lt;a href=&quot;https://www.tipoit.kz/ansible-how-its-working&quot;&gt;статью&lt;/a&gt; чтобы понять, как прописывать сервера, на которых будет выполнятся команда.&lt;/p&gt;

&lt;p&gt;Для перезагрузки можно воспользоваться следующей командой, которая перезагрузит все хосты в группе &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible web -a &lt;span class=&quot;s2&quot;&gt;&quot;/sbin/reboot&quot;&lt;/span&gt; -i inventory/static.yml -b
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При этом ели у вас большее количество серверов выполнение перезагрузки может затянуться, так как &lt;strong&gt;Ansible&lt;/strong&gt; перезагружает каждый хост по очереди. Чтобы ускорить процесс можно воспользоваться параллельным выполнением команд.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible web -a &lt;span class=&quot;s2&quot;&gt;&quot;/sbin/reboot&quot;&lt;/span&gt; -i inventory/static.yml -f 10 -b
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Небольшой список  команд&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ansible web -m setup -i inventory/static.yml&lt;/code&gt; - выводит &lt;code class=&quot;highlighter-rouge&quot;&gt;Ansible facts&lt;/code&gt; (системная информация о хосте)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ansible web -m copy -a &quot;src=/etc/hosts dest=/tmp/hosts mode=600 owner=admin group=admin&quot; -i inventory/static.yml&lt;/code&gt; - скопирует файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/hosts&lt;/code&gt; на все хосты в группе &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; и раздаст права на файл&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ansible web -m yum -a &quot;name=vim state=present&quot; -i inventory/static.yml -b&lt;/code&gt; - поставит на все хосты в группе &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt; утилиту &lt;code class=&quot;highlighter-rouge&quot;&gt;vim&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ansible web -m user -a &quot;name=username password=&amp;lt;crypted password here&amp;gt;&quot;-i inventory/static.yml&lt;/code&gt; - создаст пользователя username&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ansible web -m service -a &quot;name=nginx state=restarted&quot; -i inventory/static.yml&lt;/code&gt; - перезапустит сервис &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ansible web -m ping -i inventory/static.yml&lt;/code&gt; - проверить доступность всех хостов&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 12 Jun 2021 02:27:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-ad-hoc-commands</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-ad-hoc-commands</guid>
        
        <category>all</category>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Ansible - настройка авторизации</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/2RWQ5aNctT4&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Для авторизации на клиентских устройствах можно использовать 2 метода:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Авторизация с использованием логина и пароля (рассматривалось в более ранней статье)&lt;/li&gt;
  &lt;li&gt;Авторизация с помощью сертификата&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-8.png&quot; alt=&quot;Ansible auth types&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Авторизация с помощью сертификата&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы нам авторизоваться на клиентском устройстве с помощью сертификата нужно выполнить следующие действия:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаём сертификат для пользователя на хосте, с установленным &lt;strong&gt;Ansible&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Распространяем этот сертификат на другие хосты&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание пары ssh ключей&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;На хосте с установленным &lt;strong&gt;Ansible&lt;/strong&gt; генерируем ключи для пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt; (какой пользователь решаете сами). Естественно подразумевается, что и на клиентских устройствах тоже будет присутствовать этот пользователь. Т.е проще чтобы у вас клиентские устройства разворачивались уже с этим пользователем.&lt;/p&gt;

&lt;p&gt;Для этого выполняем:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh-keygen
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;На все запросы просто нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В итоге получаем пару закрытого и открытого ключа в каталоге &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls ~/.ssh/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Доставка открытого ключа на клиентское устройство&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-9.png&quot; alt=&quot;copy public key&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Теперь надо полученный публичный ключ доставить на клиентские устройства, чтобы мы могла заходить на них без пароля с основного хоста &lt;strong&gt;Ansible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для этого выполняем:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh-copy-id admin@mylab-vm-2.dc2.my.local
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;где:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt; - пользователь на клиентском устройстве&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt; - наше клиентское устройство, на который мы копируем сертификат&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Проверка&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь вы можете попытаться залогиниться с хоста &lt;strong&gt;Ansible&lt;/strong&gt; на клиентское устройства. В идеале вы должны залогиниться без запроса пароля.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh mylab-vm-2.dc2.my.local
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь давайте проверим выполнив, команду &lt;strong&gt;Ansible&lt;/strong&gt;, которая перезагрузит наше клиентское устройство:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible mylab-vm-2.dc2.my.local  -a &lt;span class=&quot;s2&quot;&gt;&quot;sudo /sbin/reboot&quot;&lt;/span&gt; -i inventory/static.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Sudo команды без пароля&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перезагрузка - это команда, выполняемая с наивысшими правами &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt;. Т.е &lt;strong&gt;Ansible&lt;/strong&gt; пытается выполнить команду от &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt;, но сталкивается с проблемой что на клиентском устройстве для этого нужно ввести пароль.&lt;/p&gt;

&lt;p&gt;Для того чтобы такого не происходило можно отключить запрос пароля для команд &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt; для пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для этого на клиентском устройстве:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/sudoers.d/admin
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ALL=(ALL)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;NOPASSWD:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ALL&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Рекомендуется вместо &lt;code class=&quot;highlighter-rouge&quot;&gt;ALL&lt;/code&gt; прописывать конкретные команды, которые можно выполнять без запроса пароля.&lt;/p&gt;

&lt;p&gt;Либо вы можете запускать команду &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible-playbook&lt;/code&gt; и использованием опции &lt;code class=&quot;highlighter-rouge&quot;&gt;--ask-become-pass&lt;/code&gt;, которая приведёт к запросу пароля для sudo. Решать какой именно подход выбирать остаётся за вами.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Автоматизация всего этого&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы не выполнять все эти действия на каждом хосте руками можно скачать готовый &lt;strong&gt;Ansible&lt;/strong&gt; playbook c &lt;a href=&quot;https://github.com/ynwasg90/ansible-ssh-keygen/tree/main&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 10 Jun 2021 06:23:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-authorization-configure</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-authorization-configure</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Как работает Ansible</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Ansible playbook&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы что-то настроить или установить на клиентском хосте нужно выполнить Ansible playbook. &lt;strong&gt;Ansible playbook&lt;/strong&gt; - файл, в котором описываются задачи (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;roles&lt;/code&gt;), которые и должны выполняться на клиентском хосте.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ansible playbook&lt;/strong&gt; создаётся и редактируется с использованием синтаксиса &lt;code class=&quot;highlighter-rouge&quot;&gt;YAML&lt;/code&gt;. Обязательное требование соблюдений отступов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-5.png&quot; alt=&quot;Ansible playbook&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;YAML&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;YAML (Ain’t Markup Language)&lt;/strong&gt; — это язык для хранения информации в формате понятном человеку. Его название расшифровывается как, «Не язык разметки». Язык похож на &lt;code class=&quot;highlighter-rouge&quot;&gt;XML&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt;, чаще всего используется как файл конфига для ПО и контейнеризации.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Модули Ansible&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;О них уже была речь в первой статье о &lt;strong&gt;Ansible&lt;/strong&gt;. Собственно, благодаря модулям и выполняются все операции, описанные в &lt;strong&gt;Ansible playbook&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Пример использования модуля &lt;code class=&quot;highlighter-rouge&quot;&gt;shell&lt;/code&gt; (выполнить bash команду):&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;shell&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;shell:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;useradd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;demo&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Inventory&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Файл инвентаризации, в котором записаны все ваши клиентские хосты, на которых вы собираетесь выполнять содержимое &lt;strong&gt;Ansible playbook&lt;/strong&gt;. Желательно файл с хостами помещать в отдельную директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;inventory&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Хосты также можно разбивать по группам, как основным, так и вложенным.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-6.png&quot; alt=&quot;Ansible inventory&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Пример синтаксиса:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#группа&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хостов&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#dns&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;именна&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хостов&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myweb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.aaa.lan:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myweb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.aaa.lan:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#ip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хоста&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:``&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также можно задать конкретные переменные для определённых хостов или группы, например, если нужно переписать глобальные переменные.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;web:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myweb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.aaa.lan:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ntp_source:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;192.168&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также существует второй вариант синтаксиса файла инвентаризации &lt;code class=&quot;highlighter-rouge&quot;&gt;INI&lt;/code&gt;. Но мне по душе первый &lt;code class=&quot;highlighter-rouge&quot;&gt;YAML&lt;/code&gt; и в дальнейшем я буду использовать именно этот вариант.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myweb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.aaa.lan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myweb&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.aaa.lan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;web:vars&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ansible_user=admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Роли (Roles)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Роль&lt;/strong&gt; - файл с задачами (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt;), который используется в основном &lt;strong&gt;Ansible playbook&lt;/strong&gt;. В одном &lt;strong&gt;Ansible playbook&lt;/strong&gt; можно использовать множественное количество ролей. Рекомендуется разбивать задачи по ролям, нежели писать все задачи (&lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt;) в один файл &lt;strong&gt;Ansible playbook&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Роли&lt;/strong&gt; помещаются в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;roles&lt;/code&gt;, далее идёт папка с наименованием роли, вложенная папка &lt;code class=&quot;highlighter-rouge&quot;&gt;tasks&lt;/code&gt; и уже в этой папке файл &lt;code class=&quot;highlighter-rouge&quot;&gt;main.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Например, если вы решили создать роль &lt;code class=&quot;highlighter-rouge&quot;&gt;delete&lt;/code&gt; то путь к файлу роли будет выглядеть так: &lt;code class=&quot;highlighter-rouge&quot;&gt;roles/delete/tasks/main.yml&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Отмена операций&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если в какой-то момент выполнения вашего большого &lt;strong&gt;Ansible playbook&lt;/strong&gt; вы получили ошибку, то выполненные команды откатываться не будут. &lt;strong&gt;Ansible&lt;/strong&gt; не предоставляет возможности откатить все изменения назад.&lt;/p&gt;

&lt;p&gt;Благодаря модулям, задачи, которые уже выполнялись ранее не будут выполняться повторно.&lt;/p&gt;

&lt;p&gt;Например, если у вас есть задача создания файла &lt;strong&gt;Ansible&lt;/strong&gt; сделает следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверит есть ли такой файл, с нужными настройками&lt;/li&gt;
  &lt;li&gt;Если его нет, то создаст, а если есть, то просто пропустит задачу&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пример&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для примера возьмём сервер &lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt; и создадим на нём пустой файл /tmp/my.txt.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;На хосте с установленным &lt;strong&gt;ansible&lt;/strong&gt; создаём директорию. Такой хост часто называют &lt;code class=&quot;highlighter-rouge&quot;&gt;Control Machine&lt;/code&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir play1
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;paly1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём основной файл &lt;strong&gt;Ansible playbook&lt;/strong&gt;, содержимое которого будет выполнено на конечном хосте &lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt;. Для создания файла будет использоваться модуль &lt;a href=&quot;https://docs.ansible.com/ansible/2.9/modules/file_module.html#file-module&quot;&gt;file&lt;/a&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim play1.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;указываем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;на&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;каких&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хостах&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполнять&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;задачи&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;tasks:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/my.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;owner:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;group:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mode:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0644&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;touch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;мы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;вызываем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;роль,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;которая&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;удалит&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;файл&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_role:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Для демонстрации работы ролей создадим роль с названием &lt;code class=&quot;highlighter-rouge&quot;&gt;delete&lt;/code&gt;, которая удалит созданный файл.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir -p roles/delete/tasks
vim roles/delete/tasks/main.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/tmp/my.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;state:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;absent&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём файл с описанием хоста &lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir inventory
vim inventory/static.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;all:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Для того чтобы &lt;strong&gt;Ansible хост&lt;/strong&gt; мог подключаться к цели нужно добавить &lt;code class=&quot;highlighter-rouge&quot;&gt;fingerprint&lt;/code&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh mylab-vm-2.dc1.my.local
yes
CTRL+C
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Далее можно проверить что наш конечный хост доступен запуская &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible ping&lt;/code&gt;. Где &lt;code class=&quot;highlighter-rouge&quot;&gt;-u &lt;/code&gt;указывает пользователя на стороне конечного хоста и &lt;code class=&quot;highlighter-rouge&quot;&gt;--ask-pass&lt;/code&gt; выдаст запрос на пароль от этого пользователя.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible all -m ping -i inventory/static.yml --ask-pass -u admin
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;p&gt;Должны получить ответ вида:&lt;/p&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;SUCCESS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ansible_facts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;discovered_interpreter_python&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/usr/libexec/platform-python&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;changed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ping&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;pong&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;И собственно запускаем самый главный &lt;strong&gt;Ansible playbook&lt;/strong&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;play1.yml&lt;/code&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible-playbook -i inventory/static.yml play1.yml --ask-pass -u admin
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;p&gt;Должны получить ответ вида:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PLAY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Gathering&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Facts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*****************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;include_role&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*******************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;********************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changed:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PLAY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RECAP&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylab-vm&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;changed=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;unreachable=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;failed=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;skipped=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;rescued=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ignored=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Что произошло&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-7.png&quot; alt=&quot;Ansible&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Мы добавили &lt;code class=&quot;highlighter-rouge&quot;&gt;fingerprint&lt;/code&gt; для хоста &lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Мы проверили что хост &lt;code class=&quot;highlighter-rouge&quot;&gt;mylab-vm-2.dc2.my.local&lt;/code&gt; доступен, и мы можем к нему подключиться по &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, при этом конкретно задали логин и пароль для подключения.&lt;/li&gt;
  &lt;li&gt;Мы выполнили на конечном хосте команды, которые прописывали в &lt;strong&gt;Ansible playbook&lt;/strong&gt;. Т.е &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible хост&lt;/code&gt; подключился к конечному хосту по &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh&lt;/code&gt; под пользователем &lt;code class=&quot;highlighter-rouge&quot;&gt;admin&lt;/code&gt; и выполним команды на этом хосте.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Структура файлов&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#основная&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;папка&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;play&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#файл&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хостами,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;на&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;который&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выполняются&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;задачи&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(tasks)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;├──inventory/static.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#роль,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;которая&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;удаляет&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;файл&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;├──roles/delete/tasks/main.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#Ansible&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;playbook&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;основной&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;файл&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;├──play&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.yml&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Видео&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/s3yWtY6yCMU&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Tue, 08 Jun 2021 19:53:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-how-its-working</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-how-its-working</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Что такое Ansible</title>
        <description>&lt;p&gt;&lt;strong&gt;Ansible&lt;/strong&gt; - язык автоматизации, помогающий автоматизировать и ускорить выполнение рутинных задач. Также выполняет роль описания вашей IT инфраструктуры благодаря использованию файла инвентаризации (inventory). Автоматически выполняет задачи используя &lt;code class=&quot;highlighter-rouge&quot;&gt;Ansible Playbooks&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-1.png&quot; alt=&quot;ручная работа&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Идеально подходит для реализации модели &lt;code class=&quot;highlighter-rouge&quot;&gt;CI/CD&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Также плюс, который выявлен в процессе использования — это то, что один раз написали &lt;code class=&quot;highlighter-rouge&quot;&gt;Ansible Playbook&lt;/code&gt; и уже потом через год не надо вспоминать, как и что вы там делали, как это иногда бывает при ручной установке чего-либо.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-2.png&quot; alt=&quot;save your time&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;ansible tower&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Платный фреймворк для ansible от &lt;code class=&quot;highlighter-rouge&quot;&gt;RedHat&lt;/code&gt; для управления, защиты автоматизации &lt;strong&gt;Ansible&lt;/strong&gt; с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;U&lt;/code&gt;I интерфейса и &lt;code class=&quot;highlighter-rouge&quot;&gt;RESTful API&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Где применяется&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Применить &lt;strong&gt;Ansible&lt;/strong&gt; можно для реализации следующих задач:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Выкладка приложений&lt;/li&gt;
  &lt;li&gt;Конфигурация ОС или приложений&lt;/li&gt;
  &lt;li&gt;Автоматизация рабочего процесса&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Безагентная архитектура&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Преимущество &lt;strong&gt;Ansible&lt;/strong&gt; заключается в том, что не нужно на каждый управляемый сервер устанавливать какой-либо агент. Для &lt;code class=&quot;highlighter-rouge&quot;&gt;unix-based&lt;/code&gt; систем используется &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, а для &lt;code class=&quot;highlighter-rouge&quot;&gt;windows&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;WinRM&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-3.png&quot; alt=&quot;save your time&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Поддерживаемые системы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используя &lt;strong&gt;Ansible&lt;/strong&gt; вы можете управлять всеми часто используемыми ОС, также некоторыми специфическими приложениями (&lt;code class=&quot;highlighter-rouge&quot;&gt;postgresql, mysql, mssql&lt;/code&gt; и т.д) или сетевым оборудованием (если написан модуль).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/ansible/ansible-4.png&quot; alt=&quot;multi-platform&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Модульность&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для конфигурирования или выполнения чего-либо на гостевой ОС &lt;strong&gt;Ansible&lt;/strong&gt; использует модули, общее количество которых более 450. Например, для настройки сети в ОС используется модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;network&lt;/code&gt;, а для создания и редактирования файлов - &lt;code class=&quot;highlighter-rouge&quot;&gt;files&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html&quot;&gt;Ссылка&lt;/a&gt; для просмотра всех модулей.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Cообщество&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Сообщество &lt;strong&gt;Ansible&lt;/strong&gt; активное и насчитывает большое количество сторонников данного продукта . На &lt;code class=&quot;highlighter-rouge&quot;&gt;github&lt;/code&gt; можно найти множество самописных модулей и готовых &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook&lt;/code&gt;, заточенных под конкретные задачи.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Примеры использования&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рассмотрим немного ситуаций, где вы можете применить &lt;strong&gt;Ansible&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Допустим ситуации где вам нужно установить новое приложение или обновить старое на 100 серверах. Без использования ansible на это может уйти и пол дня, а с использование ansible минут 30.&lt;/li&gt;
  &lt;li&gt;Выкладка приложения с использованием нескольких этапов (компиляция, выкладка, замена файлов конфигурации) может также занимать длительное время и замедлять процесс разработки. С использованием ansible это всё можно автоматизировать и ускорить процесс разработки&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Это лишь малая часть примеров где и для чего можно воспользоваться &lt;strong&gt;ansible&lt;/strong&gt;, который сэкономит вам время, которое вы можете потратить на что-то более интересное, чем выполнение рутинных задач.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Установка ansible&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Установка не включает в себя каких-то сложностей.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo pip install ansible
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Установка Ansible на RHEL, CentOS или Fedora:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install epel-release
sudo yum install ansible
sudo dnf install ansible
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Установка Ansible в Ubuntu:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 08 Jun 2021 05:12:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-about</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-about</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>co/cd</category>
        
        
      </item>
    
      <item>
        <title>ELK - Вложенные типы данных</title>
        <description>&lt;h2 id=&quot;потребность-во-вложенном-типе-nested-type&quot;&gt;Потребность во вложенном типе (Nested Type)&lt;/h2&gt;

&lt;p&gt;Для того, чтобы понять зачем это нужно рассмотрим пример.&lt;/p&gt;

&lt;p&gt;Добавляем водителей, которые находятся в разных городах и работают в разных компаниях:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;POST denormalized_cars/_bulk
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;:1&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;True&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;:[&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Egor Hdasda&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Ebobo&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Popopo&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}]}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;:2&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;False&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;:[&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Overton&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Globex&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Egor Fghgfhgfh&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Almaty&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}]}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;:3&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;3&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;False&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;:[&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Egor Hdasda&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Ebobo&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Popopo&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Tim Roes&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Japan&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Kiwi&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Делаем запрос для выборки водителя Egor, работающего в Olx:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET denormalized_cars/_search
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;query&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;bool&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;must&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;drivers.name&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;egor&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
        &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;drivers.company.name.keyword&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;А в итоге получаем ответ, в котором все водители (у правильного в title прописано true).&lt;/p&gt;

&lt;p&gt;Теперь разберёмся почему собственно так вышло. Поля name и company.name являются внутренними объектами JSON поля массива drivers. Когда вы индексируете документ в Elasticsearch, объект JSON разделяется в соответствии с внутренними требованиями Lucene. Ожидаемая связь между name и company.name теряется. Т.е они разбиваются на 2 несвязанных поля.&lt;/p&gt;

&lt;p&gt;Для того, чтобы не было таких ситуаций как раз и используется  вложенной тип.&lt;/p&gt;

&lt;h2 id=&quot;вложенный-тип-данных&quot;&gt;Вложенный тип данных&lt;/h2&gt;

&lt;p&gt;Создаём индекс используя nested:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PUT nested_cars
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;mappings&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
      &lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;,
        &lt;span class=&quot;s2&quot;&gt;&quot;fields&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
      &lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;nested&quot;&lt;/span&gt;,
        &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;,
            &lt;span class=&quot;s2&quot;&gt;&quot;fields&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;
              &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
          &lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;object&quot;&lt;/span&gt;,
            &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;,
                &lt;span class=&quot;s2&quot;&gt;&quot;fields&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                  &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;
                  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
              &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
              &lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;object&quot;&lt;/span&gt;,
                &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                  &lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;,
                    &lt;span class=&quot;s2&quot;&gt;&quot;fields&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                      &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                        &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;
                      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
                    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
                  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
              &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

POST nested_cars/_bulk
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;:1&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;False&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;:[&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Egor Hdasda&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Ebobo&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Popopo&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}]}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;:2&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;True&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;:[&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Overton&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Globex&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Egor Fghgfhgfh&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Almaty&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}]}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;:3&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;3&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;False&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;:[&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Egor Hdasda&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Ebobo&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Popopo&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}&lt;/span&gt;,&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Tim Roes&quot;&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;company&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;country&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Japan&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;Kiwi&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}}]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И делаем запрос используя nested:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET nested_cars/_search
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;query&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;nested&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;path&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;,
      &lt;span class=&quot;s2&quot;&gt;&quot;query&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;bool&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;must&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;s2&quot;&gt;&quot;drivers.name&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;egor&quot;&lt;/span&gt;
              &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
            &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;s2&quot;&gt;&quot;drivers.company.name.keyword&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;
              &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;И получаем в итоге только один документ с правильным водителем:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;True&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;drivers&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Gabdi Overton&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;company&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;country&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Shymkent&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Globex&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Egor Fghgfhgfh&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;company&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;country&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Almaty&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Olx&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Вложенный тип позволяет индексировать и запрашивать массивы объектов независимо друг от друга.&lt;/li&gt;
  &lt;li&gt;Обновление вложенного объекта требует полной переиндексации корневого объекта и всех его других вложенных объектов.&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Mon, 03 May 2021 20:52:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-nested-types</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-nested-types</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Индексирование элементов list</title>
        <description>&lt;p&gt;По умолчанию &lt;strong&gt;list&lt;/strong&gt; имеет только значения (value) и не имеет индекса (key). Но бывают ситуации когда не плохо было бы иметь этот индекс.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;with_indexed_items&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для решения такой задачи можно использовать &lt;strong&gt;with_indexed_items&lt;/strong&gt; вместо &lt;code class=&quot;highlighter-rouge&quot;&gt;with_items&lt;/code&gt;. Он добавляет к каждому значению &lt;strong&gt;list&lt;/strong&gt; числовой индекс, начиная с 0.&lt;/p&gt;

&lt;p&gt;Для обращения к индексу используется &lt;code class=&quot;highlighter-rouge&quot;&gt;item.0&lt;/code&gt;, для обращения к значению - &lt;code class=&quot;highlighter-rouge&quot;&gt;item.1&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пример&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;localhost&lt;/span&gt;

  &lt;span class=&quot;s&quot;&gt;tasks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;set_fact&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;my_list&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;dadasdad&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;fdsfsdfs&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;fd32wer2&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;das902id&lt;/span&gt;

    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;item.0&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;item.1&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;}}&quot;&lt;/span&gt;
      &lt;span class=&quot;s&quot;&gt;with_indexed_items&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;my_list&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;}}&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В результате&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*****************************************************************************************************************************************&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(item=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;u'dadasdad'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; key is 0, value is dadasdad&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(item=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;u'fdsfsdfs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; key is 1, value is fdsfsdfs&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(item=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;u'fd&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;wer&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; key is 2, value is fd32wer2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ok:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(item=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;u'das&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;902&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; key is 3, value is das902id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 27 Apr 2021 16:37:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-indexing-list</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-indexing-list</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>DELL SC5020 - Отзыв (Катастрофа, которая не произошла)</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Бывший Compellent&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Раньше серию СХД &lt;code class=&quot;highlighter-rouge&quot;&gt;Compellent&lt;/code&gt; выпускала одноименная компания, которая была основана в 2002 году.&lt;/p&gt;

&lt;p&gt;В 2010 году продалась &lt;code class=&quot;highlighter-rouge&quot;&gt;DELL&lt;/code&gt; и теперь это уже схд от &lt;code class=&quot;highlighter-rouge&quot;&gt;DELL&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Документация&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;На мой взгляд очень важная составляющая особенно когда у тебя что-то пошло ни так. Так вот, как по мне не очень хорошо у данной СХД с этим компонентом. Да инструкция то сама присутствует, и да там в принципе всё даже расписано что куда нужно тыкать. Но есть один жирный минус, в этой инструкции не расписано как именно работает то, что ты хочешь сделать, по крайней мере в открытом доступе.&lt;/p&gt;

&lt;p&gt;Вот допустим про snapshot написано, что рекомендуется его использовать обязательно там раз в день. А кто скажет зачем оно мне?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Собственно об этом snapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;У самого устройства существует 3 &lt;code class=&quot;highlighter-rouge&quot;&gt;tier&lt;/code&gt;. В моих руках была СХД с 2 &lt;code class=&quot;highlighter-rouge&quot;&gt;tier&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Tier1&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;ssd&lt;/code&gt; диски для горячих данных&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Tier3&lt;/code&gt; - &lt;code class=&quot;highlighter-rouge&quot;&gt;sas&lt;/code&gt; диски для холодных данных&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Суть в том, что горячие данные или те что сейчас записываются хранятся на &lt;code class=&quot;highlighter-rouge&quot;&gt;Tier1&lt;/code&gt;, а дальше уже по мере остывания скидываются на &lt;code class=&quot;highlighter-rouge&quot;&gt;Tier3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Так каким образом это происходит? Вроде если это умная СХД, то она должна делать это сама в режиме реального времени. Но у &lt;code class=&quot;highlighter-rouge&quot;&gt;DELL SC5020&lt;/code&gt; в этом также задействован механизм &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt;. Разбор по пунктам:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вы записали данные на &lt;code class=&quot;highlighter-rouge&quot;&gt;Tier1&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Вы сделали &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Через час еще один &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Через 70 минут устарел ваш первый &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;И с этого устаревшего &lt;code class=&quot;highlighter-rouge&quot;&gt;snapshot&lt;/code&gt; холодные данные переехали на &lt;code class=&quot;highlighter-rouge&quot;&gt;Tier3&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Компрессия и дедупликация&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В этой СХД присутствует данный функционал. На скриншоте видно, как оно сжимает данные, с учетом того что на ней лежат разносортные виртуальные сервера. В &lt;code class=&quot;highlighter-rouge&quot;&gt;TIER1&lt;/code&gt; это не работает.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/all/2021-04-25_14-42.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Что если не делать snapshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если его не делать, то сперва полностью забьётся &lt;code class=&quot;highlighter-rouge&quot;&gt;Tier1&lt;/code&gt; и только потом данные будут писаться в &lt;code class=&quot;highlighter-rouge&quot;&gt;Tier3&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Средства управления&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для управления схд придётся ставить утилиту &lt;code class=&quot;highlighter-rouge&quot;&gt;DELL Storage Center&lt;/code&gt;, да еще и запускать эту утилиту от имени администратора.&lt;/p&gt;

&lt;p&gt;Согласитесь, хочется это делать просто через &lt;code class=&quot;highlighter-rouge&quot;&gt;web&lt;/code&gt;, имея весь функционал утилиты. В экстренный момент то может вылезти боком.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Что будет если закончится место?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ох очень интересный вопрос. Перед тем как продолжить читать подумайте сами к чему это может привести и как бы вы с этим справились.&lt;/p&gt;

&lt;p&gt;На самой СХД есть &lt;code class=&quot;highlighter-rouge&quot;&gt;trashhold&lt;/code&gt; в процентах, который уведомит вас о том, что место кончается. Но бывают ситуации, когда кто-то либо не прочитает, либо посмотрит в виртуализации место, а там будет его еще полно (привет VMFS-5) и место в итоге таки закончится.&lt;/p&gt;

&lt;p&gt;Так вот с таким мы и столкнулись в своё время. Из-за того, что &lt;code class=&quot;highlighter-rouge&quot;&gt;esxi&lt;/code&gt; на хостах был древний (денег нет, денег нет) мы использовали &lt;code class=&quot;highlighter-rouge&quot;&gt;VMFS-5&lt;/code&gt;. Если кто не знал при удалении данных с СХД нужно выполнять команду на &lt;code class=&quot;highlighter-rouge&quot;&gt;ESXI&lt;/code&gt; чтобы она поняла, что нужно высвободить место.&lt;/p&gt;

&lt;p&gt;У нас была срочная (как всегда) задача мигрировать много данных на этот &lt;code class=&quot;highlighter-rouge&quot;&gt;DELL SC5020&lt;/code&gt; и потом уже с него на другую СХД. В какой-то момент сработал &lt;code class=&quot;highlighter-rouge&quot;&gt;alert&lt;/code&gt;, но в связи с тем, что сроки были сжатые и в целом еще много что нужно было сделать человек зашёл в &lt;code class=&quot;highlighter-rouge&quot;&gt;vcenter&lt;/code&gt; и место посмотрел там, а там всё было ровно. Но благодаря &lt;code class=&quot;highlighter-rouge&quot;&gt;VMFS-5&lt;/code&gt; сама СХД не знала, что место нужно освободить или ей просто нужно больше времени чтобы это осознать. В итоге на утро получили несколько хостов с виртуалками у которых была ошибка &lt;code class=&quot;highlighter-rouge&quot;&gt;I/O операций&lt;/code&gt;. Место реально закончилось, но не в виртуализации.&lt;/p&gt;

&lt;p&gt;И тут первая мысль в голове надо что-то удалить с схд. Хотя учитывая, что используется &lt;code class=&quot;highlighter-rouge&quot;&gt;VMFS-5&lt;/code&gt; это скорее всего не помогло бы и нужно было еще запускать unmap. Но не суть в целом СХД может забиться и, если используется не для виртуализации.&lt;/p&gt;

&lt;p&gt;Так вот удалить оттуда ничего не получится, так как СХД падает в emergency mode и доступна только для чтения. И сами вы это исправить не сможете, звоните в &lt;code class=&quot;highlighter-rouge&quot;&gt;support&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сам support&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В зависимости от времени в которое вы звоните вы можете попасть либо на русскоязычную поддержку, либо на англоязычную. В нашем же случае 90% звонков попадали на англоязычных.&lt;/p&gt;

&lt;p&gt;А теперь интересный момент. Точно также каждый инженер там дежурит по времени. Мы дозвонились и открыли ticket, инженер сказал что нужно прямое подключение через консольный кабель (совет хранить эти кабеля в той же стойке). В нашем случае туда пришлось ехать, на что ушло около 30 минут. По приезду и долгому дозвону выяснилось, что инженер принимавший нашу заявку ушёл, его время вышло. И нам пришлось заново всё объяснять уже другим людям.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Spare&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;При настройке СХД вы не сможете настроить отдельный spare на определённый диск. Это же умная СХД, она сама забирает под spare место на всех дисках, общий объём которых равно одному диску в &lt;code class=&quot;highlighter-rouge&quot;&gt;TIER&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;И тут очень странный момент, о котором я не сразу подумал. Инженер начал искать spare диск. Именно физический диск, на СХД которая не использует физический spare.&lt;/p&gt;

&lt;p&gt;В итоге его вердикт был spare нет, место забито, &lt;code class=&quot;highlighter-rouge&quot;&gt;volume&lt;/code&gt; удалять нельзя (первое что они предложили) значит надо дополнить СХД парочкою дисков. Потом добавить их в забитый &lt;code class=&quot;highlighter-rouge&quot;&gt;TIER&lt;/code&gt; и всё заработает.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Поиск дисков&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;У нас был &lt;code class=&quot;highlighter-rouge&quot;&gt;support&lt;/code&gt;, включающий замену компонентов в течении &lt;code class=&quot;highlighter-rouge&quot;&gt;4 часов&lt;/code&gt;. Но самый прикол что дисков в Казахстане нигде не было. Да и в целом физически никаких неисправностей не было. А значит диски еще нужно покупать самому, за свой счёт (привет госзакупки). В итоге эти диски шли бы где-то неделю.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Произошло чудо&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;На самом деле не уверен, что произошло именно то, что я распишу, но очень похоже на это. По расписанию просочился snapshot, также выключал виртуалки в надежде что освободится место swap. Благодаря просроченному shapshot какие-то данные мигрировали на TIER3 или вовсе удалились. СХД вышла из emergency mode и ожила.&lt;/p&gt;

&lt;p&gt;Времени разбираться особо не было, и мы просто начали мигрировать все виртуалки с данной СХД.&lt;/p&gt;

&lt;p&gt;В итоге всё удачно смигрировали и отменили заказ дисков.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Выводы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Мониторьте место на СХД, а не на виртуализации (VMFS-5)&lt;/li&gt;
  &lt;li&gt;Лучше оставить хотя бы в одном TIER один вообще не используемый диск (так как тут используется софтовый RAID, это ни на что не повлияет)&lt;/li&gt;
  &lt;li&gt;При разбивке оставить хотя бы 1ТБ места не размеченным (чтобы в такой момент была возможность увеличения)&lt;/li&gt;
  &lt;li&gt;Даже топовая подписка на support не поможет вам в таких ситуациях если в вашей стране на складах нет нужного вам компонента СХД (придётся ждать дольше, чем написано в модели support). Наводит на мысль о том, что нужно иметь repair kit.&lt;/li&gt;
  &lt;li&gt;На таких умных СХД есть смысл включать сжатие (если позволяет железо)&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 25 Apr 2021 21:03:39 +0600</pubDate>
        <link>http://www.tipoit.kz/dell-sc5020</link>
        <guid isPermaLink="true">http://www.tipoit.kz/dell-sc5020</guid>
        
        <category>dell</category>
        
        <category>datastore</category>
        
        <category>storage</category>
        
        <category>expirience</category>
        
        <category>Compellent</category>
        
        
      </item>
    
      <item>
        <title>UBUNTU - apt error nginx_1.16.1-0.deb 404 not found</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Суть проблемы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Скорее всего вы используете уже &lt;strong&gt;end of life&lt;/strong&gt; версию &lt;code class=&quot;highlighter-rouge&quot;&gt;UBUNTU&lt;/code&gt;. А для таких версий нужно указывать другой репозиторий.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Заходим на сервер и проверяем нашу версию.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cat /etc/issue
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Переходим на &lt;a href=&quot;https://wiki.ubuntu.com/Releases&quot;&gt;сайт&lt;/a&gt; и убеждаемся что наша версия уже &lt;strong&gt;end of life&lt;/strong&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Копируем наш файл конфигурации репозиторий
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp /etc/apt/source.list /etc/apt/source.list.bak 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;В файле &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/apt/source.list&lt;/code&gt; меняем всё с http://archive.ubuntu.com на http://old-releases.ubuntu.com&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Выполняем
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ставим nginx
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install nginx
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Wed, 14 Apr 2021 21:03:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ubuntu-apt-404-not-found</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ubuntu-apt-404-not-found</guid>
        
        <category>ubuntu</category>
        
        <category>linux</category>
        
        <category>error</category>
        
        
      </item>
    
      <item>
        <title>Vim - Время узнать, как в нём работать (Часть 1)</title>
        <description>&lt;p&gt;Думаю, многие из вас уже сталкивались с vim. Vim - это текстовый редактор для linux-based систем.&lt;/p&gt;

&lt;p&gt;По моему личному усмотрению большинство пользователей vim делятся на 2 типа:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Я его поставил, что-то он какой-то сложный. Я даже не смог сохранить изменения в файле.&lt;/li&gt;
  &lt;li&gt;Да нет там ничего сложного. Правда из всего что я знаю это сохранить изменения, закрыть документ и осуществить поиск.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;И да вы можете сказать, что навыков 2 типа вполне хватает для работы. И в 80% случаев применения vim вы будете правы.&lt;/p&gt;

&lt;p&gt;Но что можно сказать об остальных 20%? А вот что:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Эти 20% в основном выпадают на срочные задачи (когда у вас что-то поломалось). Допустим вам надо перейти на определённую строку в файле, и вы не знаете, как это сделать, и тупо считаете строчки.&lt;/li&gt;
  &lt;li&gt;Как правило из-за незнания всех возможностей vim манипуляция с этими 20% занимают долгое время.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В этой статье мы поговорим о плагинах, горячих клавишах и т.д.&lt;/p&gt;

&lt;p&gt;Люди говорят, что стать гуру vim практически не реально, но обязательно стоит попробовать.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Запуск vim&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для запуска vim вбиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;vim&lt;/code&gt;. После чего нас встречает окно с описанием базовых команд и другой информацией о vim.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/vim/2021-04-11_15-51.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Режимы vim&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Режим Normal&lt;/strong&gt;
По у молчания vim открывается именно в этом режиме. В этом режиме вы можете править документ (например, удалять строки двойным нажатием клавиши &lt;code class=&quot;highlighter-rouge&quot;&gt;d&lt;/code&gt;). И можете передвигаться по документу используя клавиатуру. Также вы переходите их этого режима во все остальные.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Режим Insert&lt;/strong&gt;
Находясь в нормальном режиме нажимаем клавишу &lt;code class=&quot;highlighter-rouge&quot;&gt;i&lt;/code&gt; и переходим в режим &lt;strong&gt;Insert&lt;/strong&gt;. Об этом нас оповещает надпись &lt;code class=&quot;highlighter-rouge&quot;&gt;--INSERT--&lt;/code&gt; в левом нижнем углу.&lt;/p&gt;

    &lt;p&gt;В этом режиме вы можете писать текст.&lt;/p&gt;

    &lt;p&gt;Для того чтобы выйти из режима &lt;strong&gt;Insert&lt;/strong&gt; и перейти в режим &lt;strong&gt;Normal&lt;/strong&gt; нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;ESC&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;CTRL+c&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Режим Visual&lt;/strong&gt;
В этом режиме вы можете выделять контент и производить с ним манипуляции. Вы можете изменить, отредактировать или скопировать свой выделенный текст.&lt;/p&gt;

    &lt;p&gt;Для перехода в этот режим находясь в режиме &lt;strong&gt;Normal&lt;/strong&gt; нажимаем клавишу &lt;code class=&quot;highlighter-rouge&quot;&gt;v&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Если вы хотите выделить всю строку целиком находясь в режиме &lt;strong&gt;Normal&lt;/strong&gt; нажмите на клавиатуре &lt;code class=&quot;highlighter-rouge&quot;&gt;SHIFT+v&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Режим Command-Line&lt;/strong&gt;
Находясь в этом режиме, вы можете выполнять команды vim.&lt;/p&gt;

    &lt;p&gt;Для перехода в этот режим необходимо ввести &lt;code class=&quot;highlighter-rouge&quot;&gt;:&lt;/code&gt; в режиме &lt;strong&gt;Normal&lt;/strong&gt; и ваш курсор автоматически окажется внизу.&lt;/p&gt;

    &lt;p&gt;Небольшой список команд, которые вы можете использовать:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;:help&lt;/strong&gt; - как понятно из названия выводит справку (например вы можете получить помощь по режимам &lt;strong&gt;:help vim-modes&lt;/strong&gt;)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;:q&lt;/strong&gt; - выход из vim (только если нет изменений)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;:q!&lt;/strong&gt; - выход из vim и отмена всех изменений в документе&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;:w&lt;/strong&gt; - сохранить все изменения в документе&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;:wq&lt;/strong&gt; - сохранить изменения и выйти из vim&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;:e&lt;/strong&gt; - даёт возможность открыть документ по абсолютному пути (т.е вбиваете путь к документу, который хотите открыть)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Поиск по документу&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для поиска слов в документе находясь в режиме &lt;strong&gt;Normal&lt;/strong&gt; вбиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;/&lt;/code&gt; после чего курсор перемещается в низ редактора, где вы уже пишите интересующее вас слово и нажимаете &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для того чтобы перейти к следующему совпадению в документе нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;n&lt;/code&gt;, а для предыдущего &lt;code class=&quot;highlighter-rouge&quot;&gt;N&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для получения справки по поиску можно воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;:help search-commands&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Отмена изменений (Undo)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы отменить выполненные изменения находясь в режиме &lt;strong&gt;Normal&lt;/strong&gt; нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;u&lt;/code&gt;, для того чтобы вернуть изменения нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;CTRL+r&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для получения справки можно воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;:help undo-redo&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Команды режима Insert&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для входа в режим &lt;strong&gt;Insert&lt;/strong&gt; вы также можете использовать и другие клавиши, а именно:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;a&lt;/code&gt; - перейти в режим &lt;strong&gt;Insert&lt;/strong&gt; и поместить курсор после текущего символа&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;A&lt;/code&gt; - перейти в режим &lt;strong&gt;Insert&lt;/strong&gt; и поместить курсор в конец строки&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;o&lt;/code&gt; - перейти в режим &lt;strong&gt;Insert&lt;/strong&gt; и поместить курсор на строку ниже&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;O&lt;/code&gt; - перейти в режим &lt;strong&gt;Insert&lt;/strong&gt; и поместить курсор на строку выше при этом имитируя нажатие &lt;code class=&quot;highlighter-rouge&quot;&gt;ENTER&lt;/code&gt; (новая строка)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Операторы и текстовые поля&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Операторы - это глаголы языка Vim. Выполняют манипуляции с текстом, вот некоторые из них:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;d&lt;/code&gt; - в комбинации со стрелками удаляет символ слева или справа&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;diw&lt;/code&gt; - удалит всё слово&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;dip&lt;/code&gt; - удаляет весь параграф&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;c&lt;/code&gt; -  удаляет выделенный фрагмент (в режиме &lt;strong&gt;Visual&lt;/strong&gt;) и переходит в режим &lt;strong&gt;Insert&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ciw&lt;/code&gt; - тоже самое что &lt;code class=&quot;highlighter-rouge&quot;&gt;c&lt;/code&gt;, только со словом&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;y&lt;/code&gt; - копирует выделенное (в режиме &lt;strong&gt;Visual&lt;/strong&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;yy&lt;/code&gt; - скопировать строку&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;p&lt;/code&gt; - вставить скопированное&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;d$&lt;/code&gt; - удалить всё с начала курсора до конца строки&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;dgg&lt;/code&gt; - удалить всё с начала курсора до начала строки&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ggdG&lt;/code&gt; - удалить всё в файле&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для просмотра справки можно воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;:help operator&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;:help text-objects&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Перемещение курсора&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вроде бы всё понятно просто двигаешь курсор стрелочками на клавиатуре.&lt;/p&gt;

&lt;p&gt;А что если вы точно знаете, что хотите переместить курсор на 5 строк ниже? А всё так же просто нажимаете цифру &lt;code class=&quot;highlighter-rouge&quot;&gt;5&lt;/code&gt;и потом стрелочку вниз. В итоге окажетесь на 5 строк ниже (также работает и с другими стрелками).&lt;/p&gt;

&lt;p&gt;Вы также можете использовать клавиши &lt;code class=&quot;highlighter-rouge&quot;&gt;h&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;j&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;k&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;l&lt;/code&gt; вместо стрелок для перемещения курсора соответственно влево, вниз, вверх и вправо.&lt;/p&gt;

&lt;p&gt;Также вы можете использовать следующие клавиши:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;w&lt;/code&gt; - переход ко следующему слову. Если в строке одно слово, то переходит на новую строку&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;b&lt;/code&gt; - переход к предыдущему слову. Если в строке одно слово, то переходит на строку вверх&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;0&lt;/code&gt; - переход в начало строки&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ˆ&lt;/code&gt; - переход к первому непустому символу в строке (т.е отсекает пробелы в начале строки)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;$&lt;/code&gt; - переход в конец строки&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;%&lt;/code&gt; - если курсор находится на открывающей скобке перемещает его на закрывающую скобку&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;G&lt;/code&gt; - перейти в конец документа. Может использоваться для перехода на определенную строку, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;10G&lt;/code&gt; переведёт курсор на 10 строку.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;gg&lt;/code&gt; - перевести курсор в начало документа&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;CTRL+e&lt;/code&gt; - прокрутить окно вниз&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;CTRL+u&lt;/code&gt; - перевести курсор вверх на половину экрана&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;CTRL+d&lt;/code&gt; - перевести курсор вниз на половину экрана&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Mon, 12 Apr 2021 06:03:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vim-how-it-works-part-1</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vim-how-it-works-part-1</guid>
        
        <category>vim</category>
        
        <category>linux</category>
        
        
      </item>
    
      <item>
        <title>ELK - Моделирование полей и общая схема</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Необходимость моделирования&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда вы индексируете документы в новый индекс, Elasticsearch динамически создает для вас сопоставление (mapping). Если вы проверите сопоставление, созданное для индексов блогов и журналов, вы заметите, что большинство полей сопоставлены с текстом и ключевым словом.&lt;/p&gt;

&lt;p&gt;Немного подробнее про сопоставление можно почитать &lt;a href=&quot;https://www.tipoit.kz/elk-mapping&quot;&gt;тут&lt;/a&gt; и &lt;a href=&quot;https://www.tipoit.kz/elk-custom-mappngs&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Комплексные исправления&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При некоторых ситуациях стоит задуматься о правильном дизайне вашего индекса. Например поле &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;location&quot;: &quot;KZ,Almaty&quot;&lt;/code&gt; будет проиндексировано как строка. Но для быстрого и легкого поиска правильней было бы его разбить на массив.&lt;/p&gt;

&lt;p&gt;Или допустим у вас существует поле с типом строка, где у вас записано множество информации о запросе клиента через браузер, например, версия ос, версия браузера, ip адрес и т.д. Наличие всей этой разной информации в одном и том же поле затрудняет поиск. Вам нужно разложить эту строку на более &lt;strong&gt;гранулярные поля&lt;/strong&gt; (&lt;strong&gt;granular fields&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Для примера правильного использования гранулярные полей рассмотрим пример с полем, в котором указывается версия ОС &lt;code class=&quot;highlighter-rouge&quot;&gt;os_version: &quot;5.4.13&quot;&lt;/code&gt;. Теперь представим, что вам нужно найти все документы с версией ОС 5.3.х. Скорее всего вы используете регулярные выражения и это не самый простой выход.&lt;/p&gt;

&lt;p&gt;Проще всего было бы разбить это поле на 3 поля: major, minor, bugfix.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PUT my-index
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;mappings&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;version&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;display_version&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
          &lt;span class=&quot;s2&quot;&gt;&quot;major&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;byte&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
          &lt;span class=&quot;s2&quot;&gt;&quot;minor&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;byte&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
          &lt;span class=&quot;s2&quot;&gt;&quot;bugfix&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;byte&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь благодаря такому mapping мы можем упростить получение документов:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PUT my-index/_doc/1 
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;display_version&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;5.3.23&quot;&lt;/span&gt;,
    &lt;span class=&quot;s2&quot;&gt;&quot;major&quot;&lt;/span&gt;: 5,
    &lt;span class=&quot;s2&quot;&gt;&quot;minor&quot;&lt;/span&gt;: 3,
    &lt;span class=&quot;s2&quot;&gt;&quot;bugfix&quot;&lt;/span&gt;: 23
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

GET my-index/_search
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;query&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;bool&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;filter&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;version.major&quot;&lt;/span&gt;: 5 &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
        &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;version.minor&quot;&lt;/span&gt;: 3 &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Общая схема (Common Schema)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Elastic Common Schema (ECS) - это спецификация с открытым исходным кодом, которая определяет общий набор полей документа для данных, загружаемых в Elasticsearch. ECS разработан для поддержки единообразного моделирования данных, что позволяет централизованно анализировать данные из различных источников с помощью как интерактивных, так и автоматизированных методов, обеспечивая при этом большую гибкость для добавления настраиваемых полей при необходимости.&lt;/p&gt;

&lt;p&gt;Спецификация ECS определяет два уровня полей:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Поля ECS &lt;strong&gt;Core&lt;/strong&gt; - представляют поля, которые наиболее распространены во всех случаях использования, и вам следует сосредоточиться на заполнении этих полей в первую очередь&lt;/li&gt;
  &lt;li&gt;Поля ECS &lt;strong&gt;Extended&lt;/strong&gt; - представляет любые поля, которые не являются частью основных полей, и они используются гораздо реже&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;набор-полей&quot;&gt;Набор полей&lt;/h3&gt;

&lt;p&gt;ECS определяет несколько групп связанных полей, называемых наборами полей. Полную справку по всем полям вы можете найти &lt;a href=&quot;https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html#ecs-field-reference&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;При работе с ECS лучше всего следовать общим рекомендациям, чтобы у вас была последовательность в моделировании ваших полей в различных сценариях использования.&lt;/p&gt;

&lt;p&gt;Следуйте данным рекомендациям при создании индексов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В документе должно быть поле @timestamp.&lt;/li&gt;
  &lt;li&gt;Вам необходимо сопоставить как можно больше полей с правилами ECS&lt;/li&gt;
  &lt;li&gt;Убедитесь, что имена полей в нижнем регистре&lt;/li&gt;
  &lt;li&gt;Вам нужно использовать подчеркивание, если вы хотите комбинировать слова (os_version)&lt;/li&gt;
  &lt;li&gt;Не используйте другие специальные символы, кроме подчеркивания, в названиях полей.&lt;/li&gt;
  &lt;li&gt;Используйте префиксы для всех полей (&amp;lt;fieldset&amp;gt; .fieldname), кроме базовых полей&lt;/li&gt;
  &lt;li&gt;Избегайте повторения слов (os.os_version -&amp;gt; os.version)&lt;/li&gt;
  &lt;li&gt;По возможности избегайте сокращений&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Следуйте этим рекомендациям при определении типа ваших полей:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Целые числа обычно определяются как длинные (long)&lt;/li&gt;
  &lt;li&gt;Несмотря на то, что идентификаторы и большинство кодов часто являются целыми числами, это не всегда так O_O.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование псевдонимов (alias)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Может случится так что документы, которые были ранее проиндексированы, и новые документы будут иметь разные поля (например user_id,user-id,ids). Поэтому у вас возникнут проблемы с созданием визуализаций и информационных панелей для всех ваших документов. Одним из решений может быть переиндексация ваших старых документов, но это может занять много времени. Другое решение - использовать псевдоним типа данных (alias).&lt;/p&gt;

&lt;p&gt;Тип данных псевдонима определяет альтернативное имя для поля в индексе, которое помогает создавать запросы или агрегаты для одного имени поля.&lt;/p&gt;

&lt;p&gt;Создание псевдонима должно соответствовать следующим требованиям:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Это должно быть конкретное поле (не объект или псевдоним)&lt;/li&gt;
  &lt;li&gt;Поле должно существовать на момент создания псевдонима.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Поле псевдонима (alias) невозможно удалить.&lt;/p&gt;

&lt;p&gt;Пример использования:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;POST my-index/_mapping
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;version&quot;&lt;/span&gt;:&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;properties&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;d_v&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;alias&quot;&lt;/span&gt;,
            &lt;span class=&quot;s2&quot;&gt;&quot;path&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;version.display_version&quot;&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

GET my-index/_search
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;query&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;bool&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;filter&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;version.d_v&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;5.3.23&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Тщательное моделирование данных позволяет получить от них максимальную отдачу&lt;/li&gt;
  &lt;li&gt;ECS разработан для поддержки единообразного моделирования данных и определяет имена полей и типы данных&lt;/li&gt;
  &lt;li&gt;Псевдоним (alias) позволяет вам определить альтернативное имя для поля в индексе.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 11 Apr 2021 17:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-field-modeling</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-field-modeling</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Денормализация</title>
        <description>&lt;p&gt;Так как Elasticsearch помешан на скорости выполнения запроса в нём используется денормализация. Идея состоит в том, чтобы вся информация, относящаяся к объекту, была собрана в одном месте. Это означает, что вам нужно хранить избыточные копии данных в каждом документе вместо использования какого-либо типа отношений между различными индексами.&lt;/p&gt;

&lt;p&gt;Денормализация обеспечивает лучшую производительность, поскольку нет необходимости выполнять вложенные соединения (join) при запросе данных. Кроме того, _source сжимается, что снижает место на диске.&lt;/p&gt;

&lt;p&gt;Денормализация данных оптимизирована для операций чтения, что ускоряет поисковые запросы.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пример денормализации&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Возьмём для примера ситуацию с использованием неких машин некими людьми.&lt;/p&gt;

&lt;p&gt;Список наших пользователей:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Список наших машин:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;BMW&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;BMW&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;KIA&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;RIO&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Допустим, что User1 использовал BMW X5, User2 - KIA RIO, User3 - KIA RIO и BMW X6.&lt;/p&gt;

&lt;p&gt;Если бы мы представляли это в модели БД, то структура была бы следующая:
&lt;img src=&quot;/static/img/elk/2021-03-23_15-09.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В Elasticsearch это будет выглядеть так:
&lt;img src=&quot;/static/img/elk/2021-03-23_15-13.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Преимущество денормализации&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После денормализации ваших данных вся информация находится в одном месте. Теперь вы можете искать авто и их владельцев с помощью одного запроса. А поскольку вся информация находится в одном месте (таблица справа), вам не нужно выполнять вложенные поиски, чтобы получить результат. Elasticsearch - это поисковая система, поэтому она оптимизирована для поиска даже с моделированием данных.&lt;/p&gt;

&lt;p&gt;Тем не менее не существует механизма, обеспечивающего согласованность денормализованных данных с исходным документом. Вам следует избегать денормализации данных, которые могут часто меняться (update).&lt;/p&gt;

</description>
        <pubDate>Sun, 11 Apr 2021 17:31:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-denormalization</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-denormalization</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - введение</title>
        <description>&lt;p&gt;В этой статье опишу базовые понятия для работы с &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для индексации и поиска данных в &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; используется &lt;code class=&quot;highlighter-rouge&quot;&gt;Apache Lucene&lt;/code&gt;. &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; - это распределенный веб-сервер на основе &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt;, построенный на &lt;code class=&quot;highlighter-rouge&quot;&gt;Apache Lucene&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Основными компонентами &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic Stack&lt;/code&gt; являются &lt;code class=&quot;highlighter-rouge&quot;&gt;Beats&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Logstash&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для работы &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; требуется наличие &lt;code class=&quot;highlighter-rouge&quot;&gt;java&lt;/code&gt;. Разработчики рекомендуют использовать именно версию  &lt;strong&gt;JDK&lt;/strong&gt;. Для просмотра совместимости версий можно перейти по &lt;a href=&quot;https://www.elastic.co/support/matrix#matrix_jvm&quot;&gt;ссылке&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Таблица стандартных директорий &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Директория&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
      &lt;th&gt;Переменная конфигурации&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;bin&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Бинарные скрипты, включая elasticsearch для запуска узла и elasticsearch-plugin для установки плагинов&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;config&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Файлы конфигурации, включая elasticsearch.yml&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;ES_PATH_CONF&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;data&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Расположение файлов данных каждого index и shard, выделенного на узле.&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;path.data&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;jdk&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Связанная версия OpenJDK от сопровождающих JDK (GPLv2 + CE)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;JAVA_HOME&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;lib&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Файлы Java JAR Elasticsearch&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;logs&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Расположение лог файлов Elasticssearch&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;path.logs&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;modules&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Contains various Elasticsearch modules&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;plugins&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Расположение файлов плагинов&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;/n&lt;/p&gt;

&lt;p&gt;Чтобы остановить сервис &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; можно восспользоваться командой.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;kill&lt;/span&gt; &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;cat elastic.pid&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; принимает данные только в формате &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Документами в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; называется любые данные находящиеся в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Нода ( Node )&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Node&lt;/strong&gt; - узел с установленным &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;. Каждый узел является членом кластера, включая только один узел. Т.е даже одна &lt;strong&gt;node&lt;/strong&gt; является кластером.&lt;/p&gt;

&lt;p&gt;Имя &lt;strong&gt;node&lt;/strong&gt; задаётся переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;node.name&lt;/code&gt; в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt; или переменной при старте &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo  ./bin/elasticsearch -E node.name&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my_node
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Имя кластера задаётся переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;cluster.name&lt;/code&gt; в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt; или переменной при старте &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;. Естественно у всех &lt;strong&gt;node&lt;/strong&gt; должно быть одинаковое.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo  ./bin/elasticsearch -E cluster.name&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my_cluster 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Команды ( Comands )&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;CRUD&lt;/code&gt; расшифровывается как &lt;code class=&quot;highlighter-rouge&quot;&gt;Create&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Read&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Update&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Delete&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-put&quot;&gt;PUT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-post&quot;&gt;POST&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-delete&quot;&gt;DELETE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-get&quot;&gt;GET&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Запросы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-relevants&quot;&gt;Релевантность&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-full-text-queries&quot;&gt;Полнотекстовые запросы&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-combining-queries&quot;&gt;Объединение запросов&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Агрегации&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-metric-aggregations&quot;&gt;Агрегация метрик&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-bucket-aggregations&quot;&gt;Агрегация bucket&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/combining-aggregations&quot;&gt;Комбинированные агрегации&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/percentile-ranks-aggregation&quot;&gt;Агрегация процентильных рангов(Percentile ranks aggregation)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/cardinality-aggregation&quot;&gt;Cardinality aggregation&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Анализ и сопоставление текста Elasticsearch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-mapping&quot;&gt;Сопоставление (Mapping)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-text-analyzer&quot;&gt;Анализатор текса (Text analyzer)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-inverted-index-and-doc-values&quot;&gt;Значения документа и инвертированный индекс&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-custom-mappngs&quot;&gt;Сопоставления типов полей&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-copy-to&quot;&gt;Использование copy_to&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Кластер, ноды и шарды&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-cluster-and-master-node&quot;&gt;ELK - Что такое master node и cluster&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-node-roles&quot;&gt;ELK - Роли узлов/нод&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-shard&quot;&gt;ELK - шарды (shards)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/distributed-operations&quot;&gt;ELK - Распределенные операции&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Моделирование данных&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-denormalization&quot;&gt;ELK - Денормализация&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-field-modeling&quot;&gt;ELK - Моделирование полей и общая схема&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/elk-nested-types&quot;&gt;ELK - Вложенные типы данных&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[ELK - Анализаторы] (https://www.tipoit.kz/elk-analyzers)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;index&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При выполнении &lt;code class=&quot;highlighter-rouge&quot;&gt;PUT&lt;/code&gt; создаётся автоматически новый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; если он не существовал.&lt;/p&gt;

&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; документ индексируется в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. Вы можете использовать термин &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; как глагол, так и существительное.&lt;/p&gt;

&lt;p&gt;Время от времени обновляемая статья.&lt;/p&gt;

</description>
        <pubDate>Tue, 23 Mar 2021 22:31:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-introduction</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-introduction</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Распределенные операции</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Маршрутизация документов&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда вы добавляете документ в индекс elasticsearch должен понять в какие шарды ему распределять документ.&lt;/p&gt;

&lt;p&gt;Как Elasticsearch узнает, в какой шард должен попасть документ и как он его выбирает? Шард выбирается на основе простой формулы маршрутизации, которая обрабатывается автоматически. Схема маршрутизации по умолчанию хеширует _id документа и использует его для поиска шарда. При желании вы можете указать другое значение. Сама формула выглядит так &lt;strong&gt;shard_num = hash(_routing) % num_primary_shards&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Маршрутизация по умолчанию обеспечивает равномерное распределение документов по всему набору шардов - у вас не будет никаких «горячих шардов».&lt;/p&gt;

&lt;p&gt;После индексирования документа узел сообщает остальным узлам в кластере в каких шардах находится документ.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Параметр refresh_interval&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Новые проиндексированные документы недоступны для поиска, пока не произойдет обновление. По умолчанию для обновления требуется до одной секунды. Это компромисс между отзывчивостью и скоростью.&lt;/p&gt;

&lt;p&gt;Параметр &lt;strong&gt;refresh_interval&lt;/strong&gt; управляет этим поведением.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;refresh_interval&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;30s&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Анатомия поиска&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Распределенный поиск - сложная задача. Вы должны искать совпадения в копии каждого шарда в индексе, и найти документы - это только половина дела! Результаты поиска должны быть объединены в единый отсортированный список документов, представляющий страницу результатов.&lt;/p&gt;

&lt;p&gt;Т.е представим ситуацию что вы отправляете запрос о поиске всех документов со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;200&lt;/code&gt; в заголовке на node-1. Это node-1 перед тем как отдать вам ответ должна проверить каждый шард в индексе на наличие таких документах на всех узлах.&lt;/p&gt;

&lt;h3 id=&quot;фаза-запроса-query-phase&quot;&gt;Фаза запроса (Query Phase)&lt;/h3&gt;

&lt;p&gt;Начальная часть поиска называется &lt;strong&gt;фазой запроса&lt;/strong&gt; (&lt;strong&gt;query phase&lt;/strong&gt;). Запрос транслируется в копию каждого шарда в индексе, и каждый шард выполняет запрос локально.&lt;/p&gt;

&lt;p&gt;Допустиvм вы ищете в индексе с 4 шардами. Первый узел отправит запросы на все узлы, на которых находятся шарды, причем не важно первичные или реплицированные шарды.&lt;/p&gt;

&lt;h3 id=&quot;фаза-извлечения-fetch-phase&quot;&gt;Фаза извлечения (Fetch Phase)&lt;/h3&gt;

&lt;p&gt;Теперь, когда координирующий узел (тот кому пришёл запрос) знает идентификаторы документов десяти самых популярных совпадений, он может получить документы и вернуть эти документы вам.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Поиск состоит из &lt;strong&gt;фазы запроса&lt;/strong&gt; (&lt;strong&gt;query phase&lt;/strong&gt;) и &lt;strong&gt;фазы выборки&lt;/strong&gt; (&lt;strong&gt;fetch phase&lt;/strong&gt;).&lt;/li&gt;
  &lt;li&gt;По умолчанию в формуле, которая используется для определения в какой шард положить документ используется &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; документа&lt;/li&gt;
  &lt;li&gt;Шард- это единственный экземпляр &lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt;, который хранит данные.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 23 Mar 2021 20:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/distributed-operations</link>
        <guid isPermaLink="true">http://www.tipoit.kz/distributed-operations</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - HTTP ошибки</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Распространенные ошибки HTTP&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот некоторые распространенные ошибки, с которыми вы можете столкнуться:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Проблема&lt;/th&gt;
      &lt;th&gt;Причина&lt;/th&gt;
      &lt;th&gt;Действие&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Unable to connect&lt;/td&gt;
      &lt;td&gt;Проблема в сети или кластер не работает&lt;/td&gt;
      &lt;td&gt;Проверить состояние сети и работоспособность кластера&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Connection unexpectedly closed&lt;/td&gt;
      &lt;td&gt;Узел умер или проблема с сетью&lt;/td&gt;
      &lt;td&gt;Повторить попытку&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4xx Error&lt;/td&gt;
      &lt;td&gt;Ошибка клиента&lt;/td&gt;
      &lt;td&gt;Исправьте неверные запросы перед повторной попыткой&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;429 Error&lt;/td&gt;
      &lt;td&gt;Elasticsearch слишком загружен&lt;/td&gt;
      &lt;td&gt;Повторить попытку&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5xx Error&lt;/td&gt;
      &lt;td&gt;Внутренняя ошибка сервера в Elasticsearch&lt;/td&gt;
      &lt;td&gt;Посмотрите журналы Elasticsearch, чтобы узнать, в чем проблема.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Mon, 22 Mar 2021 19:53:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-http-errors</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-http-errors</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - шарды  (shards)</title>
        <description>&lt;h2 id=&quot;что-такое-шарды-shards&quot;&gt;Что такое шарды (shards)&lt;/h2&gt;

&lt;p&gt;Если вы думали, что документы хранятся в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;, то огорчу вас это не так. Документы хранятся в шарды. &lt;code class=&quot;highlighter-rouge&quot;&gt;Index&lt;/code&gt; просто отслеживает, где что находится. &lt;code class=&quot;highlighter-rouge&quot;&gt;Index&lt;/code&gt; - это абстрактный объект, виртуальное пространство имен, которое указывает на несколько шардов. Каждый &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; разбивается на шарды. Количество шардов можно указать при создании index.&lt;/p&gt;

&lt;p&gt;Шарды могут быть раскиданы на разных узлах кластера.&lt;/p&gt;

&lt;h2 id=&quot;типы-шардов-shard&quot;&gt;Типы шардов (shard)&lt;/h2&gt;

&lt;p&gt;Существует два разных типа шардов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Первичный (Primary)&lt;/strong&gt;: исходные сегменты индекса.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Реплики (Replicas)&lt;/strong&gt;: копии/реплики первичного шарда.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Документы реплицируются между первичным и его &lt;strong&gt;шардами-репликами&lt;/strong&gt;. Каждый тип шардов гарантированно находится на разных узлах, что увеличивает отказоустойчивость. Когда говорите о реплике думайте о нём как о копии первичного шарда, имеющей другой тег.&lt;/p&gt;

&lt;h2 id=&quot;количество-шардов-shard&quot;&gt;Количество шардов (shard)&lt;/h2&gt;

&lt;p&gt;Когда создается индекс, он всегда разбивается на какое-то количество шардов. Шарды- это то место, куда записываются и хранятся документы, которые входят в индекс. По умолчанию во время создания индекса количество первичных шардов, которые будет иметь индекс, равно 1. Но вы можете указать другое значение при создании index.&lt;/p&gt;

&lt;p&gt;Рекомендуется назначать количество шардов при создании index, так как изменение этого значения в будущем невозможно. Количество же реплик можно настраивать в любое время.&lt;/p&gt;

&lt;h2 id=&quot;количество-реплик-первичного-шарда&quot;&gt;Количество реплик первичного шарда&lt;/h2&gt;

&lt;p&gt;По умолчанию также стоит значение 1. Это значит, что в кластере с 3 узлами копия первичного шарда будет находится на одном из двух узлов, где не находится первичный шард. За распределение шардов по хостам отвечает &lt;a href=&quot;https://www.tipoit.kz/elk-cluster-and-master-node&quot;&gt;master node&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;А где реплика в однонодовом кластере? Реплика в однонодовом кластере не создаётся.&lt;/p&gt;

&lt;h2 id=&quot;конфигурация-количества-первичных-шардов&quot;&gt;Конфигурация количества первичных шардов&lt;/h2&gt;

&lt;p&gt;По умолчанию количество первичных шардов для индекса равно 1. Как вы узнали ранее, вы можете указать количество первичных шардов при создании индекса.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В такой реализации в кластере с 3 узлами на каждом узле будет по одному шарду.&lt;/p&gt;

&lt;h2 id=&quot;раньше-по-умолчанию-было-5&quot;&gt;Раньше по умолчанию было 5&lt;/h2&gt;

&lt;p&gt;По умолчанию в предыдущих версиях &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch (&amp;lt;7.0)&lt;/code&gt; при создании индекса создавалось 5 первичных шардов и 1 реплика. Однако это приводило к чрезмерному сегментированию, что стало одной из основных проблем пользователей &lt;code class=&quot;highlighter-rouge&quot;&gt;Elastic&lt;/code&gt; - слишком много шардов потребляли ресурсы без всякой причины. Т.е в кластере с одной нодой index разбивался на 5 шардов и в этом не было особого смысла.&lt;/p&gt;

&lt;p&gt;Например, если у вас есть один ежедневный индекс для 5 различных приложений, и каждое из них имеет по умолчанию пять шардов, вы создавали 25 шардов в день. При этом скоро у вас появятся тысячи шардов, даже если вы индексируете всего несколько гигабайт данных в день. Следующим шагом по сокращению чрезмерного сегментирования было присвоение индексов по умолчанию одному шарду.&lt;/p&gt;

&lt;p&gt;В идеале создавайте столько шардов, сколько у вас узлов в кластере.&lt;/p&gt;

&lt;h2 id=&quot;конфигурация-количества-реплик-первичных-шардов&quot;&gt;Конфигурация количества реплик первичных шардов&lt;/h2&gt;

&lt;p&gt;По умолчанию количество реплик равно 1. Это означает, что у каждого первичного шарда будет 1 копия. Вы можете указать необходимое количество реплик при создании индекса. Для этого используйте параметр &lt;code class=&quot;highlighter-rouge&quot;&gt;number_of_replicas&lt;/code&gt;. В отличие от количества первичных шардов, вы можете изменить количество реплик в любое время.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_replicas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;а-для-чего-мне-эта-реплика&quot;&gt;А для чего мне эта реплика?&lt;/h2&gt;

&lt;p&gt;Конечно, для высокой доступности! С одной репликой вы можете потерять один узел, но данные останутся доступными. С 2 репликами вы можете потерять 2 узла, и данные также останутся доступными. Если узел выходит из строя с основным, реплики повышаются до основных по мере необходимости.&lt;/p&gt;

&lt;p&gt;Реплики также позволяют масштабировать данные и лучше использовать ресурсы кластера - пропускную способность чтения. Вместо того, чтобы ваши данные располагались на одном узле, они распределяются по разным узлам. Когда вы выполняете поисковый запрос, вас не волнует, выполняется ли поиск по первичному или реплике шарда, все шарды содержат одни и те же данные.&lt;/p&gt;

&lt;h2 id=&quot;состояния-шардов&quot;&gt;Состояния шардов&lt;/h2&gt;

&lt;p&gt;Осколки проходят несколько состояний:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;UNASSIGNED&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;INITIALIZING&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;STARTED&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RELOCATING&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; автоматически управляет этими состояниями без необходимости ручного вмешательства. Мы их рассматриваем просто для того, чтобы знать, что делает каждое состояние.&lt;/p&gt;

&lt;h3 id=&quot;unassigned&quot;&gt;UNASSIGNED&lt;/h3&gt;

&lt;p&gt;Состояние &lt;strong&gt;UNASSIGNED&lt;/strong&gt; описывает шарды, которые существуют в конфигурации кластера, которые не могут быть найдены в самом кластере. Кластер знает, что шарды должны быть там, но кластер не может их выделить. Например, у вас не работает раздел в ОС с этими шардами.&lt;/p&gt;

&lt;p&gt;Также такой статус может быть в момент создания самого шарда.&lt;/p&gt;

&lt;h3 id=&quot;initializing&quot;&gt;INITIALIZING&lt;/h3&gt;

&lt;p&gt;Состояние &lt;strong&gt;INITIALIZING&lt;/strong&gt; очень короткое, в зависимости от того, насколько нагружен &lt;a href=&quot;https://www.tipoit.kz/elk-cluster-and-master-node&quot;&gt;master node&lt;/a&gt;., и является первым шагом при создании шардов. Выполняется сразу после &lt;strong&gt;UNASSIGNED&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;started&quot;&gt;STARTED&lt;/h3&gt;

&lt;p&gt;Когда первичный шард завершает &lt;strong&gt;INITIALIZING&lt;/strong&gt;, он переходит в состояние &lt;strong&gt;STARTED&lt;/strong&gt;, и теперь его реплики могут быть переходят в состояние &lt;strong&gt;INITIALIZING&lt;/strong&gt;. Состояние кластера будет &lt;code class=&quot;highlighter-rouge&quot;&gt;желтое&lt;/code&gt;, потому что отсутствует один шард реплики, который в настоящее время &lt;strong&gt;UNASSIGNED&lt;/strong&gt; (должен стать &lt;strong&gt;STARTED&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Когда состояние и первичных шардов и их реплик STARTED состояние кластера будет зелёным.&lt;/p&gt;

&lt;h3 id=&quot;relocating&quot;&gt;RELOCATING&lt;/h3&gt;

&lt;p&gt;Это состояние, когда шарды переносятся с одного узла на другой, например когда вы добавили еще однин узел в кластер.&lt;/p&gt;

&lt;h2 id=&quot;состояние-кластера&quot;&gt;Состояние кластера&lt;/h2&gt;

&lt;p&gt;При выходе узла с первичным шардом его реплика становится первичной, при этом статус кластера будет желтым. Это потому что отсутствует реплика, ведь она стала первичным шардом. Реплика в таком случае создастся сама, не нужно ничего предпринимать.&lt;/p&gt;

&lt;h2 id=&quot;в-итоге&quot;&gt;В итоге&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; разделяет данные вашего индекса на несколько частей, называемых шардами.&lt;/li&gt;
  &lt;li&gt;Выделение шарда (&lt;code class=&quot;highlighter-rouge&quot;&gt;Shard allocation&lt;/code&gt;) - это процесс назначения шарда узлу в кластере.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 22 Mar 2021 19:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-shard</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-shard</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK -  Роли узлов/нод</title>
        <description>&lt;p&gt;Каждый узел в кластере имеет свою роль, или даже несколько. В &lt;code class=&quot;highlighter-rouge&quot;&gt;production&lt;/code&gt; сети рекомендуется разделять хосты по ролям.&lt;/p&gt;

&lt;p&gt;По умолчанию узел является &lt;code class=&quot;highlighter-rouge&quot;&gt;узлом с правом доступа к мастеру&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;node.master&lt;/code&gt;), &lt;code class=&quot;highlighter-rouge&quot;&gt;узлом данных&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;node.data&lt;/code&gt;), &lt;code class=&quot;highlighter-rouge&quot;&gt;приема&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;node.ingest&lt;/code&gt;) и &lt;code class=&quot;highlighter-rouge&quot;&gt;машинного обучения&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;node.ml&lt;/code&gt;). Это определяется в командной строке или в файле конфигурации &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.yml&lt;/code&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Тип узла&lt;/th&gt;
      &lt;th&gt;Параметр конфигурации&lt;/th&gt;
      &lt;th&gt;Значение по умолчанию&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;может быть мастером&lt;/td&gt;
      &lt;td&gt;node.master&lt;/td&gt;
      &lt;td&gt;true&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;узел данных&lt;/td&gt;
      &lt;td&gt;node.data&lt;/td&gt;
      &lt;td&gt;true&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;узел приёма&lt;/td&gt;
      &lt;td&gt;node.ingest&lt;/td&gt;
      &lt;td&gt;true&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;машинное обучение&lt;/td&gt;
      &lt;td&gt;node.ml&lt;/td&gt;
      &lt;td&gt;true&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Узел данных (data node)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;На узлах данных хранятся &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt;, содержащие проиндексированные вами документы. Также они выполняют операции, связанные с данными, такие как &lt;code class=&quot;highlighter-rouge&quot;&gt;CRUD&lt;/code&gt;, поиск и агрегирование.&lt;/p&gt;

&lt;p&gt;Как вы узнали ранее, все узлы по умолчанию являются узлами данных, и это настраивается с помощью свойства &lt;code class=&quot;highlighter-rouge&quot;&gt;node.data&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Важно следить за нагрузкой на ваши узлы данных, если они перегружены, то есть смысл задуматься о добавлении новой ноды данных в кластер.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Узел приёма (ingest node)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Узлы приёма предоставляют возможность предварительной обработки документа перед его индексированием. Узел приема перехватывает запросы, применяет преобразования, а затем передает документы обратно в &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; для индексирования. Все узлы по умолчанию являются узлами приема и настраиваются с помощью свойства &lt;code class=&quot;highlighter-rouge&quot;&gt;node.ingest&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Узел машинного обучения (machine learning node)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Машинное обучение автоматически моделирует поведение ваших данных &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; в реальном времени - тенденции, периодичность и т. Д., чтобы быстрее выявлять проблемы, упрощать анализ и сокращать количество ложных срабатываний.&lt;/p&gt;

&lt;p&gt;Если вы хотите использовать функции машинного обучения, в вашем кластере должен быть хотя бы один узел машинного обучения.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Координационный узел (coordinating node)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Координирующий узел - это узел, который получает и обрабатывает запросы. Каждый узел неявно является координирующим узлом.&lt;/p&gt;

&lt;p&gt;Когда запрос получен, координатор проверяет состояние кластера, чтобы найти соответствующий ресурс для обслуживания этого запроса, и пересылает его на соответствующий узел (узлы) перед ответом.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Существуют разные роли узлов, и узлы могут иметь одну или несколько ролей одновременно.&lt;/li&gt;
  &lt;li&gt;Узлы данных содержат &lt;code class=&quot;highlighter-rouge&quot;&gt;shards&lt;/code&gt; и выполняют операции, связанные с данными, такие как &lt;code class=&quot;highlighter-rouge&quot;&gt;CRUD&lt;/code&gt;, поиск и агрегирование.&lt;/li&gt;
  &lt;li&gt;Узлы приема предварительно обрабатывают документы перед индексацией в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Узлы машинного обучения выполняют задания машинного обучения&lt;/li&gt;
  &lt;li&gt;Более крупные кластеры с большим объемом должны иметь выделенные узлы для повышения производительности и использования ресурсов.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 19 Mar 2021 20:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-node-roles</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-node-roles</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>YubiKey - Используем FIDO2</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Что такое этот ваш FIDO2?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;FIDO2&lt;/strong&gt; - это открытый стандарт аутентификации, поддерживаемый &lt;code class=&quot;highlighter-rouge&quot;&gt;FIDO Alliance&lt;/code&gt;, который состоит из спецификации веб-аутентификации &lt;code class=&quot;highlighter-rouge&quot;&gt;W3C&lt;/code&gt; (WebAuthn API) и протокола аутентификации клиента (&lt;code class=&quot;highlighter-rouge&quot;&gt;CTAP&lt;/code&gt;). &lt;code class=&quot;highlighter-rouge&quot;&gt;CTAP&lt;/code&gt; - это протокол прикладного уровня, используемый для связи между клиентом (браузером) или платформой (операционной системой) с внешним аутентификатором, таким как &lt;strong&gt;YubiKey 5 Series&lt;/strong&gt; и &lt;strong&gt;Security Key Series&lt;/strong&gt; от &lt;strong&gt;Yubico&lt;/strong&gt;. &lt;strong&gt;Yubico&lt;/strong&gt; является основным разработчиком открытого протокола аутентификации &lt;strong&gt;FIDO2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Проще говоря регистрируясь на сайте вы указываете только имя пользователя и используете ваш &lt;strong&gt;YubiKey&lt;/strong&gt; для создания публичного ключа, который отсылается сервису и привязывается к вашему логину.&lt;/p&gt;

&lt;p&gt;Сам &lt;strong&gt;FIDO2&lt;/strong&gt; пока еще не так сильно распространён, хотя мне кажется это удобнее чем пароли  и его уже использует многие web гиганты, но в основном как двухфакторную аутентификацию. Поэтому я покажу как это работает на &lt;a href=&quot;https://webauthn.io/&quot;&gt;демо сайте&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Работает &lt;strong&gt;FIDO2&lt;/strong&gt; уже почти во всех новых браузерах. Список совместимости можно посмотреть &lt;a href=&quot;https://support.yubico.com/hc/en-us/articles/360016615020-Operating-system-and-web-browser-support-for-FIDO2&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Основные преимущества перед простым паролем:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Короткие пароли можно быстро взломать (brute-force)&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Пользователи повторно используют один и тот же пароль на нескольких веб-сайтах.&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Фишинговые атаки являются обычным явлением и часто позволяют злоумышленникам получить пароли.&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Ну и конечно пользователь может забыть свой пароль на каком-либо сайте если его не использует&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Да кто-то скажет что &lt;strong&gt;YubiKey&lt;/strong&gt;  можно потерять и будет прав. Но для того и ставится &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN-код&lt;/code&gt; чтобы обезопасить вас. Т.е если кто-то найдёт ваш &lt;strong&gt;YubiKey&lt;/strong&gt; ему нужно будет ещё знать ваш &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN&lt;/code&gt;. Ну и естественно желательно иметь 2 &lt;strong&gt;YubiKey&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Как это работает&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Когда вы проводите регистрацию на сайте первым делом генерируется пара закрытого и открытого ключа на вашем &lt;strong&gt;YubiKey&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Далее открытый ключ передаётся стороне, на которой вы производите регистрацию&lt;/li&gt;
  &lt;li&gt;Сторона на которой вы регистрируетесь связывает этот публичный ключ с вашей учетной записью и хранит его у себя.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Используем FIDO2&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для начала задаём &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey Manager&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вставляем &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;USB&lt;/code&gt; порт компьютера&lt;/li&gt;
  &lt;li&gt;Запускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey Manager&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Applications&lt;/code&gt; -&amp;gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;FIDO2&lt;/code&gt;
&lt;img src=&quot;/static/img/all/2021-03-18_15-11.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Наживаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Set PIN&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Дважды вбиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Для регистрации используя &lt;strong&gt;FIDO2&lt;/strong&gt; выполняем:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вставляем наш ключ &lt;strong&gt;YubiKey&lt;/strong&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;usb&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Переходим на &lt;a href=&quot;https://webauthn.io/&quot;&gt;сайт&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Вводим логин&lt;/li&gt;
  &lt;li&gt;Нажимаем регистрироваться
&lt;img src=&quot;/static/img/all/2021-03-18_15-02.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;OK&lt;/code&gt; на запросе
&lt;img src=&quot;/static/img/all/2021-03-18_15-03.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Вбиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN&lt;/code&gt;, который мы прописывали в &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey Manager&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Касаемся нашего &lt;code class=&quot;highlighter-rouge&quot;&gt;YubiKey&lt;/code&gt;
&lt;img src=&quot;/static/img/all/2021-03-18_15-05.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;И вот мы зарегистрировались не вбивая при этом нигде пароля
&lt;img src=&quot;/static/img/all/2021-03-18_15-06.png&quot; alt=&quot;enter link description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Пробуем залогиниться (Нажимаем Login)&lt;/li&gt;
  &lt;li&gt;Опять вбиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Касаемся нашего &lt;strong&gt;YubiKey&lt;/strong&gt; и удачно логинимся
&lt;img src=&quot;/static/img/all/2021-03-18_15-08.png&quot; alt=&quot;enter link description here&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Видео&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/R5GvVE81s-U&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Thu, 18 Mar 2021 23:17:39 +0600</pubDate>
        <link>http://www.tipoit.kz/yubikey-using-FIDO2</link>
        <guid isPermaLink="true">http://www.tipoit.kz/yubikey-using-FIDO2</guid>
        
        <category>security</category>
        
        <category>YubiKey</category>
        
        <category>FIDO2</category>
        
        
      </item>
    
      <item>
        <title>Что такое YubiKey?</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;История возникновения&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как обычно всё началось с мечты. Два изобретателя &lt;code class=&quot;highlighter-rouge&quot;&gt;Стина Эренсвард&lt;/code&gt; и ее муж &lt;code class=&quot;highlighter-rouge&quot;&gt;Якоб Эренсвард&lt;/code&gt; объединили свои таланты и создали &lt;strong&gt;YubiKey&lt;/strong&gt;, устройство аутентификации для входа в учетную запись. Маленькое черное USB-устройство быстро завоевало мировую популярность и привлекло очень много внимания, в том числе ведущих интернет-компаний, и вскоре шведская компания &lt;strong&gt;Yubico&lt;/strong&gt; была приглашена в &lt;code class=&quot;highlighter-rouge&quot;&gt;Кремниевую долину&lt;/code&gt;, чтобы представить свое творение.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Что такое YubiKey&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Основные методы применения устройств &lt;strong&gt;YubiKey&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Безпарольная аутентификация (Passwordless)&lt;/code&gt;
 Есть метод аутентификации позволяющий вам регистрироваться на сайте не применяя при этом пароль.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Двухфакторная аутентификация (2FA)&lt;/code&gt;
 Осуществляет надежную двухфакторную аутентификацию с использованием аппаратного аутентификатора в качестве дополнительного уровня защиты помимо пароля. Этакий свой собственный &lt;code class=&quot;highlighter-rouge&quot;&gt;google-аутентификатор&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Многофакторная аутентификация  (MFA)&lt;/code&gt;
 Обеспечивает высочайший уровень безопасности с помощью надежной многофакторной аутентификации с использованием аппаратного аутентификатора и &lt;code class=&quot;highlighter-rouge&quot;&gt;PIN-кода&lt;/code&gt; или биометрических данных.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Благодаря всем этим возможностям &lt;strong&gt;YubiKey&lt;/strong&gt; осуществляет защиту вашего входа в учетные записи социальных сетей, приложений, почтовой службы, ноутбука и от взлома этих учетных записей. В других статьях я рассмотрю все методы подробнее.&lt;/p&gt;

&lt;p&gt;Основное предназначение &lt;strong&gt;YubiKey&lt;/strong&gt; на мой взгляд это использование его для двухфакторной аутентификации.&lt;/p&gt;

&lt;p&gt;Ознакомиться со всеми моделями &lt;strong&gt;YubiKey&lt;/strong&gt; от &lt;strong&gt;Yubico&lt;/strong&gt; вы можете &lt;a href=&quot;https://www.yubico.com/setup/&quot;&gt;здесь&lt;/a&gt;. В моём же распоряжение модель &lt;a href=&quot;https://www.yubico.com/works-with-yubikey/catalog/#protocol=all&amp;amp;usecase=all&amp;amp;key=yubikey-5-nfc&quot;&gt;YubiKey 5 NFC&lt;/a&gt;. Плюсом данной модели является наличие &lt;code class=&quot;highlighter-rouge&quot;&gt;nfc модуля&lt;/code&gt;, в связи с чем можно просто подносить его к телефону с &lt;code class=&quot;highlighter-rouge&quot;&gt;nfc&lt;/code&gt; и токен (одноразовый пароль) вставится автоматически в поле запроса. В этой модели при нажатии на кружок в центре происходит генерация одноразового пароля. Это не сканер отпечатков как могло показаться.&lt;/p&gt;

&lt;p&gt;По умолчанию &lt;strong&gt;YubiKey&lt;/strong&gt; случайным образом генерирует статический пароль &lt;code class=&quot;highlighter-rouge&quot;&gt;ModHex&lt;/code&gt;, который содержит только буквы «c b d e f g h i j k l n r t u v». Этот тип статического пароля относительно хорошо работает со всеми раскладками клавиатуры, что делает его популярным. Также эти буквы заменяются на кириллицу если при использовании &lt;strong&gt;YubiKey&lt;/strong&gt; у вас стоит русская раскладка клавиатуры.&lt;/p&gt;

&lt;p&gt;В сети гуляют рассказы о том, как &lt;strong&gt;YubiKey&lt;/strong&gt; грызли собаки, как его стирали вместе с вещами, и он всё равно продолжал работать. В общем говорят, что он почти не убиваем. На самом официальном сайте говорится о том, что он удароустойчив и водонепроницаем.&lt;/p&gt;

&lt;p&gt;Также немаловажным плюсом для выбора продуктов от &lt;strong&gt;Yubico&lt;/strong&gt; это то что компания является ключевым участником разработки открытых протоколов аутентификации, чтобы стандартизировать безопасность для браузеров и платформ.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;YubiKey Manager&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используйте &lt;strong&gt;YubiKey Manager&lt;/strong&gt; для настройки функций &lt;code class=&quot;highlighter-rouge&quot;&gt;FIDO2&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;OTP&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;PIV&lt;/code&gt; на вашем &lt;strong&gt;YubiKey&lt;/strong&gt; в операционных системах &lt;code class=&quot;highlighter-rouge&quot;&gt;Windows&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;macOS&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;Linux&lt;/code&gt;. Инструмент работает с любым &lt;strong&gt;YubiKey&lt;/strong&gt;, поддерживаемым в настоящее время. Вы также можете использовать этот инструмент для проверки типа и прошивки &lt;strong&gt;YubiKey&lt;/strong&gt;. Кроме того, вы можете использовать расширенные настройки, чтобы указать другие функции, например, настроить 3-секундное касание.&lt;/p&gt;

&lt;p&gt;Для установки скачиваем с &lt;a href=&quot;https://www.yubico.com/support/download/yubikey-manager/&quot;&gt;сайта&lt;/a&gt; нужную нам версию и устанавливаем её.&lt;/p&gt;

&lt;p&gt;При первом запуске &lt;strong&gt;YubiKey Manager&lt;/strong&gt; если у вас уже подключен &lt;strong&gt;YubiKey&lt;/strong&gt; то вы увидите версию прошивки вашего механического &lt;strong&gt;YubiKey&lt;/strong&gt;, его модель и серийный номер.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Дополнительные статьи&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/yubikey-using-FIDO2&quot;&gt;YubiKey - Используем FIDO2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/yubikey-enable-2fa-in-linux&quot;&gt;YubiKey - Включаем двухфакторную аутентификацию в Linux&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Видео&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/In8I6P0U40o&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Thu, 18 Mar 2021 23:15:39 +0600</pubDate>
        <link>http://www.tipoit.kz/what-is-yubikey</link>
        <guid isPermaLink="true">http://www.tipoit.kz/what-is-yubikey</guid>
        
        <category>security</category>
        
        <category>YubiKey</category>
        
        <category>2FA</category>
        
        
      </item>
    
      <item>
        <title>ELK - Что такое master node и cluster</title>
        <description>&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;elastcsearch&lt;/code&gt; каждый экземпляр/сервер с установленным &lt;code class=&quot;highlighter-rouge&quot;&gt;elascsearch&lt;/code&gt; называется &lt;strong&gt;нодой&lt;/strong&gt; (&lt;strong&gt;node&lt;/strong&gt;).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Кластер&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Объединение нескольких нод в одну группу, с одинаковым именем называется &lt;strong&gt;кластером&lt;/strong&gt; (&lt;strong&gt;cluster&lt;/strong&gt;). Для создания &lt;strong&gt;кластера&lt;/strong&gt; используется атрибут &lt;code class=&quot;highlighter-rouge&quot;&gt;cluster.name&lt;/code&gt;, в котором задаётся имя кластера. Когда ноды присоединяются к &lt;strong&gt;кластеру&lt;/strong&gt; или отключаются от него, &lt;strong&gt;кластер&lt;/strong&gt; автоматически реорганизуется для равномерного распределения данных по доступным узлам.&lt;/p&gt;

&lt;p&gt;Минимальное количество нод в кластере равняется 3.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Связь внутри кластера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;elastcsearch&lt;/code&gt; присутствуют 2 основных механизма коммуникации на сетевом уровне:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;HTTP&lt;/strong&gt;, который предоставляет &lt;code class=&quot;highlighter-rouge&quot;&gt;REST API Elasticsearch&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt; используется для связи между узлами в &lt;strong&gt;кластере&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;HTTP&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию присваивается значение &lt;code class=&quot;highlighter-rouge&quot;&gt;localhost&lt;/code&gt;, с помощью атрибута &lt;code class=&quot;highlighter-rouge&quot;&gt;http.host&lt;/code&gt;. Порт по умолчанию является первым доступным между 9200-9299 и настраивается с помощью &lt;code class=&quot;highlighter-rouge&quot;&gt;http.port&lt;/code&gt; (можно просто указать один).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Transport&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый запрос между узлами в кластере происходит именно по **transport **. Например, когда вы, используя &lt;code class=&quot;highlighter-rouge&quot;&gt;get&lt;/code&gt; обращаясь к данным, которые лежат на другой ноде будет использоваться **transport ** для получения данных основной нодой.&lt;/p&gt;

&lt;p&gt;Транспорт по умолчанию привязывается к &lt;code class=&quot;highlighter-rouge&quot;&gt;localhost&lt;/code&gt; и настраивается с помощью &lt;code class=&quot;highlighter-rouge&quot;&gt;transport.host&lt;/code&gt;. Порт по умолчанию является первым доступным между 9300-9399 и настраивается с помощью &lt;code class=&quot;highlighter-rouge&quot;&gt;transport.tcp.port&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Специальные значения для network.host&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы привязываете и &lt;strong&gt;transport ** и **http&lt;/strong&gt; к одному &lt;code class=&quot;highlighter-rouge&quot;&gt;ip адресу&lt;/code&gt; можно воспользоваться одним атрибутом &lt;code class=&quot;highlighter-rouge&quot;&gt;network.host&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Следующие специальные значения могут использоваться для &lt;code class=&quot;highlighter-rouge&quot;&gt;network.host&lt;/code&gt;, например если вы не хотите жёстко привязываться к &lt;code class=&quot;highlighter-rouge&quot;&gt;ip адресу&lt;/code&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Значение&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;_local_&lt;/td&gt;
      &lt;td&gt;Любые адреса обратной связи в системе (например, 127.0.0.1)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;_site_&lt;/td&gt;
      &lt;td&gt;Любой локальный адрес сайта в системе (например, 192.168.1.1)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;_global_&lt;/td&gt;
      &lt;td&gt;Любые глобальные адреса в системе (статика)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;_[networkInterface]_&lt;/td&gt;
      &lt;td&gt;Адрес сетевого интерфейса (например, eth0)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Поиск нод внутри кластера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Модуль обнаружения&lt;/strong&gt; (&lt;strong&gt;Discovery Module&lt;/strong&gt;) отвечает за обнаружение нод в кластере. Процесс модуля обнаружения помогает нодам находить друг друга. Сами узлы он получает из переменной &lt;code class=&quot;highlighter-rouge&quot;&gt;discovery.seed_hosts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Когда вы прописали значение для &lt;code class=&quot;highlighter-rouge&quot;&gt;discovery.seed_hosts&lt;/code&gt; модуль берёт оттуда каждый хост и проверяет его на доступность, посылая &lt;code class=&quot;highlighter-rouge&quot;&gt;ping запросы&lt;/code&gt;. Происходит это на каждой ноде в кластере. Если нода не найдёт ни одной ноды с одинаковым именем кластера (&lt;code class=&quot;highlighter-rouge&quot;&gt;cluster.name&lt;/code&gt;) она создаст свой кластер.&lt;/p&gt;

&lt;p&gt;Примеры discovery.seed_hosts:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;discovery.seed_hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;discovery.seed_hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;file.txt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code class=&quot;language-bahs&quot;&gt;sudo cat file.txt
host1
host2
host3
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;Статус кластера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы узнать, как себя чувствует кластер можно проверить &lt;strong&gt;состояние кластера&lt;/strong&gt; (&lt;strong&gt;cluster state&lt;/strong&gt;).  С помощью &lt;code class=&quot;highlighter-rouge&quot;&gt;API&lt;/code&gt; состояния кластера вы можете получить доступ к метаданным, представляющим состояние всего кластера. А именно набор узлов в кластере, индексы, сопоставления, настройки, выделение сегментов и т. Д.&lt;/p&gt;

&lt;p&gt;Вы можете использовать конечную точку &lt;code class=&quot;highlighter-rouge&quot;&gt;_cluster&lt;/code&gt; для просмотра состояния кластера:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET _cluster/state
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для укороченного вывода можно использовать:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET _cluster/health
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-cluster&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;green&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;timed_out&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_nodes&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_data_nodes&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;active_primary_shards&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;active_shards&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;93&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;relocating_shards&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;initializing_shards&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;unassigned_shards&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delayed_unassigned_shards&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_pending_tasks&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_in_flight_fetch&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;task_max_waiting_in_queue_millis&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;active_shards_percent_as_number&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;100.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Мастер нода (Master Node)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В каждом кластере существует &lt;strong&gt;мастер нода&lt;/strong&gt;, через которую выполняются основные операции, например, создание индекса. Состояние кластера хранится на каждом узле, и его может изменить только &lt;strong&gt;мастер нода&lt;/strong&gt;, которая распространяет его на остальные ноды.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Мастер нода&lt;/strong&gt; выбирается в кластере путем голосования всеми нодами. Для того чтобы какая-либо нода сала мастером за неё должно проголосовать большинство.&lt;/p&gt;

&lt;p&gt;Если &lt;strong&gt;мастер нода&lt;/strong&gt; выбывает из кластера начинается новое голосование и выбирается новая &lt;strong&gt;мастер нода&lt;/strong&gt;. После того как старая мастер нода возвращается ей говорится что уже избрана новая &lt;strong&gt;мастер нода&lt;/strong&gt; и ты уже ничего не решаешь, т.е её время прошло. В принципе всё как в жизни.&lt;/p&gt;

&lt;p&gt;Обычно лучше иметь нечетное количество узлов, имеющих право быть мастером, чтобы был кворум во время выбора мастера. Если у вас есть четное количество узлов, &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; исключит один, чтобы избежать ничьих выборов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Конфигурация голосования&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый кластер &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; имеет &lt;strong&gt;конфигурацию голосования&lt;/strong&gt;, которая представляет собой набор узлов для голосования, ответы которых учитываются при принятии таких решений, как выбор нового мастера. Решения принимаются только после того, как большинство (более половины) узлов в конфигурации голосования выберут одного и того же кандидата.&lt;/p&gt;

&lt;p&gt;Чтобы получить текущую конфигурацию голосования:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET _cluster/state?filter_path&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;metadata.cluster_coordination.last_committed_config
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;metadata&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster_coordination&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;last_committed_config&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#host&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;eiX9un9MSZ-4KsmZyEhE9Q&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#host&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;CkcXQe1jRQS9_gCJ3WGkVg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#host&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MOJcfnA4T82Pmlb2Q6wPyA&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы задать кто именно имеет права голоса можно воспользоваться переменной &lt;strong&gt;cluster.initial_master_nodes&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;cluster.initial_master_nodes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; использует два механизма сетевой связи: &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTP&lt;/code&gt; для клиентов &lt;code class=&quot;highlighter-rouge&quot;&gt;REST&lt;/code&gt;; и &lt;code class=&quot;highlighter-rouge&quot;&gt;transport&lt;/code&gt; для меж узловой связи&lt;/li&gt;
  &lt;li&gt;Детали кластера сохраняются в состоянии кластера&lt;/li&gt;
  &lt;li&gt;В каждом кластере есть один узел, назначенный мастер нодой&lt;/li&gt;
  &lt;li&gt;У вас есть возможность указать какие ноды имеют право голосовать&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 18 Mar 2021 02:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-cluster-and-master-node</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-cluster-and-master-node</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        <category>cluster</category>
        
        
      </item>
    
      <item>
        <title>ELK - Сопоставления типов полей</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Автоматическое создание типа поля&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию при индексировании документа &lt;code class=&quot;highlighter-rouge&quot;&gt;elastcsearch&lt;/code&gt; пытается автоматом сопоставлять данные с типом поля. Но бывают ситуации, когда луче бы он этого и не делал.&lt;/p&gt;

&lt;p&gt;Вот пример:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#создаём&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;индекс&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#получаем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тип&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;поля&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my-index&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#на&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тип&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;4&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sum&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#В&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;итоге&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;мы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;получили&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;потому&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;что&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;было&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;преобразовано&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;long,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;т.е&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;aggregations&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;NAME&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;11.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Чтобы отключить автоматическое сопоставление создаём поле с &lt;code class=&quot;highlighter-rouge&quot;&gt;corece: false&lt;/code&gt;. При этом вы сможете после этого индексировать документы с типом поля только в &lt;code class=&quot;highlighter-rouge&quot;&gt;long&lt;/code&gt;, иначе получите ошибку индексации &lt;code class=&quot;highlighter-rouge&quot;&gt;illegal_argument_exception&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;coerce&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Нулевое значение в поле&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При индексировании документа в значение поля также может попасть и значение &lt;strong&gt;Null&lt;/strong&gt;, которое не приведёт к ошибке и не будет никак влиять, например, на математические операции.&lt;/p&gt;

&lt;p&gt;Но если вы хотите менять все нулевые значения на какое-либо другое значение можно воспользоваться &lt;strong&gt;null_value&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;null_value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;итоге&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;получим&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sum&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Указание формата поля с датой&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elastcsearch&lt;/code&gt; автоматически проверяет поле на формат с датой. Но если вам нужно изменить формат даты &lt;code class=&quot;highlighter-rouge&quot;&gt;ISO&lt;/code&gt; вам потребуется собственные сопоставления.&lt;/p&gt;

&lt;p&gt;Для использования этой возможности придётся использовать команду &lt;strong&gt;format&lt;/strong&gt; для поля. Важно при этом &lt;code class=&quot;highlighter-rouge&quot;&gt;elstcsearch&lt;/code&gt; не будет перестраивать поле, т.е данные должны приходить именно в том формате что вы указали.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#т.е&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;мы&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;говорим&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;что&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сперва&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;идёт&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;год&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;месяц&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;день&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;format&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;yyyy-MM-dd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Индексирование с ошибкой :&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;12-01-2020&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#failed&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;field&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12-01-2020&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yyyy-MM-dd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Индексирование без ошибки :&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2020-12-01&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также вы можете указать один из следующих &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html&quot;&gt;форматов ISO&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;А что если вы шлёте данные из разных источников и тип даты разный? На самом деле всё просто, format поддерживает указание множественных типов благодаря &lt;code class=&quot;highlighter-rouge&quot;&gt;||&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;format&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;yyyy-MM-dd||basic_date&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Рекомендуемый процесс сопоставления&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если у вас есть пример ваших будущих данных для индекса правильным будет следующий процесс сопоставления:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Вставляете данные во временный &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;temp-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Ivan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Lazarev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;city&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выводите то, что &lt;code class=&quot;highlighter-rouge&quot;&gt;elastcsearch&lt;/code&gt; сопоставил автоматически
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;temp-index/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Копируете вывод в текстовый файл&lt;/li&gt;
  &lt;li&gt;Редактируете сопоставления так как нужно вам&lt;/li&gt;
  &lt;li&gt;Создаёте индекс
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;city&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
         &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Удаляете временный индекс&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sun, 14 Mar 2021 20:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-custom-mappngs</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-custom-mappngs</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Использование copy_to</title>
        <description>&lt;p&gt;&lt;strong&gt;Copy_to&lt;/strong&gt; используется для копирования значений нескольких полей в одно, но при этом это поле не будет выводиться в &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Представим ситуацию что у вас есть 3 поля, и вы часто ищите информацию по всем этим полям. И чтобы не писать каждый раз запросы на все поля вы можете объединить эти 3 поля в одно с помощью &lt;strong&gt;Copy_to&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Скопируем значения полей &lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;surname&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;city&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;everything&lt;/code&gt;. И попробуем поискать в &lt;code class=&quot;highlighter-rouge&quot;&gt;everything&lt;/code&gt; человека с именем &lt;code class=&quot;highlighter-rouge&quot;&gt;Pavel&lt;/code&gt;, проживающего допустим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Astana&lt;/code&gt;. Когда вы индексируете документ, значения трех разных полей добавляются в &lt;a href=&quot;https://www.tipoit.kz/elk-inverted-index-and-doc-values&quot;&gt;инвертированный индекс&lt;/a&gt; поля &lt;code class=&quot;highlighter-rouge&quot;&gt;everything&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#создаём&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;copy_to&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;everything&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;copy_to&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;everything&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cty&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;copy_to&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;everything&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;everything&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Ivan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;city&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bubnov&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Ivan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;city&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buba&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;everything&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ivan astana&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В выводе получим:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;hits&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_index&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_doc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_score&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.18232156&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Ivan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;city&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bubnov&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_index&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_doc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_score&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.18232156&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_source&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Ivan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;city&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Astana&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;surname&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Buba&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 14 Mar 2021 20:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-copy-to</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-copy-to</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Pi-Hole - Установка</title>
        <description>&lt;h2 id=&quot;что-это-такое&quot;&gt;Что это такое?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pi-Hole&lt;/strong&gt; - сервис для блокировки запрос нежелательных &lt;code class=&quot;highlighter-rouge&quot;&gt;днс&lt;/code&gt; имён. Под нежелательными подразумеваются &lt;code class=&quot;highlighter-rouge&quot;&gt;веб ресурсы&lt;/code&gt; с порнографией, насилием, наркотиками и другие. Т.е. благодаря &lt;strong&gt;Pi-Hole&lt;/strong&gt; вы можете быть в уверенности что сотрудники организации или дети в вашем доме не переходят на нежелательные сайты. Также вы можете заблокировать доступ к любому другому сайту, например, &lt;code class=&quot;highlighter-rouge&quot;&gt;youtube&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;

&lt;p&gt;Установку можно произвести на &lt;code class=&quot;highlighter-rouge&quot;&gt;linux based&lt;/code&gt; системы. Полный список можно просмотреть &lt;a href=&quot;https://docs.pi-hole.net/main/prerequisites/#supported-operating-systems&quot;&gt;тут&lt;/a&gt;. Я же буду ставить на &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS Stream&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Нужно отключить &lt;code class=&quot;highlighter-rouge&quot;&gt;Selinux&lt;/code&gt;, иначе будет ошибка установки
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/selinux/config
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;SELINUX=disabled&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезагружаем сервер
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo reboot
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ставим &lt;strong&gt;Pi-Hole&lt;/strong&gt; используя всего лишь одну команду
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo bash -c &lt;span class=&quot;s2&quot;&gt;&quot;curl -sSL https://install.pi-hole.net | bash&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Жмём Enter
&lt;img src=&quot;/static/img/all/2021-03-13_12-36.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Жмём Enter
&lt;img src=&quot;/static/img/all/2021-03-13_12-37.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Выбираем наши верхние &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; сервера
&lt;img src=&quot;/static/img/all/2021-03-13_12-39.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Выбираем по каким протоколам фильтровать
&lt;img src=&quot;/static/img/all/2021-03-13_12-40.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Соглашаемся с настройками &lt;code class=&quot;highlighter-rouge&quot;&gt;ip&lt;/code&gt;
&lt;img src=&quot;/static/img/all/2021-03-13_12-41.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Устанавливаем веб панель
&lt;img src=&quot;/static/img/all/2021-03-13_12-42.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Соглашаемся на логирование
&lt;img src=&quot;/static/img/all/2021-03-13_12-43.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем файрволл
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;80/tcp --permanent
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;53/tcp --permanent
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;53/udp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Заходим на веб панель http://127.0.0.1/admin
&lt;img src=&quot;/static/img/all/2021-03-13_12-46.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Прописываем основным &lt;code class=&quot;highlighter-rouge&quot;&gt;днс&lt;/code&gt; сервером наш &lt;strong&gt;Pi-Hole&lt;/strong&gt;
&lt;img src=&quot;/static/img/all/2021-03-13_12-47.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Пробуем зарезолвить днс имя нежелательного сайта (должно вернуть 0.0.0.0)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nslookup 0byv9mgbn0.com
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/7uirvL09wEQ&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Fri, 12 Mar 2021 19:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/pi-hole-install</link>
        <guid isPermaLink="true">http://www.tipoit.kz/pi-hole-install</guid>
        
        <category>linux</category>
        
        <category>dns</category>
        
        <category>security</category>
        
        <category>pi-hole</category>
        
        
      </item>
    
      <item>
        <title>ELK - Metricbeat настройка модуля nginx</title>
        <description>&lt;p&gt;В прошлых статьях я уже писал о &lt;strong&gt;metricbeat&lt;/strong&gt; и о том, как его ставить и о базовых настройках, так что тут я это опущу.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Конфигурация nginx&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;На самом сервере нужно включить вывод статистики. Для этого редактируем стандартный файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/nginx/nginx.conf&lt;/code&gt; или добавляем новый &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/nginx/conf.d/stat.conf&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаём конфиг файл
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/nginx/conf.d/stat.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;listen&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default_server;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/nginx_status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;stub_status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;on;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;С&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;каких&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;адресов&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;давать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;доступ&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;127.0.0.1;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Всем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;остальным&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;запретить&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
     &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;deny&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Применяем новую конфигурацию
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo nginx -t
sudo nginx -s reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем страницу со статистикой
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo curl http://127.0.0.1/nginx_status 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка metricbeat&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Включаем модуль
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat modules &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем модуль
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/metricbeat/modules.d/nginx.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;module:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;period:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Nginx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://127.0.0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;status.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server-status&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server_status_path:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx_status&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;metricbeat&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart metricbeat
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Просмотр bashboard&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В итоге, при открытии dashboard nginx должны получить примерно следующую картину.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/2021-03-09_23-36.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Про то как импортировать dashboard я писал ранее про &lt;strong&gt;metricbeat&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 10 Mar 2021 05:41:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-metricbeat-nginx</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-metricbeat-nginx</guid>
        
        <category>elkstack</category>
        
        <category>nginx</category>
        
        <category>metricbeat</category>
        
        
      </item>
    
      <item>
        <title>ELK - Metricbeat настройка модуля postgresql</title>
        <description>&lt;p&gt;В прошлых статьях я уже писал о &lt;strong&gt;metricbeat&lt;/strong&gt; и о том, как его ставить и о базовых настройках, так что тут я это опущу.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включение модуля postgresql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Включаем модуль &lt;strong&gt;postgresql&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat mudules &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;postgresql
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;metricbeat&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo sysytemctl restart metricbeat 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Конфигурация модуля postgresql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для мониторинга естественно используется подключения к бд, и соответственно нужно настроить доступ к бд.&lt;/p&gt;

&lt;p&gt;Настройки модуля находятся по пути /etc/metricbeat/modules.d/postgresql.yml.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаём &lt;code class=&quot;highlighter-rouge&quot;&gt;keystore&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat keystore create
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём ключи &lt;code class=&quot;highlighter-rouge&quot;&gt;keystore&lt;/code&gt;, в которые вводим логин и пароль для подключения к &lt;code class=&quot;highlighter-rouge&quot;&gt;postgres&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat keystore add MY_USR
sudo metricbeat keystore add MY_PWD
sudo metricbeat keystore list
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;И настраиваем сам модуль
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/metricbeat/modules.d/postgresql.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;module:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;postgresql&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;metricsets:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bgwriter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;activity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;можно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;выставить&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;интервал&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;мониторинга&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;period:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#postgres&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;это&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;бд,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;к&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;которой&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;будем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;подключаться&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;postgres://127.0.0.1:5432/postgres?sslmode=disable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#логин&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;${MY_USR}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#пароль&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;${MY_PWD}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Права для пользователя в postgresql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тут самое интересное я не нашел какой-то внятной статьи о правах в которых нуждается пользователь, под которым осуществляется аутентификация. Поэтому просто напишу тут какие права выдал я и это сработало.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Естественно первым делом connect к бд postgres&lt;/li&gt;
  &lt;li&gt;Роли pg_read_all_stats, pg_execute_server_program&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Почему именно эти я уже и не вспомню. Дело в том, что я использовал существующую учетную запись для мониторинга, и права были у неё такие.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включаем логирование pg_stat_statements&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Включаем &lt;code class=&quot;highlighter-rouge&quot;&gt;pg_stat_statements&lt;/code&gt;. Для этого редактируем файл конфигураций самого &lt;code class=&quot;highlighter-rouge&quot;&gt;postgresql&lt;/code&gt; (путь может различаться). Для поиска файла можно воспользваться &lt;code class=&quot;highlighter-rouge&quot;&gt;find / -name postgresql.conf&lt;/code&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /var/lib/pgsql/12/data/postgresql.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;shared_preload_libraries&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'pg_stat_statements'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pg_stat_statements.max&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pg_stat_statements.track&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём &lt;code class=&quot;highlighter-rouge&quot;&gt;extention&lt;/code&gt;
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EXTENSION&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pg_stat_statements&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем pg_stat_statements
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pg_stat_statements&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем statement в &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/metricbeat/modules.d/postgresql.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;//- module: postgresql
  metricsets:
 //- statement
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;postgres&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo sysytemctl restart postgresql-12
sudo sysytemctl restart metricbeat 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sat, 20 Feb 2021 17:15:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-metricbeat-postgres</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-metricbeat-postgres</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        <category>metricbeat</category>
        
        <category>postgresql</category>
        
        
      </item>
    
      <item>
        <title>ELK - Установка и настройка Metricbeat</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Установка metricbeat&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Качаем и устанавливаем &lt;strong&gt;metricbeat&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.11.1-x86_64.rpm
sudo rpm -vi metricbeat-7.11.1-x86_64.rpm
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Активируем автозагрузку и запускаем &lt;strong&gt;metricbeat&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;metricbeat
sudo systemctl start metricbeat
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Активируем модули&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Для просмотра всех возможных модулей выполняем
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat modules list
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Активируем нужные нам модули
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;metricbeat modules &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;linux logstash
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Также не лишним будет глянуть файл &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/metricbeat/metricbeat.reference.yml&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настраиваем куда слать логи&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Прописываем куда слать логи
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/metricbeat/metricbeat.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;output.elasticsearch:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node3.my.lan:5122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node2.my.lan:5122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node1.my.lan:5122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#или&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;protocol:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logstash&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;output.logstash:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node3.my.lan:5044&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node2.my.lan:5044&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node1.my.lan:5044&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;loadbalance:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если вы используете &lt;code class=&quot;highlighter-rouge&quot;&gt;logstash&lt;/code&gt; то придётся вручную создать `index в кластере. Для этого:
    &lt;ul&gt;
      &lt;li&gt;Создаём роль через &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt;
        &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_xpack/security/role/metricbeat_internal&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;monitor&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;read_ilm&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;manage_ilm&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;manage&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;indices&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;names&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;metricbeat-*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;privileges&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;create_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;manage&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;Создаём пользователя через &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt;
        &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_xpack/security/user/metricbeat_internal&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;YOUR_PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;roles&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;kibana_admin&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;metricbeat_internal&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;full_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Internal Metricbeat User&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;Настраиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;output.elasticsearch&lt;/code&gt; как выше&lt;/li&gt;
      &lt;li&gt;Создаём индекс вручную
        &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat setup --index-management -E output.logstash.enabled&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt; -E &lt;span class=&quot;s1&quot;&gt;'output.elasticsearch.hosts=[&quot;https://elk-node3.my.lan:9122&quot;, &quot;https://elk-node2.my.lan:9122&quot;,&quot;https://elk-node1.my.lan:9122&quot;]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;Комментируем  &lt;code class=&quot;highlighter-rouge&quot;&gt;output.elasticsearch&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;metricbeat&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart metricbeat
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Доступ к метрикам&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если всё проделано правильно, то в &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt; появится индекс типа &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat-7.11.0-2021.02.18-000001&lt;/code&gt;. И пройдя по &lt;a href=&quot;https://elk-kibana.my.lan:5106/app/metrics/inventory?waffleFilter=%28expression:%27%27,kind:kuery%29&amp;amp;waffleTime=%28currentTime:1613628532359,isAutoReloading:!t%29&amp;amp;waffleOptions=%28accountId:%27%27,autoBounds:!t,boundsOverride:%28max:1,min:0%29,customMetrics:!%28%29,customOptions:!%28%29,groupBy:!%28%29,legend:%28palette:cool,reverseColors:!f,steps:10%29,metric:%28type:cpu%29,nodeType:host,region:%27%27,sort:%28by:name,direction:desc%29,view:map%29&quot;&gt;ссылке&lt;/a&gt; вы увидите метрики.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/2021-02-18_12-11.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание пользователя для выгрузки &lt;code class=&quot;highlighter-rouge&quot;&gt;dashboard&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Metricbeat&lt;/strong&gt; поставляется в комплекте с примерами &lt;code class=&quot;highlighter-rouge&quot;&gt;dashboard Kibana&lt;/code&gt;, визуализацией и поиском для визуализации данных &lt;code class=&quot;highlighter-rouge&quot;&gt;Metricbeat&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;. Для того, чтобы это использовать вы должны выгрузить это с metricbeat в &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создаём пользователя &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat_internal&lt;/code&gt;  с ролью &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana_admin&lt;/code&gt; через &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt; (dev tools)
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/_xpack/security/user/metricbeat_internal&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;YOUR_PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;roles&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;kibana_admin&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;full_name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Internal Metricbeat User&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выставляем настройки для подключения к &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/metricbeat/metricbeat.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;setup.dashboards.enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;setup.kibana:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;host:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-kibana.my.lan:5601&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#либо&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;protocol:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;metricbeat_internal&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;YOUR_PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart metricbeat
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;проверяем что у нас создались &lt;code class=&quot;highlighter-rouge&quot;&gt;dashboards&lt;/code&gt; по &lt;a href=&quot;https://elk-kibana.my.lan:5601/app/dashboards#/list?_g=%28filters:!%28%29,query:%28language:kuery,query:%27%27%29,refreshInterval:%28pause:!t,value:0%29,time:%28from:now/d,to:now/d%29%29&quot;&gt;url&lt;/a&gt;
&lt;img src=&quot;/static/img/elk/2021-02-18_09-58.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование keystore&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Конечно если вы беспокоитесь хоть немного о безопасности вы не захотите хранить пароли так просто в открытом виде, в текстовом файле.  Вы можете использовать хранилище ключей &lt;code class=&quot;highlighter-rouge&quot;&gt;Metricbeat&lt;/code&gt; для безопасного хранения секретных значений для использования в настройках конфигурации.&lt;/p&gt;

&lt;p&gt;После добавления ключа и его секретного значения в хранилище ключей вы можете использовать ключ вместо секретного значения при настройке конфиденциальных параметров.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создание keystore
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat keystore create
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем секретное значение, например логин и пароль
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo metricbeat keystore add MY_USR
sudo metricbeat keystore add MY_PWD
sudo metricbeat keystore list
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Используем значения в файле конфигурации
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/metricbeat/metricbeat.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;setup.kibana:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;${MY_USR}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;${MY_PWD}&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Для того чтобы проверить что это сработало можно удалить все &lt;code class=&quot;highlighter-rouge&quot;&gt;dasboard&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;kibana&lt;/code&gt; и перезапустить &lt;code class=&quot;highlighter-rouge&quot;&gt;metricbeat&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 18 Feb 2021 18:27:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-metricbeat-configuration</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-metricbeat-configuration</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        <category>metricbeat</category>
        
        
      </item>
    
      <item>
        <title>ELK - Настройка Logstash</title>
        <description>&lt;p&gt;Конфигурационный файл лежит по стандартному пути  &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/logstash/logstash.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Для авторизации в кластере можно использовать встроенную учетную запись &lt;code class=&quot;highlighter-rouge&quot;&gt;logstash_system&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если кластер elasticsearch без авторизации то всё что касается логинов и паролей можно пропустить.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка мониторинга для узлов Logstash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Добавляем логин &lt;code class=&quot;highlighter-rouge&quot;&gt;logstash_system&lt;/code&gt; и пароль от него. Как задать пароли стандартным пользователям в кластере я уже писал ранее.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim  /etc/logstash/logstash.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.monitoring.enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.monitoring.elasticsearch.username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;logstash_system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.monitoring.elasticsearch.password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'pwd'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если кластер &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;tls&lt;/code&gt;, то указываем путь к сертификату центра сертификации
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim  /etc/logstash/logstash.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.monitoring.elasticsearch.ssl.certificate_authority:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/logstash/root-ca.crt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Указываем ноды кластера для мониторинга logstash
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim  /etc/logstash/logstash.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.monitoring.elasticsearch.hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://elk-node3.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://elk-node2.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://elk-node1.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;На всех нодах &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; в кластере включаем &lt;code class=&quot;highlighter-rouge&quot;&gt;xpack.monitoring.collection&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim  /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.monitoring.collection.enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем все ноды &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;  в кластере
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;В итоге должны получить dashboard в kibana по &lt;a href=&quot;https://elk-kibana.my.lan:5601/app/monitoring#/overview?_g=(cluster_uuid:t9wkFag8Q3SsRhr8YGIeCg,refreshInterval:(pause:!f,value:10000),time:(from:now-1h,to:now))&quot;&gt;url&lt;/a&gt;
&lt;img src=&quot;/static/img/elk/2021-02-17_20-17.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка Logstash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Настраиваем дополнительные параметры
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim  /etc/logstash/logstash.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;node.name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elk-node&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#можно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;оставить&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;по&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;умолчанию&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path.data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/elk/logstash/data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#можно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;оставить&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;по&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;умолчанию&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path.logs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/elk/logstash/logs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path.config:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/logstash/conf.d/*.conf&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Добавляем роль logstash_writer через kibana &lt;a href=&quot;https://elk-kibana.my.lan:5601/app/management/security/roles/edit/logstash_writer&quot;&gt;url&lt;/a&gt;
&lt;img src=&quot;/static/img/elk/2021-02-17_19-38.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Добавляем пользователя logstash_internal и назначаем ему роль logstash_writer через kibana &lt;a href=&quot;https://elk-kibana.my.lan:5601/app/management/security/users/edit/&quot;&gt;url&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем input и output для logstash. Input - это то, что будет слушать logstash и принимать логи. Output - это то куда и как logstash будет пересылать логи.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim  /etc/logstash/conf.d/example.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;beats&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;5044&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;hosts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-node3.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-node2.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;https://elk-node1.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;logstash_internal&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cacert&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'/etc/logstash/root-ca.crt'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем файрволл
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;5044/udp --permanent
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;5044/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем logstash
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart logstash
sudo journalctl -u logstash -f
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 18 Feb 2021 01:47:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-logstash-configuration</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-logstash-configuration</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        <category>logstash</category>
        
        
      </item>
    
      <item>
        <title>ELK - Установка Kibana</title>
        <description>&lt;ol&gt;
  &lt;li&gt;Импорт ключа GPG &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавление репозитория
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/yum.repos.d/elasticsearch.repo
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name=Elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;packages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseurl=https://artifacts.elastic.co/packages/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x/yum&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgcheck=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;autorefresh=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type=rpm-md&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем &lt;strong&gt;Kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install --enablerepo&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;elasticsearch kibana -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Активируем сервис &lt;strong&gt;Kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;kibana 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем &lt;code class=&quot;highlighter-rouge&quot;&gt;java&lt;/code&gt;. Совместимость версий можно проверить &lt;a href=&quot;https://www.elastic.co/support/matrix#matrix_jvm&quot;&gt;тут&lt;/a&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install java-1.8.0-openjdk -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Конфигурация Kibana&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Правим файл конфигурации по стандартному пути /etc/kibana/kibana.yml.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Добавляем доменное имя и порт, который будет слушать &lt;strong&gt;kibana&lt;/strong&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;server.host:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elk-kibana.my.lan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server.port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5601&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Указываем имя сервера (должно совпадать с именем хоста)
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;server.name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-kibana&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Указываем хосты кластера &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://elk-node1.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://elk-node2.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://elk-node3.my.lan:9122&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Стартуем &lt;strong&gt;kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl start kibana
sudo systemctl status kibana 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Получаем доступ к по &lt;a href=&quot;http://elk-kibana.my.lan:5601&quot;&gt;url&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включаем TLS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если нужно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;htpps&lt;/code&gt;, то выполняем следующее&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Получаем сами сертификаты ( у меня в формате  &lt;code class=&quot;highlighter-rouge&quot;&gt;pfx&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Экспортируем публичный сертификат
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; openssl pkcs12 -in /tmp/elk-kibana.my.lan.pfx -clcerts -nokeys -out /tmp/elk-kibana.my.lan.crt
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Экспортируем приватный ключ
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;openssl pkcs12 -in /tmp/elk-kibana.my.lan.pfx -nocerts -nodes -out /tmp/elk-kibana.my.lan.key
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Копируем сертификаты в директорию конфигураций &lt;strong&gt;kibana&lt;/strong&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp /tmp/elk-kibana.my.lan.crt /etc/kibana/elk-kibana.my.lan.crt
sudo cp /tmp/elk-kibana.my.lan.key /etc/kibana/elk-kibana.my.lan.key
sudo cp /etc/pki/ca-trust/source/anchors/root-ca.crt /etc/kibana/root-ca.crt
sudo chmod 660  /etc/kibana/elk-kibana.my.lan.crt /etc/kibana/elk-kibana.my.lan.key
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo vim /etc/kibana/kibana.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;server.ssl.enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server.ssl.certificate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/kibana/elk-kibana.my.lan.crt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server.ssl.key:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/kibana/elk-kibana.my.lan.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo systemctl restart kibana
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Получаем доступ к по &lt;a href=&quot;https://elk-kibana.my.lan:5601&quot;&gt;url&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Авторизация в кластере Elasticsearch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если у вас требуется аутентификация на узлах &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;, то указываем логин и пароль для авторизации. Как задавать пароли стандартным пользователям кластера я уже писал ранее.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Назначаем логин и пароль
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo vim /etc/kibana/kibana.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.username:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;kibana_system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.password:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если кластер с использованием &lt;code class=&quot;highlighter-rouge&quot;&gt;ssl&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo vim /etc/kibana/kibana.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.ssl.certificateAuthorities:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/kibana/root-ca.crt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo systemctl restart kibana
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Получаем доступ к по &lt;a href=&quot;https://elk-kibana.my.lan:5601&quot;&gt;url&lt;/a&gt; и авторизуемся под &lt;code class=&quot;highlighter-rouge&quot;&gt;elastic&lt;/code&gt;, который является пользователем кластера.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Балансировка нагрузки между несколькими узлами Elasticsearch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для снижения нагрузки на узлы кластера, которые являются хранилищами данных рекомендуется использовать узел с ролью &lt;code class=&quot;highlighter-rouge&quot;&gt;сoordinating only&lt;/code&gt; вместе с &lt;strong&gt;kibana&lt;/strong&gt;.  Узлы с ролью &lt;code class=&quot;highlighter-rouge&quot;&gt;сoordinating only&lt;/code&gt; - это, по сути, интеллектуальные балансировщики нагрузки, которые являются частью кластера и находятся между &lt;strong&gt;kibana&lt;/strong&gt; и кластером &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Устанавливаем elasticsearch на ноду с &lt;strong&gt;kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install elasticsearch -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем роль только &lt;code class=&quot;highlighter-rouge&quot;&gt;сoordinating only&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;node.master:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node.data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node.ingest:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Назначаем имя кластера и другие базовые параметры
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;cluster.name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-cluster&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;http.port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9122&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;transport.tcp.port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9322&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;discovery.zen.ping.unicast.hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node3.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node2.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node1.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-kibana.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Естественно список хостов в  &lt;code class=&quot;highlighter-rouge&quot;&gt;discovery.zen.ping.unicast.hosts&lt;/code&gt; нужно привести к одному виду на всех узлах &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;. Чтобы понять о чём речь можно прочитать мои предыдущие статьи.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем все ноды &lt;code class=&quot;highlighter-rouge&quot;&gt;elastcisearch&lt;/code&gt; в кластере
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем статус кластера &lt;code class=&quot;highlighter-rouge&quot;&gt;elastcisearch&lt;/code&gt; (должно стать на одну ноду больше)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo curl http://elk-node3.my.lan:9122/_cluster/health 
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cluster_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-cluster&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;green&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;timed_out&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_nodes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_data_nodes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;active_primary_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;active_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;relocating_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;initializing_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;unassigned_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delayed_unassigned_shards&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_pending_tasks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;number_of_in_flight_fetch&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;task_max_waiting_in_queue_millis&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;active_shards_percent_as_number&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;100.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Теперь меняем &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch.hosts&lt;/code&gt; для &lt;strong&gt;kibana&lt;/strong&gt; (elk-kibana.my.lan потому, что нода с ролью &lt;code class=&quot;highlighter-rouge&quot;&gt;сoordinating only&lt;/code&gt; на том же хосте что и &lt;strong&gt;kibana&lt;/strong&gt;)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/kibana/kibana.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch.hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://elk-kibana.my.lan:9122:9122&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;strong&gt;kibana&lt;/strong&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart kibana
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Tue, 16 Feb 2021 23:03:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-install-kibana</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-install-kibana</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        <category>kibana</category>
        
        
      </item>
    
      <item>
        <title>ELK - Extended key usage does not permit use for TLS client authentication</title>
        <description>&lt;p&gt;После включения TLS и настройки сертификатов в логах кластера видим ошибку &lt;strong&gt;Extended key usage does not permit use for TLS client authentication&lt;/strong&gt;. Данная ошибка может возникать в случае если добавлены сертификаты, не принадлежащие ноде кластера. Но если всё правильно, то возможная причина это то, что при создании сертификаты не были добавлены правильные назначения сертификата (должны быть &lt;code class=&quot;highlighter-rouge&quot;&gt;client authentification&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;server authentification&lt;/code&gt;)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перевыпускаем сертификаты применяя шаблон с назначением для &lt;code class=&quot;highlighter-rouge&quot;&gt;client authentification&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;server authentification&lt;/code&gt; (Проверка подлинности клиента и Проверка подлинности сервера).&lt;/p&gt;
</description>
        <pubDate>Mon, 15 Feb 2021 22:44:39 +0600</pubDate>
        <link>http://www.tipoit.kz/extended_key_usage_error</link>
        <guid isPermaLink="true">http://www.tipoit.kz/extended_key_usage_error</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - Elasticsearch - Добавление лицензии</title>
        <description>&lt;p&gt;Да, представьте себе есть люди, которые покупают лицензии для &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Доступ к самой лицензии получаем тут после регистрации по &lt;a href=&quot;https://support.elastic.co/customers/s/my-subscriptions&quot;&gt;ссылке&lt;/a&gt;, которую выслал дистрибьютор. В итоге должны получить &lt;code class=&quot;highlighter-rouge&quot;&gt;json&lt;/code&gt; файл.&lt;/li&gt;
  &lt;li&gt;Переносим этот файл на сервер&lt;/li&gt;
  &lt;li&gt;Выполняем команду установки лицензии для кластера my-cluster
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -XPUT -u &amp;lt;user&amp;gt;  &lt;span class=&quot;s1&quot;&gt;'http://elk-node1.my.lan:9122/_license'&lt;/span&gt;  -H &lt;span class=&quot;s2&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;  -d @license.json
&lt;span class=&quot;c&quot;&gt;#Windows&lt;/span&gt;
Invoke-WebRequest  -uri http://elk-node1.my.lan:9122/_license -Credential elastic -Method Put -ContentType &lt;span class=&quot;s2&quot;&gt;&quot;application/json&quot;&lt;/span&gt; -InFile .&lt;span class=&quot;se&quot;&gt;\l&lt;/span&gt;icense.json
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Настройка TLS в кластере&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если получаем ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;Cannot install a [PLATINUM] license unless TLS is configured or security is disabled&lt;/code&gt;, то нужно включить &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Проще говоря включить &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS&lt;/code&gt; это значит добавить &lt;code class=&quot;highlighter-rouge&quot;&gt;ssl&lt;/code&gt; сертификаты для всех нод в кластере (включить &lt;code class=&quot;highlighter-rouge&quot;&gt;https&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Получаем сами сертификаты ( у меня в формате &lt;code class=&quot;highlighter-rouge&quot;&gt;pfx&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Экспортируем публичный сертификат
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; openssl pkcs12 -in /tmp/elk-node1.my.lan.pfx -clcerts -nokeys -out /tmp/elk-node1.my.lan.crt
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Экспортируем приватный ключ
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;openssl pkcs12 -in /tmp/elk-node1.my.lan.pfx -nocerts -nodes -out /tmp/elk-node1.my.lan.key
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Копируем сертификаты в директорию конфигураций &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;, иначе будет ошибка доступа к файлам.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp /tmp/elk-node1.my.lan.crt /etc/elasticsearch/elk-node1.my.lan.crt
sudo cp /tmp/elk-node1.my.lan.key /etc/elasticsearch/elk-node1.my.lan.key
sudo cp /etc/pki/ca-trust/source/anchors/root-ca.crt /etc/elasticsearch/root-ca.crt
sudo chmod 660  /etc/elasticsearch/elk-node1.my.lan.crt /etc/elasticsearch/elk-node1.my.lan.key
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Копируем корневой сертификат в директорию конфигураций &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp /etc/pki/ca-trust/source/anchors/root-ca.crt /etc/elasticsearch/root-ca.crt
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем &lt;code class=&quot;highlighter-rouge&quot;&gt;TLS&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo vim /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.enabled:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.verification_mode:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;certificate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.key:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/elasticsearch/elk-node&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.lan.key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.certificate:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/etc/elasticsearch/root-ca.crt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;xpack.security.transport.ssl.certificate_authorities:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/etc/elasticsearch/root-ca.crt&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart elasticsearch
sudo systemctl status elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Выполняем команду установки ключа (должны получить статус &lt;code class=&quot;highlighter-rouge&quot;&gt;200&lt;/code&gt;)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Invoke-WebRequest  -uri http://elk-node1.my.lan:9122/_license -Credential elastic -Method Put -ContentType &lt;span class=&quot;s2&quot;&gt;&quot;application/json&quot;&lt;/span&gt; -InFile .&lt;span class=&quot;se&quot;&gt;\l&lt;/span&gt;icense.json
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sun, 14 Feb 2021 20:21:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-add-license</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-add-license</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - установка elasticsearch и logstash</title>
        <description>&lt;ol&gt;
  &lt;li&gt;Импорт ключа GPG Elasticsearch
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавление репозитория
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/yum.repos.d/elasticsearch.repo
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elasticsearch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name=Elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;packages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;baseurl=https://artifacts.elastic.co/packages/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.x/yum&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgcheck=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enabled=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;autorefresh=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;type=rpm-md&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем elasticsearch
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install --enablerepo&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;elasticsearch elasticsearch -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Активируем сервис elasticsearch
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем java. Совместимость версий можно проверить &lt;a href=&quot;https://www.elastic.co/support/matrix#matrix_jvm&quot;&gt;тут&lt;/a&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install java-1.8.0-openjdk -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем logstash
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install --enablerepo&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;elasticsearch logstash -y
sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;logstash
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем input для logstash
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/logstash/conf.d/02-beats-input.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;beats&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;5066&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Elasticsearch - Данные на отдельном диске&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я привык класть данные приложений на отдельный диск. Если вам оно не надо, то просто пропускаем полностью эту главу.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Разбиваем диск:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo fdisk /dev/sdj
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`Command&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;help):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`Partition&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1-128&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`First&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sector&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;34-209715166&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`Last&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;sector,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+sectors&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;+size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;K,M,G,T,P&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2048-209715166&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;209715166&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`Command&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;help):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём файловую систему
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkfs.ext4 /dev/sdj1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Делаем mount корневой директории к диску
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir /elk
sudo blkid
sudo vim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;UUID=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fe&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;84&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fac-c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;810-42&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-b&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-296&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;fab&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;192&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;75&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/elk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mount -a
df -h
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Прописываем пути для elasticsearch
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;path.data:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/elk/data&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;path.logs:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;/elk/logs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/sysconfig/elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;ES_TMPDIR=/elk/tmp&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/default/logstash
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;LS_JAVA_OPTS=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-Djava.io.tmpdir=/elk/logstash/tmp&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём директории
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir -p /elk/data /elk/tmp /elk/logs /elk/logstash/tmp
sudo chown elasticsearch /elk/data /elk/tmp /elk/logs
sudo chown logstash:logstash /elk/logstash/tmp
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Стартуем elasticsearch и logstash
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo systemctl start elasticsearch
 sudo systemctl start logstash
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем логи
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo journalctl -u elasticsearch
sudo journalctl -u logstash
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Останавливаем elasticsearch и logstash
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl stop elasticsearch
sudo systemctl stop logstash
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Elk кластер&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рекомендуется собирать multi-node кластер для лучшей работы elk и отказоустойчивости. Поэтому все действия выше повторяются на других нодах, которые будут находиться в кластере.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Конфигурация кластера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Имя кластера: my-cluster&lt;/p&gt;

&lt;p&gt;Хосты кластера: elk-node1.my.lan, elk-node2..my.lan, elk-node3.my.lan&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка кластера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Правим  elasticsearch.yml на каждой ноде
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/elasticsearch/elasticsearch.yml
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;http.port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9122&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;transport.tcp.port:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9322&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;меняем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;имя&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;каждой&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ноды&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;network.host:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elk-node&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.lan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;меняем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;имя&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;каждой&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ноды,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;должно&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;совпадать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;именем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;хоста&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;node.name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;elk-node&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;cluster.name:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my-cluster&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;discovery.zen.ping.unicast.hosts:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node3.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node2.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;elk-node1.my.lan&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;discovery.zen.minimum_master_nodes:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;bootstrap.memory_lock:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем файрволл
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;80/tcp --permanent
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;9322/tcp --permanent
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;9122/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Перезапускаем elasticsearch на каждой ноде
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart elasticsearch
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Проверяем логи кластера
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tail -f /elk/logs/my-cluster.log
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включение memory locking&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вдруг получаем ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;memory locking requested for elasticsearch process but memory is not locked&lt;/code&gt;, то включаем &lt;strong&gt;memory locking&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir /etc/systemd/system/elasticsearch.service.d
sudo vim /etc/systemd/system/elasticsearch.service.d/override.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;LimitMEMLOCK=infinity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl restart elasticsearch
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 12 Feb 2021 22:10:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-installation</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-installation</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>FreeIpa - Настройка клиента</title>
        <description>&lt;p&gt;Рассматривать процесс ввода клиентского компьютера/сервера в домен я буду на &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS 7&lt;/code&gt; в домене &lt;code class=&quot;highlighter-rouge&quot;&gt;my.local&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;установка-freeipa-client&quot;&gt;Установка freeipa-client&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Задаем клиенту имя в стиле &lt;code class=&quot;highlighter-rouge&quot;&gt;computer_name.my.local&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;-srv.my.local
sudo hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;-srv.my.local --static
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Установка &lt;code class=&quot;highlighter-rouge&quot;&gt;freeipa-client&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install freeipa-client -y
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;На &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS Stream&lt;/code&gt; возможно понадобиться выполнить:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp /etc/nsswitch.conf /etc/authselect/user-nsswitch.conf
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;ввод-клиента-в-домен&quot;&gt;Ввод клиента в домен&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Запускаем &lt;strong&gt;ipa-client-install&lt;/strong&gt;. Если у вас правильно настроены &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; сервера и вы можете резолвить &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; записи в домене &lt;code class=&quot;highlighter-rouge&quot;&gt;FreeIpa&lt;/code&gt; (my.local), то у вас всё заполнится автоматически (домен, freeipa сервер). Для того, чтобы для пользователей создавался домашний каталог, используем &lt;strong&gt;–mkhomedir&lt;/strong&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-client-install --mkhomedir
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если DNS не настроен как положено, то придётся всё заполнять руками:
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`Provide&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;your&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPA&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(ex:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;example.com):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my.local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`Provide&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;your&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;IPA&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(ex:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ipa.example.com):`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;freeipa&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.dc&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.my.local&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`Continue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;configure&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;these&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;values?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;no&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Вводим имя пользователя, у которого есть роль &lt;code class=&quot;highlighter-rouge&quot;&gt;Enrollment Administrator&lt;/code&gt; и пароль от него.
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`User&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;authorized&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;enroll&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;computers:`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;После удачного завершения операции клиент должен появится в &lt;a href=&quot;https://freeipa1.dc1.my.local/ipa/ui/#/e/host/search&quot;&gt;списке хостов&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://youtu.be/_XxtstG4Qq4&quot;&gt;click me&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 10 Feb 2021 21:31:39 +0600</pubDate>
        <link>http://www.tipoit.kz/freeipa-client-configurel</link>
        <guid isPermaLink="true">http://www.tipoit.kz/freeipa-client-configurel</guid>
        
        <category>linux</category>
        
        <category>freeipa</category>
        
        
      </item>
    
      <item>
        <title>FreeIpa - Установка</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;что-такое-этот-freeipa&quot;&gt;Что такое этот FreeIpa&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Q0KwUO7KC3M?si=pB7hUuJ7CTGo9f79&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;strong&gt;FreeIpa&lt;/strong&gt; (Free Identity Policy Audit)  - открытый проект компании &lt;code class=&quot;highlighter-rouge&quot;&gt;RedHat&lt;/code&gt; включающий в себя кучу других открытых проектов. Некоторые из них: &lt;code class=&quot;highlighter-rouge&quot;&gt;389 Directory Server&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;MIT Kerberos&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;NTP&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS (bind)&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Dogtag certificate system&lt;/code&gt;. Присутствует возможность множественной репликации для отказоустойчивости. Поддержка множества интерфейсов управления (&lt;code class=&quot;highlighter-rouge&quot;&gt;CLI&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Web UI&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;XMLRPC&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;JSONRPC API&lt;/code&gt;) и &lt;code class=&quot;highlighter-rouge&quot;&gt;Python SDK&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Для любителей &lt;code class=&quot;highlighter-rouge&quot;&gt;Windows&lt;/code&gt; можно просто сказать, что это &lt;code class=&quot;highlighter-rouge&quot;&gt;AD&lt;/code&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;Linux&lt;/code&gt;. Проект в целом доступен уже очень давно, но я к сожалению, узнал о нём совсем недавно. Основные функции, которые вы можете использовать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Централизованное управление учётными записями (одна учётка на все сервера)&lt;/li&gt;
  &lt;li&gt;Управление правилами для sudo (что можно и что нельзя)&lt;/li&gt;
  &lt;li&gt;Правила доступа к серверам по ssh&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; сервер (как доп фича)&lt;/li&gt;
  &lt;li&gt;Центр сертификации&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Web UI&lt;/code&gt; (в наше время полезная опция)&lt;/li&gt;
  &lt;li&gt;Интеграция с другими сервисами нуждающихся в авторизации (веб страницы, &lt;code class=&quot;highlighter-rouge&quot;&gt;vpn&lt;/code&gt; сервера)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Ntp&lt;/code&gt; сервер&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Т.е. если вы только начинаете строить свою сеть, то вы можете многое завязать на &lt;strong&gt;FreeIpa&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Для теста можно использовать официальную &lt;a href=&quot;https://www.freeipa.org/page/Demo&quot;&gt;демо страницу&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;подготовка&quot;&gt;Подготовка&lt;/h2&gt;

&lt;p&gt;В producton сети естественно рекомендуется иметь кластер из серверов &lt;strong&gt;FreeIpa&lt;/strong&gt; для отказоустойчивости. В официальной документации рекомендуется иметь по 2-3 реплики (&lt;code class=&quot;highlighter-rouge&quot;&gt;slave&lt;/code&gt;) в каждом из дата центров. Схему взаимодействий можно посмотреть &lt;a href=&quot;https://www.freeipa.org/page/File:Topology-12.png&quot;&gt;тут&lt;/a&gt;. Настройка дополнительных соглашений о репликации гарантирует, что информация реплицируется не только между исходной репликой и главным сервером, но и между другими репликами.&lt;/p&gt;

&lt;p&gt;В дальнейшем буду использовать такую схему:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;1&lt;/th&gt;
      &lt;th&gt;2&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Имя домена&lt;/td&gt;
      &lt;td&gt;my.local&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Master host&lt;/td&gt;
      &lt;td&gt;freeipa1.dc1.my.local (192.168.0.1)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Slave host 1&lt;/td&gt;
      &lt;td&gt;freeipa2.dc1.my.local (192.168.0.2)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Slave host 2&lt;/td&gt;
      &lt;td&gt;freeipa1.dc2.my.local (192.168.0.3)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Slave host 3&lt;/td&gt;
      &lt;td&gt;freeipa2.dc2.my.local (192.168.0.4)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;p&gt;Также замечу что я рассматривал вариант с установкой в уже production сети и у меня уже были сервера &lt;code class=&quot;highlighter-rouge&quot;&gt;NTP&lt;/code&gt;, и все сервера синхронизировались с этими &lt;code class=&quot;highlighter-rouge&quot;&gt;NTP&lt;/code&gt;. Поэтому я опускаю настройку функцию &lt;code class=&quot;highlighter-rouge&quot;&gt;NTP&lt;/code&gt; сервера в &lt;strong&gt;FreeIpa&lt;/strong&gt;. В целом там ничего сложного. Так что если у вас нет &lt;code class=&quot;highlighter-rouge&quot;&gt;NTP&lt;/code&gt; сервера в сети, то включайте функцию &lt;code class=&quot;highlighter-rouge&quot;&gt;Ntp&lt;/code&gt; сервера в &lt;strong&gt;FreeIpa&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;установка-master-сервера&quot;&gt;Установка master сервера&lt;/h2&gt;

&lt;p&gt;Установка будет происходить на &lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS Stream&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;CentOS 8&lt;/code&gt; уже лучше не использовать).&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Как обычно сперва обновляем систему и добавляем репозиторий &lt;code class=&quot;highlighter-rouge&quot;&gt;Epel&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install epel-release
sudo dnf update
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;Identity Management &lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf module &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;idm:DL1
sudo dnf distro-sync
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Задаём имя сервера с доменном который будем поднимать
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa1.dc1.my.local
hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa1.dc1.my.local --static
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;192.168.0.1 freeipa1.dc1.my.local&quot;&lt;/span&gt;  &amp;gt;&amp;gt;  /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем &lt;strong&gt;freeIPA&lt;/strong&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;bind&lt;/code&gt; (Будут выдаваться доменные имена серверам, вступившим в домен)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install ipa-server ipa-server-dns
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настройка сервера &lt;strong&gt;freeIpa&lt;/strong&gt;.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ipa-server-install --setup-dns
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Отвечаем на запросы.
    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Do&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;want&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;configure&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;DNS&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;forwarders&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]:&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Server&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;host&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;freeipa1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dc1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Please&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;confirm&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;domain&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Please&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;realm&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;MY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LOCAL&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Directory&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Do&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;want&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;configure&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;these&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;servers&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;DNS&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;forwarders&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;yes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]:&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Enter&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;an&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IP&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;DNS&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;forwarder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;press&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Enter&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;skip&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Задаём&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;DNS&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;сервера&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;для&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;пересылки&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;если&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;надо&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;конечно&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Do&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;want&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reverse&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;zone&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;YES&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Соглашаемся&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;на&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;создание&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;обратных&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;зон&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;После финального YES о подтверждении настроек &lt;strong&gt;FreeIpa&lt;/strong&gt; установится и выдаст уведомление о том, что нужно открыть порты&lt;/li&gt;
  &lt;li&gt;Открываем порты на &lt;code class=&quot;highlighter-rouge&quot;&gt;firewall&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-service&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;http,https,dns,ntp,freeipa-ldap,freeipa-ldaps&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;  --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;После всех этих процедур станет доступна вtб-консоль администрирования сервера &lt;strong&gt;FreeIpa&lt;/strong&gt;, находящаяся по адресу:  https://freeipa1.dc1.my.local&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;установка-первого-slave-сервера-сервер-репликации&quot;&gt;Установка первого slave сервера (сервер репликации)&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Как обычно сперва обновляем систему и добавляем репозиторий &lt;code class=&quot;highlighter-rouge&quot;&gt;Epel&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install epel-release
sudo dnf update
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;Identity Management &lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf module &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;idm:DL1
sudo dnf distro-sync
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Задаём имя сервера с доменном который будем поднимать
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa2.dc1.my.local
hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa2.dc1.my.local --static
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;192.168.0.2 freeipa2.dc1.my.local&quot;&lt;/span&gt;  &amp;gt;&amp;gt;  /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем &lt;strong&gt;freeIPA&lt;/strong&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;bind&lt;/code&gt; (Будут выдаваться доменные имена серверам, вступившим в домен)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install ipa-server ipa-server-dns
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Открываем порты на &lt;code class=&quot;highlighter-rouge&quot;&gt;firewall&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-service&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;http,https,dns,ntp,freeipa-ldap,freeipa-ldaps&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;  --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Прописываем &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; сервером наш freeipa1.dc1.my.local&lt;/li&gt;
  &lt;li&gt;Выполняем ввод этого сервера в домен
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-client-install
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Отвечаем на вопросы
    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;domain&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ipa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;freeipa1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dc1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;User&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;authorized&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;enroll&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;computers&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;MY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LOCAL&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если всё прошло то мы в веб консоли увидим добавленный сервер https://freeipa1.dc1.my.local/ipa/ui/#/e/host/search&lt;/li&gt;
  &lt;li&gt;Выполняем установку репликации &lt;code class=&quot;highlighter-rouge&quot;&gt;LDAP-каталога&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-replica-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем репликацию &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; зон
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-dns-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем репликацию центра сертификации
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-ca-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём группу с местоположением (DC1) для наших серверов https://freeipa1.dc1.my.local/ipa/ui/#/e/location/search&lt;/li&gt;
  &lt;li&gt;Собственно добавляем эти сервера в группу DC1&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;На этом slave создан  и можно посоздавать учетные записи, параллельно проверяя что они создаются на обоих серверах.&lt;/p&gt;

&lt;h2 id=&quot;установка-второго-slave-сервера-сервер-репликации&quot;&gt;Установка второго slave сервера (сервер репликации)&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Как обычно сперва обновляем систему и добавляем репозиторий &lt;code class=&quot;highlighter-rouge&quot;&gt;Epel&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install epel-release
sudo dnf update
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;Identity Management &lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf module &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;idm:DL1
sudo dnf distro-sync
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Задаём имя сервера с доменном который будем поднимать
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa1.dc2.my.local
hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa1.dc2.my.local --static
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;192.168.0.3 freeipa1.dc2.my.local&quot;&lt;/span&gt;  &amp;gt;&amp;gt;  /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем &lt;strong&gt;freeIPA&lt;/strong&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;bind&lt;/code&gt; (Будут выдаваться доменные имена серверам, вступившим в домен)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install ipa-server ipa-server-dns
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Открываем порты на &lt;code class=&quot;highlighter-rouge&quot;&gt;firewall&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-service&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;http,https,dns,ntp,freeipa-ldap,freeipa-ldaps&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;  --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Прописываем &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; сервером наш freeipa1.dc1.my.local&lt;/li&gt;
  &lt;li&gt;Выполняем ввод этого сервера в домен
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-client-install
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Отвечаем на вопросы
    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;domain&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ipa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;freeipa1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dc1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;User&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;authorized&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;enroll&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;computers&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;MY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LOCAL&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если всё прошло то мы в веб консоли увидим добавленный сервер https://freeipa1.dc1.my.local/ipa/ui/#/e/host/search&lt;/li&gt;
  &lt;li&gt;Выполняем установку репликации &lt;code class=&quot;highlighter-rouge&quot;&gt;LDAP-каталога&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-replica-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем репликацию &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; зон
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-dns-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем репликацию центра сертификации
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-ca-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;установка-третьего-slave-сервера-сервер-репликации&quot;&gt;Установка третьего slave сервера (сервер репликации)&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Как обычно сперва обновляем систему и добавляем репозиторий &lt;code class=&quot;highlighter-rouge&quot;&gt;Epel&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install epel-release
sudo dnf update
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;Identity Management &lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf module &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;idm:DL1
sudo dnf distro-sync
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Задаём имя сервера с доменном который будем поднимать
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa2.dc2.my.local
hostnamectl &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;-hostname freeipa2.dc2.my.local --static
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;192.168.0.4 freeipa2.dc2.my.local&quot;&lt;/span&gt;  &amp;gt;&amp;gt;  /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем &lt;strong&gt;freeIPA&lt;/strong&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;bind&lt;/code&gt; (Будут выдаваться доменные имена серверам, вступившим в домен)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo dnf install ipa-server ipa-server-dns
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Открываем порты на &lt;code class=&quot;highlighter-rouge&quot;&gt;firewall&lt;/code&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo firewall-cmd --add-service&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;http,https,dns,ntp,freeipa-ldap,freeipa-ldaps&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;  --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Прописываем &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; сервером наш freeipa2.dc1.my.local&lt;/li&gt;
  &lt;li&gt;Выполняем ввод этого сервера в домен
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-client-install
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Отвечаем на вопросы
    &lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;domain&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Provide&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IPA&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ipa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;freeipa1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dc1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;my&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;local&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;User&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;authorized&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;enroll&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;computers&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;MY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LOCAL&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:`&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Если всё прошло то мы в веб консоли увидим добавленный сервер https://freeipa1.dc1.my.local/ipa/ui/#/e/host/search&lt;/li&gt;
  &lt;li&gt;Выполняем установку репликации &lt;code class=&quot;highlighter-rouge&quot;&gt;LDAP-каталога&lt;/code&gt; (тут мастером для него будет уже slave в dc1 - freeipa2.dc1.my.local)
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-replica-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем репликацию &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; зон
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-dns-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Устанавливаем репликацию центра сертификации
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ipa-ca-install	
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Создаём группу с местоположением (DC2) для наших серверов https://freeipa1.dc1.my.local/ipa/ui/#/e/location/search&lt;/li&gt;
  &lt;li&gt;Собственно добавляем эти 2 сервера в группу DC2&lt;/li&gt;
  &lt;li&gt;Также не лишним будет для сервера freeipa2.dc2.my.local вторичный &lt;code class=&quot;highlighter-rouge&quot;&gt;DNS&lt;/code&gt; установить freeipa1.dc2.my.local, а для freeipa1.dc2.my.local - freeipa2.dc2.my.local и аналогично для серверов DC1&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://youtu.be/Q0KwUO7KC3M&quot;&gt;click me&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 09 Feb 2021 04:54:39 +0600</pubDate>
        <link>http://www.tipoit.kz/freeipa-install</link>
        <guid isPermaLink="true">http://www.tipoit.kz/freeipa-install</guid>
        
        <category>linux</category>
        
        <category>freeipa</category>
        
        
      </item>
    
      <item>
        <title>BlueScreenView - расшифровка BSOD</title>
        <description>&lt;p&gt;Позволяет анализировать dump файлы после BSOD. Автоматом находит последний minidump. Выводит сразу информацию о всех драйверах, а также проблемный драйвер или сервис, который привёл к BSOD.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/programs/2021-02-08_10-11.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Также может отобразить экран BSOD, который предположительно был при BSOD. Для этого переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Options -&amp;gt; Lower Pane mode -&amp;gt; Blue Screen in XP Style&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Также может сканировать по сети.&lt;/p&gt;

&lt;p&gt;offsite: &lt;a href=&quot;https://www.nirsoft.net/utils/blue_screen_view.html&quot;&gt;url&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Mon, 08 Feb 2021 16:30:39 +0600</pubDate>
        <link>http://www.tipoit.kz/bluescreenview</link>
        <guid isPermaLink="true">http://www.tipoit.kz/bluescreenview</guid>
        
        <category>programs</category>
        
        <category>security</category>
        
        <category>windows</category>
        
        
      </item>
    
      <item>
        <title>ELK - Значения документа и инвертированный индекс</title>
        <description>&lt;p&gt;Когда документ сохранён, он индексируется и становится доступным для поиска практически в реальном времени - в течение 1 секунды. &lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt; использует структуру данных, называемую &lt;strong&gt;инвертированным индексом (inverted index)&lt;/strong&gt;, которая поддерживает очень быстрый полнотекстовый поиск. &lt;strong&gt;Инвертированный индекс&lt;/strong&gt; перечисляет каждое уникальное слово, которое встречается в любом документе, и идентифицирует все документы, в которых встречается каждое слово. Немного про &lt;strong&gt;инвертированный индекс&lt;/strong&gt; на &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81&quot;&gt;wikipedia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Немного сложно и непонятно? Рассмотрим на примере, где у нас есть следующие документы:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Сегодня очень холодно&lt;/li&gt;
  &lt;li&gt;Вчера было тепло&lt;/li&gt;
  &lt;li&gt;Прошлый месяц было тепло&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; разобьёт все предложения на слова и сопоставит их с id документа, а если точнее, то &lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt;. В итоге в инвертированном индексе это будет выглядеть так:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Слово&lt;/th&gt;
      &lt;th&gt;Id документа&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;сегодня&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;очень&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;вчера&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;было&lt;/td&gt;
      &lt;td&gt;2,3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;тепло&lt;/td&gt;
      &lt;td&gt;2,3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;прошлый&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;месяц&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;p&gt;Благодаря такому индексу становиться очень просто найти все документы со словом &lt;code class=&quot;highlighter-rouge&quot;&gt;тепло&lt;/code&gt;. Слово &lt;code class=&quot;highlighter-rouge&quot;&gt;тепло&lt;/code&gt; содержится в документах 2 и 3. И &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; уже об этом знает и соответственно вернет документы быстрее, чем это могло быть.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Инвертированный индекс&lt;/strong&gt; отлично подходит для поиска, но имеет некоторые ограничения. Например, если вы попытаетесь отсортировать результаты запроса по определённому полю, вы можете получить ошибку, где вам будет предложено использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование keyword&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Инвертированный индекс&lt;/strong&gt; действительно эффективен для поиска, но не для сортировки и агрегирования. Для выполнения этих действий рекомендуется использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;, поскольку поле &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt; имеет значения документа.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Значения документа (Doc values)&lt;/strong&gt; - это еще один тип структуры данных, который используется в &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; для хранения данных. Значения документа имеют столбчатую структуру, которая лучше подходит для агрегирования, сортировки.&lt;/p&gt;

&lt;p&gt;Для примера добавим несколько значений в индекс и попробуем отсортировать.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Вешалка&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Кухонный комбайн&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Стул&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;united&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;desc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В итоге получим ошибку &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [field1] in order to load field data by uninverting the inverted index. Note that this can use significant memory.&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Используем &lt;strong&gt;keyword&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;united&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;desc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Оптимизация&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Исходя из этой &lt;a href=&quot;https://www.tipoit.kz/elk-text-analyzer&quot;&gt;статьи&lt;/a&gt; мы уже знаем, что по умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; отображает каждую строку как текст и ключевое слово. Соответственно у нас хранятся &lt;strong&gt;инвертированный индекс&lt;/strong&gt;, полный токенов (слов) для &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; и &lt;strong&gt;значения документа (Doc values)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Получается большой объём данных с учетом того, что возможно вам это и не нужно. Для решения этой проблемы можно использовать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Не индексировать поле, т.е не создавать &lt;strong&gt;инвертированный индекс&lt;/strong&gt;. Но в таком случае вы не сможете делать тестовые запросы с этим полем. Например, если поле нужно только для сортировки или агрегаций. Для этого выставляем &lt;strong&gt;index&lt;/strong&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filed1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
   &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Не создавать &lt;strong&gt;значения документа (Doc values)&lt;/strong&gt;. Поле будет доступно для поиска, но недоступно для агрегации и сортировок. Для этого выставляем &lt;strong&gt;doc_values&lt;/strong&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;
    &lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filed1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;doc_values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Не создавать ни &lt;strong&gt;инвертированный индекс&lt;/strong&gt;, ни &lt;strong&gt;значения документа&lt;/strong&gt;. Т.е поле не будет доступно ни для поиска, ни для сортировки, ни для агрегации. Но оно будет выводится в &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt; при поиске документов.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt; создает несколько структур данных из ваших документов: &lt;strong&gt;инвертированные индексы&lt;/strong&gt; и &lt;strong&gt;значения документов&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Для ускорения поиска используется &lt;strong&gt;инвертированный индекс&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Значения документов&lt;/strong&gt; позволяют агрегировать и сортировать значения&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Инвертированный индекс&lt;/strong&gt; доступен только для полнотекстовых операций (поиск)&lt;/li&gt;
  &lt;li&gt;Присутствует возможность отключить &lt;strong&gt;инвертированный индекс&lt;/strong&gt; или &lt;strong&gt;значения документа&lt;/strong&gt; для полей&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 08 Feb 2021 05:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-inverted-index-and-doc-values</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-inverted-index-and-doc-values</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Анализатор текста</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Анализатор текста&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда вы индексируете строки, они анализируются по умолчанию. Каждая строка, отображаемая как текст, проходит через анализатор, который может внести различные изменения. В elasticsearch такой анализатор по умолчанию называется &lt;strong&gt;стандартным анализатором&lt;/strong&gt;. &lt;strong&gt;Стандартный анализатор&lt;/strong&gt; может применяется к английскому (и большинству латинских языков), разбивает строку на &lt;strong&gt;токены (слова)&lt;/strong&gt;, а также переводит все &lt;strong&gt;токены&lt;/strong&gt; в нижний регистр. &lt;strong&gt;Анализатор по умолчанию&lt;/strong&gt; также удаляет знаки препинания. Поэтому если вы ищите строки с заглавными буквами или без количество найденных данных буде одинаковым.&lt;/p&gt;

&lt;p&gt;Например, вы ищите текст &lt;code class=&quot;highlighter-rouge&quot;&gt;Мой текст, тектс2&lt;/code&gt;. Анализатор разобьёт эту строку на 3 токена (слова): &lt;code class=&quot;highlighter-rouge&quot;&gt;мой&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;текст&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;текст2&lt;/code&gt;. Затем произведёт 3 отдельных запроса для каждого из &lt;strong&gt;токенов&lt;/strong&gt;, результаты которых будут объединены.&lt;/p&gt;

&lt;p&gt;Естественно если есть &lt;strong&gt;стандартный анализатор&lt;/strong&gt;, то есть конечно и другие. Есть много других анализаторов, в том числе &lt;code class=&quot;highlighter-rouge&quot;&gt;пробелов (whitespace)&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;остановок (stop)&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;шаблонов (patterns)&lt;/code&gt; и многие другие.
Список всех &lt;strong&gt;анализаторов&lt;/strong&gt; можно получить &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Синтаксис изменения стандартного анализатора:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#для&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;поля&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;whitespace&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myindex/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;whitespace&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Для проверки в консоли:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_analyze&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;standard&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Мой текст, тектс2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Анализатор ключевых слов (Keyword Analyzer)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Кто-то, наверное, подумал, а как строить графики если слова разбиваются? И в правду в некоторых ситуациях &lt;strong&gt;стандартный анализатор&lt;/strong&gt; будет только мешать. Представим ситуацию что нам нужно построить график из полей, содержащих двойное значение как одно, например, название стран.&lt;/p&gt;

&lt;p&gt;Допустим у нас есть тект  &lt;code class=&quot;highlighter-rouge&quot;&gt;Южная Африка&lt;/code&gt; и &lt;strong&gt;стандартный анализатор&lt;/strong&gt; разобьёт его на  &lt;code class=&quot;highlighter-rouge&quot;&gt;южная&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;африка&lt;/code&gt;. Для такой ситуации отлично подойдёт &lt;strong&gt;анализатор ключевых слов (Keyword Analyzer)&lt;/strong&gt;. Он в отличии о стандартного не разобьёт на токены (слова), но и не переведёт всё в нижний регистр.&lt;/p&gt;

&lt;p&gt;Для проверки в консоли:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_analyze&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;standard&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Южная Африка&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_analyze&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Южная Африка&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Разница между text и keyword&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для реализации поиска без разбития на &lt;strong&gt;токены (слова)&lt;/strong&gt; можно использовать и &lt;strong&gt;стандартный анализатор&lt;/strong&gt;, но с одним отличием к полю добавляется &lt;code class=&quot;highlighter-rouge&quot;&gt;.keyword&lt;/code&gt;, например &lt;code class=&quot;highlighter-rouge&quot;&gt;field1.keyword&lt;/code&gt;.  Суть в том, что &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; динамически отображает все строки в 2 типах данных: &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;. По умолчанию, когда вы ищите поле, стоит тип &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt;. &lt;code class=&quot;highlighter-rouge&quot;&gt;Keyword&lt;/code&gt; чувствителен к регистру, и поиск должен включать все слова (у &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; можно искать по одному слову).&lt;/p&gt;

&lt;p&gt;Для примера создадим новый документ и проверим его структуру.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Южная Африка&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В результате получим:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_index&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-----&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Установка типа&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Индексирование строк как &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt; поведение &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; по умолчанию, но бывают ситуации, когда вы точно знаете, что не нужны оба типа данных. Двойное индексирование каждой строки замедляет индексацию и занимает больше места на диске. Чтобы оптимизировать это, стоит задуматься о том, какой тип подходит лучше.&lt;/p&gt;

&lt;p&gt;Пример установки типов для множества полей;&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;myindex&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filed1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;whitespace&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filed2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;analyzer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;whitespace&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filed3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ignore_above&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;256&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;В итоге&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; имеет два типа строковых данных: &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Вы можете выставить тип сами&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Text&lt;/code&gt; предназначен для полнотекстового поиска&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Keyword&lt;/code&gt; предназначен для точного поиска, агрегирования и сортировки&lt;/li&gt;
  &lt;li&gt;По умолчанию каждая строка динамически отображается дважды: как &lt;code class=&quot;highlighter-rouge&quot;&gt;text&lt;/code&gt; и как &lt;code class=&quot;highlighter-rouge&quot;&gt;keyword&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 07 Feb 2021 20:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-text-analyzer</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-text-analyzer</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger fabrc - Немного о chaincode</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Что такое chaincode&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Chaincode&lt;/strong&gt; - это программа, написанная на &lt;code class=&quot;highlighter-rouge&quot;&gt;Go&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;node.js&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;Java&lt;/code&gt;, которая реализует какие-либо действия в сети &lt;strong&gt;chaincode&lt;/strong&gt;.  &lt;strong&gt;Chaincode&lt;/strong&gt; работает в защищенном контейнере &lt;code class=&quot;highlighter-rouge&quot;&gt;Docker&lt;/code&gt;, изолированном от других нод в сети. &lt;strong&gt;Chaincode&lt;/strong&gt; инициализирует и управляет данными в сети &lt;code class=&quot;highlighter-rouge&quot;&gt;blockchain&lt;/code&gt; посредством транзакций, отправляемых приложениями.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chaincode&lt;/strong&gt; обычно обрабатывает бизнес-логику, согласованную членами сети (организациями), поэтому его можно называть &lt;code class=&quot;highlighter-rouge&quot;&gt;smart  contract&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Типы chaincode&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В новых версиях hyperledger существует 2 типа:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Lifecycle  chaincode&lt;/strong&gt; - системный &lt;strong&gt;chaincode&lt;/strong&gt;, отвечающий за операции над &lt;strong&gt;chaincode&lt;/strong&gt;. Используется для развертывания &lt;strong&gt;chaincode&lt;/strong&gt; приложения в сети &lt;code class=&quot;highlighter-rouge&quot;&gt;blockchain&lt;/code&gt;, чтобы пользователи могли вызывать функции, прописанные в &lt;strong&gt;chaincode&lt;/strong&gt;. Нам не нужно устанавливать &lt;strong&gt;lifecycle  chaincode&lt;/strong&gt;, поскольку он является неотъемлемой частью программного обеспечения &lt;code class=&quot;highlighter-rouge&quot;&gt;Hyperledger  Fabric&lt;/code&gt;. Вызов осуществляется командой &lt;code class=&quot;highlighter-rouge&quot;&gt;peer  lifecycle  chaincode&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Application  chaincode&lt;/strong&gt; - это и есть простой &lt;strong&gt;chaincode&lt;/strong&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;smart  contract&lt;/code&gt;), который всегда используется в проектах &lt;code class=&quot;highlighter-rouge&quot;&gt;Hyperledger  Fabric&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Мы используем функции &lt;strong&gt;lifecycle  chaincode&lt;/strong&gt; чтобы сделать &lt;strong&gt;application  chaincode&lt;/strong&gt; пригодным для использования. Типичный процесс развертывания &lt;strong&gt;chaincode&lt;/strong&gt; приложения включает следующие шаги:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Упаковку &lt;strong&gt;chaincode&lt;/strong&gt; приложения в пакет &lt;strong&gt;chaincode&lt;/strong&gt; (архив tar)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Установку &lt;strong&gt;chaincode&lt;/strong&gt; на выбранных узлах (&lt;code class=&quot;highlighter-rouge&quot;&gt;peer&lt;/code&gt;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Подтверждение &lt;strong&gt;chaincode&lt;/strong&gt; со стороны каждой организации&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Фиксация (commit) &lt;strong&gt;chaincode&lt;/strong&gt; в канале, когда выполнено требование подтверждения жизненного цикла (&lt;code class=&quot;highlighter-rouge&quot;&gt;endorsement  requirement&lt;/code&gt;). Не выполнившие commit организации не могут использовать &lt;strong&gt;chaincode&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Политика одобрения (Endorsement  policy)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Каждый &lt;strong&gt;chaincode&lt;/strong&gt; имеет &lt;strong&gt;политику одобрения&lt;/strong&gt;, которая определяет набор узлов (&lt;code class=&quot;highlighter-rouge&quot;&gt;peers&lt;/code&gt;) в канале, которые должны выполнить &lt;strong&gt;chaincode&lt;/strong&gt; и подтвердить результаты выполнения, чтобы транзакция считалась действительной и была одобрена. Эти политики одобрения определяют организации, которые должны одобрить транзакцию.&lt;/p&gt;

&lt;p&gt;Политика одобрения на уровне &lt;strong&gt;chaincode&lt;/strong&gt; согласовываются с участниками канала, когда они утверждают &lt;strong&gt;chaincode&lt;/strong&gt; для своей организации. Достаточное количество участников канала должно утвердить &lt;strong&gt;chaincode&lt;/strong&gt;, чтобы соответствовать политике &lt;code class=&quot;highlighter-rouge&quot;&gt;Channel / Application / LifecycleEndorsement&lt;/code&gt;, которая по умолчанию установлена ​​для большинства участников канала (пункт 3 предыдущего параграфа).&lt;/p&gt;

&lt;p&gt;Политика одобрения по умолчанию задаётся в configtx.yaml и по умолчанию MAJORITY  Endorsement, что значит одобрить должно большинство участников канала (например 2 организации из 3). Помимо стандартного значения может принимать OR или AND.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_15-46.png&quot; alt=&quot;enter  image  description  here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Из скриншота следует что есть 2 политики одобрения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;LifecycleEndorsement - как нетрудно догадаться политика одобрения для &lt;strong&gt;lifecycle  chaincode&lt;/strong&gt; (пункт 4).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Endorsement - это политика одобрения для транзакций &lt;strong&gt;application  chaincode&lt;/strong&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ниже рассмотрим политику одобрения в примерах.&lt;/p&gt;

&lt;p&gt;Также политику одобрения можно установить через cli, используя –signature-policy .&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer lifecycle chaincode approveformyorg --channelID mychannel --signature-policy &lt;span class=&quot;s2&quot;&gt;&quot;OR('Org1.member', 'Org2.member')&quot;&lt;/span&gt; --name mycc --version 1.0 --package-id mycc_1:3a8c5 --sequence 1 --tls --cafile tlsca.example.com-cert.pem

peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID mychannel --signature-policy &lt;span class=&quot;s2&quot;&gt;&quot;OR('Org1.member', 'Org2.member')&quot;&lt;/span&gt; --name mycc --version 1.0 --sequence 1 --init-required --tls --cafile tlsca.example.com-cert.pem

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Теперь рассмотрим каждый пункт развертывания &lt;strong&gt;chaincode&lt;/strong&gt; (&lt;strong&gt;lifecycle  chaincode&lt;/strong&gt;) по пунктам на примерах.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;Упаковку chaincode&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для примера я буду использовать официальный пример &lt;strong&gt;chaincode&lt;/strong&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;Hyperledger  Fabric&lt;/code&gt; &lt;a href=&quot;https://github.com/hyperledger/fabric-samples/tree/master/chaincode/sacc&quot;&gt;sacc&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Переходим в директорию с &lt;strong&gt;chaincode&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nb&quot;&gt;cd  &lt;/span&gt;sacc

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Собственно упаковываем &lt;strong&gt;chaincode&lt;/strong&gt; ( lang= node/golang )&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CFG_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/PATH_TO_CORE_FILE

peer lifecycle chaincode package sacc.tar.gz --path sacc/ --lang golang --label sacc_1.0

ll sacc.tar.gz

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;Установка chaincode&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Устанавливаем &lt;strong&gt;chaincode&lt;/strong&gt; на пирах двух организаций Org1 и Org2.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CFG_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/PATH_TO_CORE_FILE

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_TLS_ENABLED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true

export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_LOCALMSPID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;org1MSP&quot;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_TLS_ROOTCERT_FILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/org1-ca-cert.pem

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_MSPCONFIGPATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/admin-org1/msp

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_ADDRESS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;peer1.org1.test.blockchain.lan:7051

peer lifecycle chaincode install sacc.tar.gz

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;FABRIC_CFG_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/PATH_TO_CORE_FILE

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_TLS_ENABLED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true

export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_LOCALMSPID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;org2MSP&quot;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_TLS_ROOTCERT_FILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/org2-ca-cert.pem

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_MSPCONFIGPATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/admin-org2/msp

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CORE_PEER_ADDRESS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;peer1.org2.test.blockchain.lan:7051

peer lifecycle chaincode install sacc.tar.gz

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;Подтверждение chaincode&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Для подтверждения нам понадобится &lt;code class=&quot;highlighter-rouge&quot;&gt;ID&lt;/code&gt; установленного &lt;strong&gt;chaincode&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer lifecycle chaincode queryinstalled

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-24.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Подтверждаем для Org1&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CC_PACKAGE_ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;sacc_1.0:764f4ed27ad886f7c54f2cbd8f5bbc7e87769945d247021744da8fe39aca8c89

peer lifecycle chaincode approveformyorg -o orderer0.org1.test.blockchain.lan:7050 --channelID mychannel --name sacc --version 1.0 --package-id &lt;span class=&quot;nv&quot;&gt;$CC_PACKAGE_ID&lt;/span&gt; --sequence 1 --tls --cafile /tls-orderer-ca.pem

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-22_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверяем кто подтвердил установку &lt;strong&gt;chaincode&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name sacc --version 1.0 --sequence 1 --tls --cafile /tls-orderer-ca.pem --output json

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-23.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Подтверждаем для Org2&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CC_PACKAGE_ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;sacc_1.0:764f4ed27ad886f7c54f2cbd8f5bbc7e87769945d247021744da8fe39aca8c89

peer lifecycle chaincode approveformyorg -o orderer0.org1.test.blockchain.lan:7050 --channelID mychannel --name sacc --version 1.0 --package-id &lt;span class=&quot;nv&quot;&gt;$CC_PACKAGE_ID&lt;/span&gt; --sequence 1 --tls --cafile /tls-orderer-ca.pem

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-23_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проверяем кто подтвердил установку &lt;strong&gt;chaincode&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name sacc --version 1.0 --sequence 1 --tls --cafile /tls-orderer-ca.pem --output json

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-22.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Фиксация ( commit ) chaincode&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Так как я рассматриваю вариант с политикой одобрения по умолчанию сделать &lt;code class=&quot;highlighter-rouge&quot;&gt;comit&lt;/code&gt; должно большинство организаций в сети, т.е. две из двух.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Для демонстрации работы политики одобрения сделаем commit который приведёт к неодобренной транзакции. Произойдёт это потому что сделала &lt;code class=&quot;highlighter-rouge&quot;&gt;commit&lt;/code&gt; только Org1, в следствии чего не была достигнута политика одобрения.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer lifecycle chaincode commit -o orderer0.org1.test.blockchain.lan:7050 --channelID mychannel --name sacc --version 1.0 --sequence 1 --tls --cafile /tls-orderer-ca.pem --peerAddresses peer1.org1.test.blockchain.lan:7051 --tlsRootCertFiles /org1-ca-cert.pem

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-21_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-17.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Теперь сделаем правильный &lt;code class=&quot;highlighter-rouge&quot;&gt;commit&lt;/code&gt; от двух организаций&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer lifecycle chaincode commit -o orderer0.org1.test.blockchain.lan:7050 --channelID mychannel --name sacc --version 1.0 --sequence 1 --tls --cafile /tls-orderer-ca.pem --peerAddresses peer1.org1.test.blockchain.lan:7051 --tlsRootCertFiles /org1-ca-cert.pem --peerAddresses peer1.org2.test.blockchain.lan:7051 --tlsRootCertFiles /org2-ca-cert.pem

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-21.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-19.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Commit для application  chaincode&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно, после того как  &lt;strong&gt;chaincode&lt;/strong&gt;установлен и одобрен максимальным количеством организаций можно выполнять методы, прописанные в &lt;strong&gt;chaincode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Так как я использую политику одобрения по умолчанию (&lt;code class=&quot;highlighter-rouge&quot;&gt;endorsement&lt;/code&gt;) то транзакцию опять-таки должно одобрить большинство.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем метод, который одобрит только одна организация&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer chaincode invoke -o orderer0.org1.test.blockchain.lan:7050 --tls --cafile /tls-orderer-ca.pem -C mychannel -n sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;set&quot;,&quot;name&quot;,&quot;kc&quot;]}'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-44.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-45.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выполняем метод, который одобрят обе организация&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer  chaincode  invoke -o  orderer0.org1.test.blockchain.lan:7050 --tls --cafile /tls-orderer-ca.pem -C  mychannel -n  sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;set&quot;,&quot;name&quot;,&quot;kc&quot;]}'&lt;/span&gt; --peerAddresses  peer1.org1.test.blockchain.lan:7051 --tlsRootCertFiles /org1-ca-cert.pem --peerAddresses  peer1.org2.test.blockchain.lan:7051 --tlsRootCertFiles /org2-ca-cert.pem

peer chaincode query -C mychannel -n sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;get&quot;,&quot;name&quot;]}'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-44_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-45_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Еще раз выполняем метод, который одобрит только одна организация, заменяя значение на новое&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer chaincode invoke -o orderer0.org1.test.blockchain.lan:7050 --tls --cafile /tls-orderer-ca.pem -C mychannel -n sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;set&quot;,&quot;name&quot;,&quot;myname&quot;]}'&lt;/span&gt;

peer chaincode query -C mychannel -n sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;get&quot;,&quot;name&quot;]}'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге видим, что значение сталось старым, хотя статус был 200.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-49.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-50.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Выполняем метод, который одобрят обе организация&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
peer chaincode invoke -o orderer0.org1.test.blockchain.lan:7050 --tls --cafile /tls-orderer-ca.pem -C mychannel -n sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;set&quot;,&quot;name&quot;,&quot;myname&quot;]}'&lt;/span&gt;  --peerAddresses peer1.org1.test.blockchain.lan:7051 --tlsRootCertFiles /org1-ca-cert.pem --peerAddresses peer1.org2.test.blockchain.lan:7051 --tlsRootCertFiles /org2-ca-cert.pem

peer chaincode query -C mychannel -n sacc -c &lt;span class=&quot;s1&quot;&gt;'{&quot;Args&quot;:[&quot;get&quot;,&quot;name&quot;]}'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Вот теперь значение изменилось, потому что одобрило большинство.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-51.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-31_12-51_1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

</description>
        <pubDate>Sun, 31 Jan 2021 23:06:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-fabric-about-chaincode</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-fabric-about-chaincode</guid>
        
        <category>hyperledger</category>
        
        <category>blockchain</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric - npm ERR! request to https://registry.npmjs.org/fabric-contract-api failed</title>
        <description>&lt;p&gt;При установке &lt;code class=&quot;highlighter-rouge&quot;&gt;chaincode&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;hyperledger fabric&lt;/code&gt; может появится ошибка : &lt;strong&gt;npm ERR! request to https://registry.npmjs.org/fabric-contract-api failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Решением может быть добавление dns серверов для сервиса &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Суть в том что при &lt;code class=&quot;highlighter-rouge&quot;&gt;peer lifecycle chaincode install basic.tar.gz&lt;/code&gt; создаётся &lt;code class=&quot;highlighter-rouge&quot;&gt;container&lt;/code&gt;, а внутри запускается команды &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt;. А сам &lt;code class=&quot;highlighter-rouge&quot;&gt;container&lt;/code&gt; ичего не знает о &lt;code class=&quot;highlighter-rouge&quot;&gt;dns&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Добавляем файл &lt;strong&gt;/etc/docker/daemon.json&lt;/strong&gt; c dns серверами.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/docker/daemon.json

	&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;dns&quot;&lt;/span&gt;: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;8.8.8.8&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;8.8.4.4&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

systemctl restart docker	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 30 Jan 2021 05:15:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-npm-request-error</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-npm-request-error</guid>
        
        <category>hyperledger</category>
        
        <category>blockchain</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Unhandled exception was thrown during licensing process</title>
        <description>&lt;p&gt;При бэкапе в Veeam выходила данная ошибка.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2021-01-28_10-52.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Прогуглив данную ошибку ничего особо полезного не нашёл, но как оказалось проблема довольно простая.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Debug&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я решил сперва проверить подключение к серверу Vcenter ( Как оказалось тут и кроется вся проблема ).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2021-01-28_10-54.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;В итоге я получил ошибку о том, что неправильный логин или пароль. Хотя очень странно что некоторые виртуальные сервера в этом Vcenter бэкапились отлично.&lt;/p&gt;

&lt;p&gt;В общем в моём случае истёк срок действия пароля для пользователя Veeam в Vcenter.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В итоге я просто сменил пароль и всё заработало.&lt;/p&gt;

</description>
        <pubDate>Thu, 28 Jan 2021 16:59:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-unhandled-exception-was-thrown-during-licensing-process</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-unhandled-exception-was-thrown-during-licensing-process</guid>
        
        <category>veeam</category>
        
        <category>backups</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric - Сплетни ( Gossip )</title>
        <description>&lt;p&gt;&lt;strong&gt;Сплетни ( Gossip )&lt;/strong&gt; используются для распространения информации о существующих пирах. Они занимают важную роль в Hyperledger Fabric. Hyperledger Fabric использует &lt;strong&gt;сплетни ( gossip )&lt;/strong&gt; для общения между пирами.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сплетни при стартовой загрузке&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда &lt;code class=&quot;highlighter-rouge&quot;&gt;пир&lt;/code&gt; стартует, он использует &lt;code class=&quot;highlighter-rouge&quot;&gt;peer.gossip.bootstrap&lt;/code&gt; в своем &lt;code class=&quot;highlighter-rouge&quot;&gt;core.yaml&lt;/code&gt; для &lt;strong&gt;сплетен ( gossip )&lt;/strong&gt;. Подробнее о настройке &lt;a href=&quot;https://www.tipoit.kz/hyperledger-fabric-anchor-peer&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;При старте пира в логах мы видим что запустился экземпляр &lt;strong&gt;сплетен ( gossip )&lt;/strong&gt; для пира. Также видно что протокол &lt;strong&gt;сплетен ( gossip )&lt;/strong&gt; предупреждает нас об отсутствии &lt;code class=&quot;highlighter-rouge&quot;&gt;CORE_PEER_GOSSIP_EXTERNALENDPOINT&lt;/code&gt;.
&lt;img src=&quot;/static/img/hyperledger/2021-01-22_11-08.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При отключении пира, прописанного в &lt;code class=&quot;highlighter-rouge&quot;&gt;CORE_PEER_GOSSIP_BOOTSTRAP&lt;/code&gt; протокол &lt;strong&gt;сплетен( gossip )&lt;/strong&gt; также выдаст предупреждение ( простыми словами жалуется что  не с кем посплетничать ).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-22_11-10.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Благодаря тому, что &lt;strong&gt;сплетни( gossip )&lt;/strong&gt; настроены и работают пиры могут посылать друг другу сообщения, например проверка доступности пира. Т.е связь пиров на уровне &lt;strong&gt;сплетен( gossip )&lt;/strong&gt; играет важную роль.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-22_11-19.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сплетни при выборе лидера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Подробнее про лидера &lt;a href=&quot;https://www.tipoit.kz/hyperledger-fabric-leader-election&quot;&gt;тут&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;Также благодаря &lt;strong&gt;сплетням( gossip )&lt;/strong&gt; выбирается лидер канала.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-22_11-26.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Если допустим удалить &lt;code class=&quot;highlighter-rouge&quot;&gt;CORE_PEER_GOSSIP_BOOTSTRAP&lt;/code&gt; то пиры перестанут между собой общаться и каждый будет считать себя лидером.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-22_11-52.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-22_11-53.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Jan 2021 17:35:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-fabric-gossip</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-fabric-gossip</guid>
        
        <category>hyperledger</category>
        
        <category>blockchain</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric - Anchor peer</title>
        <description>&lt;p&gt;&lt;strong&gt;Anchor peer&lt;/strong&gt; это &lt;code class=&quot;highlighter-rouge&quot;&gt;пир&lt;/code&gt;, который используется для обнаружения всех узлов, принадлежащих организациям в канале. &lt;strong&gt;Anchor peer&lt;/strong&gt; должен быть доступен для всех &lt;code class=&quot;highlighter-rouge&quot;&gt;пиров&lt;/code&gt; в канале.&lt;/p&gt;

&lt;p&gt;У каждой организации в канале должен быть &lt;strong&gt;anchor peer&lt;/strong&gt; (или несколько для предотвращения единой точки отказа), что позволяет &lt;code class=&quot;highlighter-rouge&quot;&gt;пирам&lt;/code&gt; обнаруживать все существующие &lt;code class=&quot;highlighter-rouge&quot;&gt;пиры&lt;/code&gt; в канале. Если в вашей организации нет &lt;strong&gt;anchor peer&lt;/strong&gt;, ваши &lt;code class=&quot;highlighter-rouge&quot;&gt;пиры&lt;/code&gt; смогут видеть только &lt;code class=&quot;highlighter-rouge&quot;&gt;пиры&lt;/code&gt; своей организации. Если у организации нет &lt;strong&gt;anchor peer&lt;/strong&gt; в канале, а к каналу присоединяется новый &lt;code class=&quot;highlighter-rouge&quot;&gt;пир&lt;/code&gt;, организация может не получить информацию об этом новом &lt;code class=&quot;highlighter-rouge&quot;&gt;пире&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Например, предположим, что у нас есть три организации - orgA, orgB, orgC - в канале и один &lt;strong&gt;anchor peer&lt;/strong&gt; в организации - peer0.orgC - определенный для организации C. Когда peer1.orgA (из организации A) связывается с peer0.orgC, он расскажет peer0.orgC о peer0.orgA. И когда позже peer1.orgB свяжется с peer0.orgC, peer0.orgC сообщит peer1.orgB о peer0.orgA. С этого момента организации orgA и orgB начнут напрямую обмениваться информацией без какой-либо помощи со стороны peer0.orgC.&lt;/p&gt;

&lt;p&gt;Да в сети может быть один &lt;strong&gt;anchor peer&lt;/strong&gt;, но рекомендуется использовать отдельного &lt;strong&gt;anchor peer&lt;/strong&gt; для каждой организации.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Внешние и внутренние конечные точки&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того чтобы сплетни работали эффективно, пиры должны иметь возможность получать информацию о конечных точках пирах в своей собственной организации, а также от пиров в других организациях.&lt;/p&gt;

&lt;p&gt;Когда &lt;code class=&quot;highlighter-rouge&quot;&gt;пир&lt;/code&gt; стартует, он использует &lt;code class=&quot;highlighter-rouge&quot;&gt;peer.gossip.bootstrap&lt;/code&gt; в своем &lt;code class=&quot;highlighter-rouge&quot;&gt;core.yaml&lt;/code&gt; для рекламы себя и обмена информацией о членстве, создавая представление обо всех доступных &lt;code class=&quot;highlighter-rouge&quot;&gt;пирах&lt;/code&gt; в своей собственной организации. Т.е использует &lt;code class=&quot;highlighter-rouge&quot;&gt;peer.gossip.bootstrap&lt;/code&gt; для сплетен внутри своей организации.&lt;/p&gt;

&lt;p&gt;Также можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;CORE_PEER_GOSSIP_ENDPOINT&lt;/code&gt; в docker-compose файле.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;peer1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_BOOTSTRAP=peer2:7051&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;peer2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_BOOTSTRAP=peer1:7051&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для того чтобы &lt;code class=&quot;highlighter-rouge&quot;&gt;пиры&lt;/code&gt; в одной организации знали о существовании &lt;code class=&quot;highlighter-rouge&quot;&gt;пиров&lt;/code&gt; в другой организации нужно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;CORE_PEER_GOSSIP_EXTERNALENDPOINT&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;peer1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1:7051&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;peer2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2:7051&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 21 Jan 2021 21:16:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-fabric-anchor-peer</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-fabric-anchor-peer</guid>
        
        <category>hyperledger</category>
        
        <category>blockchain</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>Hyperledger Fabric - Выбор лидера</title>
        <description>&lt;p&gt;В сети &lt;code class=&quot;highlighter-rouge&quot;&gt;hyperledger fabric&lt;/code&gt; для каждой организации определяется &lt;strong&gt;лидер ( Leader )&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Выборы лидера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Механизм выбора &lt;strong&gt;лидера&lt;/strong&gt; используется для выбора одного &lt;code class=&quot;highlighter-rouge&quot;&gt;peer&lt;/code&gt; для каждой организации, который будет связываться с &lt;code class=&quot;highlighter-rouge&quot;&gt;orderer&lt;/code&gt; для получения блоков и инициировать распределение вновь прибывших блоков между другими &lt;code class=&quot;highlighter-rouge&quot;&gt;пирами&lt;/code&gt; своей организации. Введение &lt;strong&gt;лидера&lt;/strong&gt; оптимизирует общий процесс, так как запросы от &lt;code class=&quot;highlighter-rouge&quot;&gt;orderer&lt;/code&gt; отправляется только лидеру каждой организации, а &lt;strong&gt;лидер&lt;/strong&gt; - другим партнерам в этой организации. Определение &lt;strong&gt;лидера&lt;/strong&gt; начинает работать только когда &lt;code class=&quot;highlighter-rouge&quot;&gt;пиры&lt;/code&gt; вступили в какой-либо &lt;code class=&quot;highlighter-rouge&quot;&gt;channel&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Существует 2 типа выбора лидера:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Статический&lt;/strong&gt; ( &lt;strong&gt;Static&lt;/strong&gt; ) - администратор вручную настраивает &lt;code class=&quot;highlighter-rouge&quot;&gt;peer&lt;/code&gt; в организации как лидера&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Динамический&lt;/strong&gt; ( &lt;strong&gt;Dynamic&lt;/strong&gt; ) - &lt;code class=&quot;highlighter-rouge&quot;&gt;узлы ( peers )&lt;/code&gt;  выполняют процедуру выбора &lt;strong&gt;лидера&lt;/strong&gt;, чтобы выбрать одного &lt;code class=&quot;highlighter-rouge&quot;&gt;peer&lt;/code&gt; в организации, который станет &lt;strong&gt;лидером&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В примере first network настроено на автоматический выбор.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Статические выборы лидера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Статические выборы &lt;strong&gt;лидера&lt;/strong&gt; позволяют вручную определить одного или нескольких &lt;code class=&quot;highlighter-rouge&quot;&gt;пиров ( peers )&lt;/code&gt; в организации в качестве &lt;strong&gt;лидеров&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Пример конфигурации для статического выбора:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;peer1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_USELEADERELECTION=false&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_ORGLEADER=true&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;peer2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_USELEADERELECTION=false&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_ORGLEADER=false&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;peer3&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_USELEADERELECTION=false&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_ORGLEADER=false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Если выставить значения CORE_PEER_GOSSIP_USELEADERELECTION и CORE_PEER_GOSSIP_ORGLEADER в true это приведёт к ошибке.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Нужно также позаботиться о доступности лидера.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Динамические выборы лидера&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Выбор лидера осуществляется автоматически.&lt;/p&gt;

&lt;p&gt;Динамически избранный &lt;strong&gt;лидер&lt;/strong&gt; отправляет сообщения с проверкой доступности ( ping )  остальным пирам в качестве доказательства жизнеспособности. Если один или несколько пиров не получат пакетов в течение установленного периода времени, они выберут нового &lt;strong&gt;лидера&lt;/strong&gt;. Т.е может получится что в сети с большим количеством пиров будет несколько &lt;strong&gt;лидеров&lt;/strong&gt;. Но после исправления проблем с доступностью всех &lt;code class=&quot;highlighter-rouge&quot;&gt;пиров&lt;/code&gt; в &lt;strong&gt;лидерах&lt;/strong&gt; останется только один.&lt;/p&gt;

&lt;p&gt;По умолчанию время жизни &lt;strong&gt;лидера&lt;/strong&gt; равно 10 секундам. Для того, чтобы исправить правим файл &lt;code class=&quot;highlighter-rouge&quot;&gt;core.yaml&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;peer&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;gossip&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;election&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;leaderAliveThreshold&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;20s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Пример конфигурации для динамического выбора:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;peer1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_USELEADERELECTION=true&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_ORGLEADER=false&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;peer2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_USELEADERELECTION=true&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_ORGLEADER=false&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;peer3&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_USELEADERELECTION=true&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;CORE_PEER_GOSSIP_ORGLEADER=false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Screenshots&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;peer2 стал лидером&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-20_21-07.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;peer1 не смог стать лидером&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-20_21-17.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;после отключения peer2 лидером стал peer1&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/hyperledger/2021-01-20_21-35.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 21 Jan 2021 03:27:39 +0600</pubDate>
        <link>http://www.tipoit.kz/hyperledger-fabric-leader-election</link>
        <guid isPermaLink="true">http://www.tipoit.kz/hyperledger-fabric-leader-election</guid>
        
        <category>hyperledger</category>
        
        <category>blockchain</category>
        
        
      </item>
    
      <item>
        <title>ELK - Сопоставление (Mapping)</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Что такое Mapping&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Elasticsearch индексирует любой документ, не зная о его полях. Однако за кулисами Elasticsearch назначает типы данных вашим полям в сопоставлении (Mapping). &lt;strong&gt;Mapping&lt;/strong&gt; - это определение схемы, которое содержит имена и типы данных полей индекса. Он также содержит информацию о том, как поля должны индексироваться и храниться в &lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt;. &lt;strong&gt;Mapping&lt;/strong&gt; сопоставляют ваши сложные документы &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt; с простыми плоскими документами, которые ожидает &lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если вы хотите проверить сопоставление существующего индекса, вы можете использовать _mapping.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В результате вы получите список всех полей и их типов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Типы полей&lt;/p&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Тип&lt;/th&gt;
      &lt;th&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Этот тип используется для хранения полнотекстовых строк. В частности, он используется для индексации текста, который вы хотите проанализировать&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Keyword&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Этот тип используется для хранения строк точных значений. Обычно это используется для фильтрации, сортировки и агрегирования строк. Значения в полях ключевых слов будут попадать только в том случае, если они точно совпадают.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;date&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Вы можете использовать тип date или date_nanos для сопоставления полей, содержащих строки, отформатированные как даты или числовые даты&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Integer&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Вы можете хранить целые числа одного из следующих типов: &lt;strong&gt;byte&lt;/strong&gt;, &lt;strong&gt;short&lt;/strong&gt;, &lt;strong&gt;integer&lt;/strong&gt;, &lt;strong&gt;long&lt;/strong&gt;. Вы должны выбрать наименьший тип, которого будет достаточно для вашего случая использования. Это повысит производительность операций с индексами и запросами.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Floating Point Number&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Числа с плавающей запятой могут быть отображены в один из следующих типов: float, double, half_float или scaled_float.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Boolean&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Логические поля принимают значения JSON &lt;strong&gt;true&lt;/strong&gt; и &lt;strong&gt;false&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;IP&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Этот тип можно использовать для хранения адресов IPv4 или IPv6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Hierarchical Types&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Есть несколько иерархических типов, таких как nested, join, object&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Specialized&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Вы можете использовать множество других типов данных, которые предназначены для конкретных случаев использования. Например, вы можете использовать &lt;strong&gt;geo_point&lt;/strong&gt; и &lt;strong&gt;geo_shape&lt;/strong&gt;, когда хотите проиндексировать географические данные&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Динамический Mapping (Dynamic Mapping)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вы можете индексировать документы, не определяя &lt;strong&gt;сопоставления (mapping)&lt;/strong&gt; заранее. Это связано с тем, что при индексировании документа по умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; динамически создает или обновляет &lt;strong&gt;сопоставление (mapping)&lt;/strong&gt; по мере необходимости.&lt;/p&gt;

&lt;p&gt;Когда вы индексируете первый документ, &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; проверяет тип &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt; полей, чтобы определить их и сопоставить.&lt;/p&gt;

&lt;p&gt;По типу &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt; поля &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; угадывает связанный тип данных. Например, если вы индексируете целое число, &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; создаст отображение типа &lt;code class=&quot;highlighter-rouge&quot;&gt;long&lt;/code&gt; для этого поля.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Mapping&lt;/strong&gt; не всегда будет оптимальным. Например некоторые поля с целыми числами могут быть сопоставлены как &lt;code class=&quot;highlighter-rouge&quot;&gt;long&lt;/code&gt; 64-bits вместо возможных &lt;code class=&quot;highlighter-rouge&quot;&gt;short&lt;/code&gt;. Так что в случае если вы заранее знаете количество символов лучше сопоставлять тип самостоятельно.&lt;/p&gt;

&lt;p&gt;Пример **сопоставления (mapping) **&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;mappings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;properties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_fiels&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	     &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;short&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	 &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_mapping&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Изменение сопоставленного поля&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как сопоставление было определено для данного поля, изменить его тип данных в невозможно. Причина, по которой вы не можете изменить сопоставление, заключается в том, что при переключении типа данных поля вы просите &lt;code class=&quot;highlighter-rouge&quot;&gt;Lucene&lt;/code&gt; изменить структуру данных, которую она использует для хранения всех значений в поле. Это означает, что все значения из документов, которые уже были проиндексированы, станут недоступными для поиска. Если вам нужно изменить тип данных поля, вам необходимо переиндексировать все ваши документы в новый индекс.&lt;/p&gt;

&lt;p&gt;Тем не менее, вы всегда можете добавить новые поля без переиндексации.&lt;/p&gt;
</description>
        <pubDate>Fri, 08 Jan 2021 05:08:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-mapping</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-mapping</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - Cardinality aggregation</title>
        <description>&lt;p&gt;&lt;strong&gt;Cardinality aggregation&lt;/strong&gt; вычисляет приблизительное количество различных значений.&lt;/p&gt;

&lt;p&gt;Например можно подсчитать количество статусов http ответа ( http response code ).&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type_count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cardinality&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В выводе получим 6. Т.е поле FIELD1 содержит 6 различных значений.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggregations&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type_count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;precision_threshold&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Precision_threshold&lt;/strong&gt; позволяют торговать памятью на точность и определяют уникальный счетчик, ниже которого ожидается, что счет будет близок к точному. Выше этого значения счет может стать немного более нечетким. Максимальное поддерживаемое значение - 40000, пороговые значения выше этого числа будут иметь тот же эффект, что и порог 40000. Значение по умолчанию - 3000.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Missing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию &lt;strong&gt;cardinality&lt;/strong&gt; отбрасывает документы с пустым значением. Чтобы учитывать такое значения можно выставить &lt;strong&gt;missing&lt;/strong&gt; со значением, которое и будет заменять пустое значение.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;tag_cardinality&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cardinality&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;missing&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;N/A&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 08 Jan 2021 03:47:39 +0600</pubDate>
        <link>http://www.tipoit.kz/cardinality-aggregation</link>
        <guid isPermaLink="true">http://www.tipoit.kz/cardinality-aggregation</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - Percentile ranks aggregation</title>
        <description>&lt;p&gt;&lt;strong&gt;Percentile ranks aggregation&lt;/strong&gt; представляет из себя соотношение данных к процентам. Т.е можно использовать для того чтобы узнать какой процент значения встречается в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Работает только с численными значениями.&lt;/p&gt;

&lt;p&gt;Например вам нужно узнать равен ли время ответа вашего сайта (&lt;code class=&quot;highlighter-rouge&quot;&gt;response time&lt;/code&gt;) 500 миллисекундам.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;response_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percentile_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;И допустим на выходе вы получаете&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

 &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggregations&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;response_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;500.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;90.01&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;600.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;100.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Из вывода видно что около 90% ответов вашего сервера соответствуют 500 мс, но есть около 10% ответ которых превышает 500 мс.&lt;/p&gt;

&lt;p&gt;Т.е исходя из примера можно сказать что &lt;strong&gt;percentile_ranks&lt;/strong&gt; ищет что &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;gt;= первому числу или &amp;gt;= второму числу&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Keyed&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию &lt;strong&gt;keyed&lt;/strong&gt; установлен со значением &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt;. &lt;strong&gt;Keyed&lt;/strong&gt; связывает уникальный строковый ключ с каждым сегментом и возвращает диапазоны в виде хеша, а не массива.&lt;/p&gt;

&lt;p&gt;Для того чтобы вернуть в виде массива выставляем &lt;strong&gt;keyed&lt;/strong&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;response_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percentile_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;keyed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;И получаем массив&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggregations&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;load_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;500.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;90.01&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;600.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;100.0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Script&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также можно использовать &lt;strong&gt;percentile_ranks&lt;/strong&gt; со &lt;strong&gt;script&lt;/strong&gt;. Например вы можете использовать скрипт для перевода мс в секунды, используя деление на 1000.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;response_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percentile_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lang&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;painless&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;doc['FIELD1'].value / params.timeUnit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;params&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;timeUnit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                                    
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Для сохраненного скрипта&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;response_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percentile_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_script&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;params&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Missing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию &lt;strong&gt;percentile_ranks&lt;/strong&gt; отбрасывает документы с пустым значением. Чтобы учитывать такое значения можно выставить &lt;strong&gt;missing&lt;/strong&gt; с цифровым значением, которое и будет заменять пустое значение.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;response_time_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percentile_ranks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;values&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;600&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;missing&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 08 Jan 2021 02:26:39 +0600</pubDate>
        <link>http://www.tipoit.kz/percentile-ranks-aggregation</link>
        <guid isPermaLink="true">http://www.tipoit.kz/percentile-ranks-aggregation</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK -комбинированные агрегации</title>
        <description>&lt;p&gt;В предыдущих статьях я писал про агрегацию bucket и метрик. Теперь рассмотрим комбинированные агрегации. Если описывать простыми словами то это суммирование множественных событий ( документов ).&lt;/p&gt;

&lt;p&gt;Например сумма байтов за день со всех документов, количество документов за месяц от одного хоста.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сортировка по bucket&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для демонстрации рассмотрим пример с подсчётом запросов (&lt;code class=&quot;highlighter-rouge&quot;&gt;FIELD1&lt;/code&gt;) за день и сортировкой по убыванию.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;придумываем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сами&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;MYFIELD2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date_histogram&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#поле&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;датами&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#каким&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;методо&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;разбивать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;по&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;дате&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;calendar_interval&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;day&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#сортировка&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;по&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;daily_number_of_bytes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ниже&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;MYFIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;desc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#тут&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;придумываем&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;сами&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;MYFIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sum&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	        &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;#поле&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;по&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;которому&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;суммировать&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование sub bucket&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для примера рассчитаем количество запросов по методам запроса (&lt;code class=&quot;highlighter-rouge&quot;&gt;FIELD1&lt;/code&gt;) за месяца. Т.е мы создаём верхний &lt;code class=&quot;highlighter-rouge&quot;&gt;bucket&lt;/code&gt; с названием &lt;code class=&quot;highlighter-rouge&quot;&gt;logs_by_month&lt;/code&gt; и подчиненный с названием &lt;code class=&quot;highlighter-rouge&quot;&gt;requests_count&lt;/code&gt;. Это и называется &lt;strong&gt;sub bucket&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET mylogs/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;aggs&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;logs_by_month&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;date_histogram&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;field&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@timestamp&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;calendar_interval&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;month&quot;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; 
      &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;aggs&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;requests_count&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;terms&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;field&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;size&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;10&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В выводе получим что-то подобное
&lt;img src=&quot;/static/img/elk/2021-01-07_16-16.png&quot; alt=&quot;aggs&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;top_hits&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Применяя &lt;strong&gt;top_hits&lt;/strong&gt; вы можете выводить некоторое количество документов при подсчёте чего-либо. Ещё одна возможность  реализации &lt;strong&gt;sub bucket&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;mylogs/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;logstash filters&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;blogs_by_author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;terms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;author.keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;top_hits&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;top_hits&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В выводе получим отсортированные значения по общему количеству и при этом по 2 документа из каждой группы и их &lt;code class=&quot;highlighter-rouge&quot;&gt;score&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 07 Jan 2021 23:23:39 +0600</pubDate>
        <link>http://www.tipoit.kz/combining-aggregations</link>
        <guid isPermaLink="true">http://www.tipoit.kz/combining-aggregations</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Nexus - No available modular metadata for modular package</title>
        <description>&lt;p&gt;Может появлятся если используется group для proxy.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно для репозитория который выдаёт ошибку прописать прямой &lt;strong&gt;proxy url&lt;/strong&gt;, а не &lt;strong&gt;group proxy url&lt;/strong&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 21 Dec 2020 22:15:39 +0600</pubDate>
        <link>http://www.tipoit.kz/nexus-no-available-modular-metadata-for-modular-package</link>
        <guid isPermaLink="true">http://www.tipoit.kz/nexus-no-available-modular-metadata-for-modular-package</guid>
        
        <category>nexus</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>Ansible - Service is in unknown state</title>
        <description>&lt;p&gt;При использовании старой версии &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible&lt;/code&gt; и нового &lt;code class=&quot;highlighter-rouge&quot;&gt;sysytemd&lt;/code&gt; (239-43.el8) во время выполнения задач с сервисами можно получить ошибку &lt;strong&gt;Service is in unknown state&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Ansible&lt;/code&gt; для проверки статуса использует команду &lt;strong&gt;systemctl show&lt;/strong&gt;. И если выполнить это на хосте с новой версией &lt;code class=&quot;highlighter-rouge&quot;&gt;systemd&lt;/code&gt; то получим ошибку.&lt;/p&gt;

&lt;p&gt;Например&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl --no-pager show firewalld
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для решения обновляем &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible&lt;/code&gt;. Если не очень хочется то вот кусок &lt;a href=&quot;https://github.com/ansible/ansible/pull/72337/files/54ac5fddb247b3b5d32d2f5b01de8e21b6372169&quot;&gt;кода&lt;/a&gt; который нужно добавить в файл &lt;strong&gt;/usr/lib/python2.7/site-packages/ansible/modules/system/systemd.py&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /usr/lib/python2.7/site-packages/ansible/modules/system/systemd.py

        &lt;span class=&quot;c&quot;&gt;# Workaround for https://github.com/ansible/ansible/issues/71528&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;elif &lt;/span&gt;err and rc &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; 1 and &lt;span class=&quot;s1&quot;&gt;'Failed to parse bus message'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;err:
            result[&lt;span class=&quot;s1&quot;&gt;'status'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; parse_systemctl_show&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;to_native&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;out&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;.split&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'\n'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;

            &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;rc, out, err&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; module.run_command&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{systemctl} list-units '{unit}*'&quot;&lt;/span&gt;.format&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;systemctl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;systemctl, &lt;span class=&quot;nv&quot;&gt;unit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;unit&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 21 Dec 2020 22:15:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-service-is-in-unknown-state</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-service-is-in-unknown-state</guid>
        
        <category>ansible</category>
        
        <category>devops</category>
        
        <category>ci/cd</category>
        
        
      </item>
    
      <item>
        <title>ELK - Агрегация bucket</title>
        <description>&lt;p&gt;Что если вы хотите применить агрегацию метрик при этом рассчитывая их отдельно для какой-то группы данных? Напримеры вы хотите узнать количество уникальных пользователей за каждый месяц. Такая агрегация в &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; называется агрегация bucket (Bucket Aggregations).&lt;/p&gt;

&lt;p&gt;Для каждой даты будет создаваться &lt;strong&gt;bucket&lt;/strong&gt;. Будьте внимательны при выборе интервала даты. Чем меньше интервал, тем больше &lt;strong&gt;bucket&lt;/strong&gt;. Создание слишком большого количества &lt;strong&gt;bucket&lt;/strong&gt; может повредить кластер. Максимальное количество &lt;strong&gt;bucket&lt;/strong&gt;, которое можно создать, по умолчанию - 10 000.&lt;/p&gt;

&lt;p&gt;Количество создаваемых &lt;strong&gt;bucket&lt;/strong&gt; можно указать с помощью &lt;code class=&quot;highlighter-rouge&quot;&gt;size&lt;/code&gt; ( по умолчанию 10 ).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Date Histogram&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Агрегация &lt;strong&gt;date_histogram&lt;/strong&gt; помещает документы в сегменты на основе заданного временного интервала. Он может дать хороший обзор распределения ваших данных по времени. Ответ агрегирования содержит массив &lt;strong&gt;bucket&lt;/strong&gt;. Каждый &lt;strong&gt;bucket&lt;/strong&gt; в этом массиве представляет собой набор документов из одного диапазона заданного временного интервала. Каждый сегмент также содержит метрику по умолчанию для документов в этом сегменте, которая представляет собой количество документов во временном диапазоне этого сегмента (doc_count).&lt;/p&gt;

&lt;p&gt;Есть два способа определить интервал:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Fixed_interval: этот параметр имеет предустановленные значения интервала, длина интервала которых всегда постоянна.&lt;/li&gt;
  &lt;li&gt;Calendar_interval: интервалы в этом параметре знают, что летнее время изменяет продолжительность определенных дней и что в некоторых месяцах другое количество дней.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date_histogram&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;DATEFIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;calendar_interval&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;day&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Histogram Aggregation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Работает так же как и &lt;code class=&quot;highlighter-rouge&quot;&gt;date_histogram&lt;/code&gt; за исключением того, что его можно применить к любому числовому полю (а не только к дате).&lt;/p&gt;

&lt;p&gt;Например можно использовать если вы хотите получить обзор распределения времени ответа ваших журналов, вы можете использовать следующее агрегирование.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;histogram&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;runtime_ms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;interval&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;100&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Range Aggregation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Смотря на пример выше вы наверняка могли подумать а что если я хочу сам задать интервал от и до. В таком случае подойдёт &lt;strong&gt;ranges&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;range&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;runtime_ms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;ranges&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;to&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;to&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Terms Aggregation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;С помощью &lt;strong&gt;terms&lt;/strong&gt; можно расчитать количество документов сортируя по уникальным значениям. Например можно расчитать количество запросов по странам.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;terms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;COUNTRYFIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сортировка Bucket&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для сортировки &lt;code class=&quot;highlighter-rouge&quot;&gt;bucket&lt;/code&gt; можно восспользоваться &lt;strong&gt;order&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;terms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;COUNTRYFIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;asc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Но стоит помнить что при использовании &lt;code class=&quot;highlighter-rouge&quot;&gt;size&lt;/code&gt; вы не увидите самые большие значения из всех документов. Чтобы отсортировать именно по значению:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;terms&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;COUNTRYFIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;asc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 19 Dec 2020 05:40:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-bucket-aggregations</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-bucket-aggregations</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - Агрегация метрик</title>
        <description>&lt;p&gt;Рассмотрим один из 4 методов агрегации в &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt;. Агрегация метрик возвращает вычисленное значение из набора документов.
Для понятия сути агрегации метрик рассмотрим несколько примеров применения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Например расчитать сумму байт всех доументов в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Расчитать серднее время ответа&lt;/li&gt;
  &lt;li&gt;Расчитать минимальное время ответа&lt;/li&gt;
  &lt;li&gt;Максимальное количество байт переданное в ответе&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Aggs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собствено &lt;strong&gt;aggs&lt;/strong&gt; и используется для агрегации метрик. Можно выделить 2 важных поля в запросе при использовании &lt;strong&gt;aggs&lt;/strong&gt;. Это &lt;code class=&quot;highlighter-rouge&quot;&gt;aggregation name&lt;/code&gt; ( имя, котрое будет выведенно в  результатах запроса ) и &lt;code class=&quot;highlighter-rouge&quot;&gt;AGG_TYPE&lt;/code&gt; ( тип агрегации ).&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;AGGREGATION_NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;AGG_TYPE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sum&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Результаты агрегации (Aggregation Results)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В результате выполнения запроса с агрегацией добавится секция &lt;strong&gt;aggregations&lt;/strong&gt;, в которой и будет результат запроса.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;aggregations&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;AGGREGATION_NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также в выоде пудут 10 первых документов, и если вы хотите исключить их из вывода, например для ускорения запросы можно выставить &lt;code class=&quot;highlighter-rouge&quot;&gt;size&lt;/code&gt; в 0. Про &lt;code class=&quot;highlighter-rouge&quot;&gt;size&lt;/code&gt; можно почитать &lt;a href=&quot;https://www.tipoit.kz/elk-combining-queries&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;AGGREGATION_NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sum&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Естественно можно и даже нужно использовать с &lt;code class=&quot;highlighter-rouge&quot;&gt;query&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;AGGREGATION_NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sum&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Для вычисления медианы можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;percentiles&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percentiles&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;percents&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;cardinality&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы расчитать количество уникальных значений поля можно восспользоваться &lt;strong&gt;cardinality&lt;/strong&gt;. Можно использовать например для подсчета уникальных пользователей.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX//_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;aggs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;my_agg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cardinality&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;field&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Таблица типов агрегаций (AGG_TYPE)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Имя&lt;/th&gt;
      &lt;th&gt;Функция&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;sum&lt;/td&gt;
      &lt;td&gt;суммирование&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;min&lt;/td&gt;
      &lt;td&gt;минимальное значение&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;max&lt;/td&gt;
      &lt;td&gt;максимальное значение&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;avg&lt;/td&gt;
      &lt;td&gt;серднее значение&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;percentiles&lt;/td&gt;
      &lt;td&gt;перцентиль&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;cardinality&lt;/td&gt;
      &lt;td&gt;вычисляет количество различных значений для заданного поля&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;boxplot&lt;/td&gt;
      &lt;td&gt;вычисляет коробчатую диаграмму числовых значений&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;geo_bounds&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;geo_centroid&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;matrix_stats&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;rate&lt;/td&gt;
      &lt;td&gt;вычисляет курс документов или поля в каждом сегменте&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;date_histogram&lt;/td&gt;
      &lt;td&gt;количество документов разбитое по датам&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;histogram&lt;/td&gt;
      &lt;td&gt;похоже на агрегирование date_histogram, за исключением того, что оно может применяться к любому числовому полю&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Sat, 19 Dec 2020 04:40:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-metric-aggregations</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-metric-aggregations</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - Объединение запросов</title>
        <description>&lt;p&gt;Допустим вы хотите найти документы где FIELD1 = TEXT1 и FIELD2 = TEXT2. Именно для такого случая и подойдёт объединение запросов.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Bool Query&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Запрос типа &lt;code class=&quot;highlighter-rouge&quot;&gt;bool&lt;/code&gt; - это запрос, который сопоставляет документы, соответствующие логическим комбинациям (true или false) других запросов. Вы можете создавать комбинации из одного или нескольких запросов, включив их в одно или несколько из этих предложений.&lt;/p&gt;

&lt;p&gt;Всего 4 вида &lt;code class=&quot;highlighter-rouge&quot;&gt;bool&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;must&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;must_not&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;shuld&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Must&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Must&lt;/strong&gt; требует, чтобы все, что находится в условии совпадало. Это почти как оператор &lt;code class=&quot;highlighter-rouge&quot;&gt;and&lt;/code&gt;. Запросы в предложении &lt;strong&gt;must&lt;/strong&gt; должны совпадать в возвращаемых документах.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;С этим типом запроса Elasticsearch будет искать по двум полям. Оба запроса на совпадение должны быть удовлетворены, чтобы документ был возвращен как попадание. Это означает, что наличие большего количества запросов в предложении &lt;strong&gt;must&lt;/strong&gt; повысит &lt;code class=&quot;highlighter-rouge&quot;&gt;precision&lt;/code&gt; вашего запроса. &lt;code class=&quot;highlighter-rouge&quot;&gt;Score&lt;/code&gt; будет рассчитана по обоим пунктам, а затем суммирована.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Must_not&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно это бобратная от &lt;code class=&quot;highlighter-rouge&quot;&gt;must&lt;/code&gt;. &lt;strong&gt;Must_not&lt;/strong&gt; используется для исключения информации. Слово не должно появляться в соответствующих документах. Так как термин не появляется в документах, все возвращенные документы имеют &lt;code class=&quot;highlighter-rouge&quot;&gt;score&lt;/code&gt; 0. Фактически, алгоритм оценки вообще пропускается.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must_not&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Should&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Пункт &lt;strong&gt;shuld&lt;/strong&gt; не исключает документов из вывода. Запросы с использованием &lt;strong&gt;should&lt;/strong&gt; должны появиться в соответствующем документе, и если это произойдет, оценка этого документа увеличится, так что документ будет выше остальных в выводе.&lt;/p&gt;

&lt;p&gt;Для примера допустим вы ищиите FIELD1 со значением TEXT1 и FIELD2 со значнием TEXT2 применяя &lt;strong&gt;should&lt;/strong&gt;. В результате первыми в списке будут выводится документы, которые имеют значение TEXT2 в поле FIELD2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should&lt;/strong&gt; не исключает документы из вывода, он просто их сортирует.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;should&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Filter&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Score&lt;/code&gt; для &lt;strong&gt;filter&lt;/strong&gt; не рассчитывается. Применение &lt;strong&gt;filter&lt;/strong&gt; это по сути вопрос на ответ ДА или НЕТ. Например вы задаёте вопрос: Дата публикации входит в интервал дней? Если ответ ДА, то документ будет выведен в результатах запроса.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;range&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;DATE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lt&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2020-01-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;	
	  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;range&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;DATE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;gte&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2017-12-01&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lt&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2018-01-01&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;		  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Query и Filter&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите узнать, насколько хорошо документ соответствует запросу, используйте обычный &lt;strong&gt;query&lt;/strong&gt;. Если вас не интересует &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt; и вы хотите знать, соответствует ли документ запросу, используйте &lt;strong&gt;filter&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Итоговая таблица&lt;/p&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Тип запроса&lt;/th&gt;
      &lt;th&gt;Влияет на hits&lt;/th&gt;
      &lt;th&gt;Влияет на _score&lt;/th&gt;
      &lt;th&gt;Фильтрует документы&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;must&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;must_not&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;should&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;filter&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;+&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Математические операции&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; есть удобный способ выразить диапазоны дат с помощью математических вычислений. Пример, который вы видите здесь, собирает данные за 10 лет.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;range&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;DATE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;gte&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;now-10y&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Таблица математических операций с датами (Date Math Expressions)&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Абревиатура&lt;/th&gt;
      &lt;th&gt;Расшифровка&lt;/th&gt;
      &lt;th&gt;Операции&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;M&lt;/td&gt;
      &lt;td&gt;месяцы&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;w&lt;/td&gt;
      &lt;td&gt;недели&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;d&lt;/td&gt;
      &lt;td&gt;дни&lt;/td&gt;
      &lt;td&gt;now/d+1d&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;h или H&lt;/td&gt;
      &lt;td&gt;часы&lt;/td&gt;
      &lt;td&gt;now-1H&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;m&lt;/td&gt;
      &lt;td&gt;минуты&lt;/td&gt;
      &lt;td&gt;now-1H+30m&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;s&lt;/td&gt;
      &lt;td&gt;секунды&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;y&lt;/td&gt;
      &lt;td&gt;годы&lt;/td&gt;
      &lt;td&gt;2018-01-01||+1y (2019-01-01)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Keyword&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Еще один вариант аналогичный &lt;code class=&quot;highlighter-rouge&quot;&gt;match_phrase&lt;/code&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;query&lt;/code&gt;. Т.е запрос с &lt;strong&gt;keyword&lt;/strong&gt; ищет полностью всю фразу целиком, а не каждое слово отдельно.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD2.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT2 in TEXT3&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сортировка вывода (order)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для сортировки ответа на запрос модно использовать &lt;strong&gt;order&lt;/strong&gt;, которое принимает значения &lt;code class=&quot;highlighter-rouge&quot;&gt;DESC&lt;/code&gt; или &lt;code class=&quot;highlighter-rouge&quot;&gt;ASC&lt;/code&gt;. Т.е сортирует поля по возрастанию или убыванию. При этом сортировка по &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt; не происходит (_score равно 0).&lt;/p&gt;

&lt;p&gt;Также при использовании &lt;strong&gt;order&lt;/strong&gt; в ответе на запрос появляется поле &lt;code class=&quot;highlighter-rouge&quot;&gt;sort&lt;/code&gt; (“sort” : [“Text my text”]).&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;desc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;From&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch&lt;/code&gt; показывает только по 10 документов в ответе на запрос. Для того чтобы смотреть другие документы можно восспользоваться &lt;strong&gt;from&lt;/strong&gt;, которому в цифровом формате передаём значение с какого документа начать просмотр. Работает как pagination на веб сайтах.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;desc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Также если хочется вывести больше 10 документов можно восспользоваться &lt;strong&gt;size&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sort&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1.keyword&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;order&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;desc&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Выделение найденных слов (Highlight)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Бывает что нужно найти те слова, которые вы задавали в поиске и что-то с ними сделать. Например задать им другой &lt;code class=&quot;highlighter-rouge&quot;&gt;html&lt;/code&gt; тэг. Вэтом поможет &lt;strong&gt;highlight&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;INDEX/_search&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;query&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;bool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;must&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;highlight&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;fields&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;pre_tags&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&amp;lt;a&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;post_tags&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В итоге получим отдельное поле в выводе со значением:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;highlight&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;FIELD1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;dsadsad n &amp;lt;a&amp;gt;TEXT1&amp;lt;/a&amp;gt;: dsadadasd &amp;lt;a&amp;gt;TEXT1&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 17 Dec 2020 05:40:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-combining-queries</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-combining-queries</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - Полнотекстовые запросы</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Поиск фраз&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Из статьи про релевантность мы поняли что искать фразы через &lt;strong&gt;query&lt;/strong&gt; не получится. Но что если очень надо? Тут поможет &lt;code class=&quot;highlighter-rouge&quot;&gt;match_phrase &lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Запрос &lt;strong&gt;match_phrase&lt;/strong&gt; используется для поиска близких друг к другу терминов (слов).&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET INDEX/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;match_phrase&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FIELD&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT1&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT2&quot;&lt;/span&gt;
	&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При использовании &lt;strong&gt;match_phrase&lt;/strong&gt; вы повышаете &lt;code class=&quot;highlighter-rouge&quot;&gt;precision&lt;/code&gt; но понижаете &lt;code class=&quot;highlighter-rouge&quot;&gt;recall&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если вы хотите повысить &lt;code class=&quot;highlighter-rouge&quot;&gt;recall&lt;/code&gt; запроса &lt;strong&gt;match_phrase&lt;/strong&gt;, вы можете внести некоторую гибкость во фразу, используя параметр &lt;strong&gt;slop&lt;/strong&gt;. Это позволяет терминам (словам) располагаться близко друг к другу, но не обязательно рядом друг с другом, тем самым увеличивая ценность &lt;code class=&quot;highlighter-rouge&quot;&gt;recall&lt;/code&gt;. Параметр &lt;strong&gt;slop&lt;/strong&gt; указывает, насколько далеко могут быть друг от друга термины (слова), при этом все еще считая документ совпадающим.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET INDEX/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;match_phrase&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FIELD&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT1&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;slop&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;	&lt;/span&gt;  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;	
	&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt; 
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е следуя из примера между TEXT1 и TEXT2 может быть ещё 2 слова.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Запрос с несколькими совпадениями (multi-match)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Этот тип запроса обеспечивает удобное сокращение для выполнения запроса на совпадение для нескольких полей. Для каждого документа рассчитывается &lt;code class=&quot;highlighter-rouge&quot;&gt;score&lt;/code&gt; для каждого поля. Самая высокая из этих &lt;code class=&quot;highlighter-rouge&quot;&gt;score&lt;/code&gt; будет &lt;code class=&quot;highlighter-rouge&quot;&gt;score&lt;/code&gt; для этого документа.&lt;/p&gt;

&lt;p&gt;По умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt; учитывает только лучшее поле при вычислении &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt; (best_fields). Оценка будет вычисляться для каждого поля, и наивысшая оценка будет той, которая используется для оценки документа.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET INDEX/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;multi_match&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT1&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fields&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;
	    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED1&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED3&quot;&lt;/span&gt;
	  &lt;span class=&quot;pi&quot;&gt;],&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;type&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;best_fields&quot;&lt;/span&gt;
	&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt; 
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;По умолчанию для &lt;strong&gt;multi_match&lt;/strong&gt; используется &lt;code class=&quot;highlighter-rouge&quot;&gt;or&lt;/code&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;query&lt;/code&gt;. Можно также использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;match_phrase&lt;/code&gt; указав в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;type&lt;/code&gt; значение &lt;strong&gt;phrase&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET INDEX/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;multi_match&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT1&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fields&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;
	    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED1&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED3&quot;&lt;/span&gt;
	  &lt;span class=&quot;pi&quot;&gt;],&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;type&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;phrase&quot;&lt;/span&gt;
	&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt; 
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Повышение приоритетности поля для вычисления _score&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно выполнив запрос выше вы повысили релевантность. Но возможно вы хотите сами задать какое из полей должно иметь приоритетную оценку над другими для &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Boost&lt;/code&gt; - еще один метод, который можно использовать для улучшения результатов поиска. Допустим, вы хотите, чтобы FILED2 имел больший вес, чем поля FILED1 или FILED3.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET INDEX/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;multi_match&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT1&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fields&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;
	    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED1&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED2^2&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED3&quot;&lt;/span&gt;
	  &lt;span class=&quot;pi&quot;&gt;],&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;type&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;best_fields&quot;&lt;/span&gt;
	&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt; 
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Борьба с неправильно написанными словами&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;А что насчёт неправильно написанных слов. Для примера вы ищите слово TEXT1 в поле где его нет, но там есть слово TEXT2. И если вы хотите его всё же найти (TEXT2), то можно воспользоваться &lt;strong&gt;fuzziness&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET INDEX/_search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;match&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FILED&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;
	    &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;query&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;TEXT1&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fuzziness&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;	&lt;/span&gt;  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;  
  &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если вы не знаете какое значение подставить для &lt;strong&gt;fuzziness&lt;/strong&gt; можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;auto&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;При использовании &lt;strong&gt;fuzziness&lt;/strong&gt; стоит помнить что это создаст дополнительную нагрузку на &lt;code class=&quot;highlighter-rouge&quot;&gt;CPU&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 17 Dec 2020 04:43:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-full-text-queries</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-full-text-queries</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - компонент Kibana</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Kibana&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt;  это инструмент визуализации, который можно использовать для анализа ваших данных, и он берёт данные ( документы ) с Elasticsearch для выполнения запросов и агрегирования этих визуализаций.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Kibana запросы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы выполнить запрос заходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt; и далее в &lt;code class=&quot;highlighter-rouge&quot;&gt;Dev Tools&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;По умолчанию в ответе выводится не более 10 документов.&lt;/p&gt;

&lt;p&gt;img&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Kibana ответ на запрос&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Рассмотрим несколько параметров, которые отдаёт нам &lt;code class=&quot;highlighter-rouge&quot;&gt;Kibana&lt;/code&gt; при выполнении запросов для &lt;a href=&quot;https://www.tipoit.kz/elk-get&quot;&gt;получения документов&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;img&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hits&lt;/strong&gt; - массив, в котором содержатся все документы ( documents ) подходящие под критерии поиска.&lt;/p&gt;
</description>
        <pubDate>Thu, 17 Dec 2020 02:32:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-kibana</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-kibana</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        <category>kibana</category>
        
        
      </item>
    
      <item>
        <title>ELK - компонент Filebeat</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Filebeat&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Filebeat&lt;/code&gt; - один из компонентов &lt;code class=&quot;highlighter-rouge&quot;&gt;elastic stack&lt;/code&gt;. &lt;code class=&quot;highlighter-rouge&quot;&gt;Filebeat&lt;/code&gt; преобразует файлы журналов в формат &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON&lt;/code&gt;, который требуется для &lt;code class=&quot;highlighter-rouge&quot;&gt;Elasticsearch&lt;/code&gt;, и отправляет &lt;a href=&quot;https://www.tipoit.kz/elk-post&quot;&gt;bulk&lt;/a&gt; запросы ( 50 журналов за раз ).&lt;/p&gt;
</description>
        <pubDate>Thu, 17 Dec 2020 02:32:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-filebeat</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-filebeat</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        <category>filebeat</category>
        
        
      </item>
    
      <item>
        <title>ELK - команда PUT</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Put&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Используйте команду &lt;code class=&quot;highlighter-rouge&quot;&gt;PUT&lt;/code&gt;, чтобы добавить документ в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. В команде нужно указывать &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt; ( &lt;strong&gt;my_index&lt;/strong&gt; ) и &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; ( &lt;strong&gt;1&lt;/strong&gt; ). &lt;code class=&quot;highlighter-rouge&quot;&gt;Id&lt;/code&gt; можно опустить, создастся автоматически&lt;/p&gt;

&lt;p&gt;Если делать несколько &lt;code class=&quot;highlighter-rouge&quot;&gt;PUT&lt;/code&gt; с одинаковым &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; документ будет обновлён.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;localhost:9200/my_index/_doc/1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-H&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'Content-Type:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;application/json'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;-d'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;first_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Dilibon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;last_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BonBon&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;first_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Dilibon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;last_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BonBon&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ответ на запрос будет иметь вид:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;_doc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;тот&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;который&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;был&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;в&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;команде&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;версия&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;документа&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;меняется&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;при&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;многоразовом&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;одинаковым&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;created&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;--&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;updated&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;при&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;многоразовом&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;с&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;одинаковым&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Put - create&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы избежать обновление документов при использовании &lt;code class=&quot;highlighter-rouge&quot;&gt;PUT&lt;/code&gt; с одинаковым &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt; можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;_create&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Если документ существует &lt;strong&gt;статус/responce&lt;/strong&gt; в ответе будет &lt;strong&gt;409&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_create/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My title new&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;first_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Dilibon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;last_name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BonBon&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 16 Dec 2020 21:38:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-put</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-put</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - команда POST</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Post - update&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если вы хотите просто обновить некоторые поля в документе, а не перезаписывать его полностью, используйте &lt;code class=&quot;highlighter-rouge&quot;&gt;_update&lt;/code&gt; с запросом &lt;code class=&quot;highlighter-rouge&quot;&gt;POST&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Поля в запросе на обновление, которых не было в более раннем документе, будут добавлены в обновленный документ.&lt;/p&gt;

&lt;p&gt;Поля в запросе на обновление, которые существовали в более раннем документе, просто заменят значение в этом поле в обновленном документе.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_update/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;doc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;May 22, 2020&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Post - bulk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы добавить множественное количество документов можно восспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;POST&lt;/code&gt; с &lt;code class=&quot;highlighter-rouge&quot;&gt;_bulk&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Например добавим 3 документа, один обновим и один удалим.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_bulk&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Title 3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Category 1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Title 4&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Category 2&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Title 5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Category 3&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;update&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;doc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Title 5 new&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delete&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 16 Dec 2020 21:34:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-post</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-post</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - команда DELETE</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;DELETE&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;DELETE&lt;/code&gt; удаляет документ.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;DELETE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 16 Dec 2020 21:34:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-delete</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-delete</guid>
        
        <category>elkstack</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>ELK - команда GET</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Get&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;GET&lt;/code&gt; используется для получения проиндексированного документа с использованием его &lt;strong&gt;id&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;my_index/_doc/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Get - mget&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы получить множественное количество докуменстов в запросе можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;GET&lt;/code&gt; с &lt;strong&gt;_mget&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_mget&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;docs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;comments&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my_index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Get - search&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чтобы получить всё количество докуменстов в запросе можно использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;GET&lt;/code&gt; с &lt;strong&gt;_search&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET my_index/_search
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Чтобы отфильтровать по значениям поля можно воспользоваться &lt;strong&gt;query&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET my_index/_search
{ &quot;query&quot;: {
  &quot;match&quot;: {
    &quot;поле&quot;: {
      &quot;query&quot;: &quot;my node by&quot;,
    }
  }
}}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ограничения&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Немного &lt;a href=&quot;https://www.tipoit.kz/elk-relevants&quot;&gt;тут&lt;/a&gt; (Total Hits)&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Dec 2020 21:32:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-get</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-get</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>ELK - релевантность</title>
        <description>&lt;p&gt;В &lt;code class=&quot;highlighter-rouge&quot;&gt;ELK&lt;/code&gt; под релевантсностью ( Relevance ) подразумевается то насколько актуальные данные вы получаете в ответе на ваши запросы.&lt;/p&gt;

&lt;p&gt;Т.е допустим мы ищем поле &lt;strong&gt;title&lt;/strong&gt; со значением &lt;strong&gt;one time&lt;/strong&gt;, но в итоге получаем документы в которых присутствует одно из слов или оба слова. Соответсвенно релевантность такого запроса данных не высока.&lt;/p&gt;

&lt;p&gt;Те документы, которые полностью соответвствуют требованиям поиска входят в число &lt;code class=&quot;highlighter-rouge&quot;&gt;true positives&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Те документы, которые соответвствуют неполностью требованиям поиска входят в число &lt;code class=&quot;highlighter-rouge&quot;&gt;false positives&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Те документы, которые не соответвствуют требованиям поиска входят в число &lt;code class=&quot;highlighter-rouge&quot;&gt;false negatives&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Precision и Recall&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Precision&lt;/code&gt; - это отношение &lt;code class=&quot;highlighter-rouge&quot;&gt;true positives&lt;/code&gt; результатов к общему количеству возвращенных документов ( &lt;code class=&quot;highlighter-rouge&quot;&gt;true positives&lt;/code&gt; плюс &lt;code class=&quot;highlighter-rouge&quot;&gt;false positives&lt;/code&gt; ).&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Precision&lt;/code&gt; - это та часть возвращенных документов, которая актуальна&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Recall&lt;/code&gt; - это отношение &lt;code class=&quot;highlighter-rouge&quot;&gt;true positives&lt;/code&gt; результатов к общему количеству документов, которые &lt;strong&gt;должны были быть возвращены&lt;/strong&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;true positives&lt;/code&gt; результаты плюс &lt;code class=&quot;highlighter-rouge&quot;&gt;false negatives&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Recall&lt;/code&gt; - это возвращенная часть соответствующих документов.&lt;/p&gt;

&lt;p&gt;Другими словами, точность - это количество извлеченных релевантных документов, деленное на общее количество возвращенных документов. Отзыв - это количество извлеченных релевантных документов, деленное на общее количество релевантных документов.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET my_index/_search
{ &quot;query&quot;: {
  &quot;match&quot;: {
    &quot;content&quot;: {
      &quot;query&quot;: &quot;my node&quot;
    }
  }
}}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Этот вариант запроса вернёт нам 1000 документов, в которых содержится одно из двух слов или оба.&lt;/p&gt;

&lt;p&gt;Чтобы увеличить &lt;code class=&quot;highlighter-rouge&quot;&gt;Precision&lt;/code&gt; для такого запроса можно использовать &lt;strong&gt;operator&lt;/strong&gt; со значением &lt;strong&gt;and&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET my_index/_search
{ &quot;query&quot;: {
  &quot;match&quot;: {
    &quot;content&quot;: {
      &quot;query&quot;: &quot;my node&quot;,
      &quot;operator&quot;: &quot;and&quot;
    }
  }
}}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Этот запрос вернет гораздо меньше документов. Соответсвенно релевантность такого поиска выше и вы повысили &lt;code class=&quot;highlighter-rouge&quot;&gt;Precision&lt;/code&gt;. Оператор &lt;strong&gt;and&lt;/strong&gt; означает что в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt; должны присутствовать оба слова, но не обязательно что подряд.&lt;/p&gt;

&lt;p&gt;Также можно использовать &lt;strong&gt;minimum_should_match&lt;/strong&gt; с цифровым значением, которое указывает количество слов котороые должны быть найдены в поле.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET my_index/_search
{ &quot;query&quot;: {
  &quot;match&quot;: {
    &quot;content&quot;: {
      &quot;query&quot;: &quot;my node by&quot;,
      &quot;minimum_should_match&quot;: 2
    }
  }
}}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Т.е чтобы документ был найден в нём должно присутствовать минимум 2 слова из 3 в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;content&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Score&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Также после сортировки можно заметить что у каждого документа присутствует роле &lt;code class=&quot;highlighter-rouge&quot;&gt;_score&lt;/code&gt; с разными значениями.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Score&lt;/code&gt; - это значение, показывающее, насколько документ соответствует ( релевантность ) конкретному запросу. Вычисляется он по алгоритму &lt;strong&gt;BM25&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Score&lt;/code&gt; документа зависит от трех основных факторов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;TF&lt;/strong&gt; (term frequency/частота термина): чем больше термин/слово находится в поле, тем важнее документ&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IDF&lt;/strong&gt; (inverse document frequency/обратная частота документов): чем больше документов содержит термин в `index’, тем менее важен термин&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Field length/Длина поля&lt;/strong&gt;: более короткие совпадающие поля будут более релевантными, чем более длинные.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ниже поподробнее о 2 факторах.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Term frequency&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чем больше термин/слово появляется в поле, тем он важнее. Если слово встречается в документе несколько раз, его релевантность возрастает, так как оно должно быть более значимым, чем другие слова, которые появляются меньше.&lt;/p&gt;

&lt;p&gt;Но после определенного момента многие - это просто многие. Оценка не должна существенно отличаться, если термин встречается 100 или 102 раза. Только если кратно 5.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Inverse Document Frequency&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Чем больше документов содержит термин, тем менее важно, что этот термин в &lt;code class=&quot;highlighter-rouge&quot;&gt;index&lt;/code&gt;. По сути, слово, которое встречается во многих документах, - это часто встречающийся термин, который не должен влиять на оценку так сильно, как редко встречающееся слово.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Total Hits&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Начиная с версии 7.0, Elasticsearch по умолчанию ограничивает количество полей &lt;code class=&quot;highlighter-rouge&quot;&gt;Total Hits&lt;/code&gt; до 10 000. Это было сделанно для более быстрой обработки запроса при работе с индексами с большим количеством документов.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET _search&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/2020-12-16_21-16.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Чтобы понимать точное ли количество документов нам выданно, а не урезанно можно по полю &lt;code class=&quot;highlighter-rouge&quot;&gt;relation&lt;/code&gt;. Которое может принимать:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;eq&lt;/strong&gt; означает, что &lt;strong&gt;value&lt;/strong&gt; имеет правильное количество документов&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;gte&lt;/strong&gt; означает, что количество совпадений может быть больше или равно счетчику в &lt;strong&gt;value&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Чтобы вывести все документы если &lt;code class=&quot;highlighter-rouge&quot;&gt;relation&lt;/code&gt; имеет значение &lt;strong&gt;gte&lt;/strong&gt; можно воспользоваться &lt;strong&gt;track_total_hits&lt;/strong&gt; выставив его в &lt;strong&gt;true&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;GET _search&lt;/span&gt;
&lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;track_total_hits&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/elk/2020-12-16_21-17.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Dec 2020 06:58:39 +0600</pubDate>
        <link>http://www.tipoit.kz/elk-relevants</link>
        <guid isPermaLink="true">http://www.tipoit.kz/elk-relevants</guid>
        
        <category>elkstack</category>
        
        <category>elk</category>
        
        
      </item>
    
      <item>
        <title>Syslog настройка</title>
        <description>&lt;p&gt;Для примера буду использовать и настраивать &lt;code class=&quot;highlighter-rouge&quot;&gt;rsyslog&lt;/code&gt; в качестве клиентского приложения и &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch, logstah&lt;/code&gt; в качестве сервера &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt;. В качестве ОС выступает CentOS7.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка logstah&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавим новый &lt;strong&gt;input&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/logstash/conf.d/02-beats-input.conf
	input &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;c&quot;&gt;#если нужно через UDP, то меняем tcp на udp&lt;/span&gt;
	  tcp &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;c&quot;&gt;#пор на который отправлять данные&lt;/span&gt;
	    port &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; 5066
	    &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; syslog
	  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Добавим новый &lt;strong&gt;output&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/logstash/conf.d/30-elasticsearch-output.conf
	output &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;syslog&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	    elasticsearch &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	      hosts &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;elasticsearch_host:port&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
	      manage_template &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;nb&quot;&gt;false
	      &lt;/span&gt;index &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;syslog-%{+YYYY.MM}&quot;&lt;/span&gt;
	    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Добавим новый &lt;strong&gt;filter&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/logstash/conf.d/10-syslog-filter.conf
	filter &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;fileset][module] &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;system&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;fileset][name] &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;auth&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	      grok &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	        match &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;message&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?&quot;&lt;/span&gt;,
	                  &lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}&quot;&lt;/span&gt;,
	                  &lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}&quot;&lt;/span&gt;,
	                  &lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}&quot;&lt;/span&gt;,
	                  &lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}&quot;&lt;/span&gt;,
	                  &lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$&quot;&lt;/span&gt;,
	                  &lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][auth][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: %{GREEDYMULTILINE:[system][auth][message]}&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	        pattern_definitions &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	          &lt;span class=&quot;s2&quot;&gt;&quot;GREEDYMULTILINE&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;(.|&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)*&quot;&lt;/span&gt;
	        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	        remove_field &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;message&quot;&lt;/span&gt;
	      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	      date &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	        match &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;[system][auth][timestamp]&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;MMM  d HH:mm:ss&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;MMM dd HH:mm:ss&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
	      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	      geoip &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	        &lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;[system][auth][ssh][ip]&quot;&lt;/span&gt;
	        target &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;[system][auth][ssh][geoip]&quot;&lt;/span&gt;
	      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	    &lt;span class=&quot;k&quot;&gt;else if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;fileset][name] &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;syslog&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	      grok &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	        match &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;message&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%{POSINT:[system][syslog][pid]}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\]&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)?: %{GREEDYMULTILINE:[system][syslog][message]}&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	        pattern_definitions &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;GREEDYMULTILINE&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;(.|&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)*&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	        remove_field &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;message&quot;&lt;/span&gt;
	      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	      date &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	        match &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;[system][syslog][timestamp]&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;MMM  d HH:mm:ss&quot;&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;MMM dd HH:mm:ss&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
	      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Перезапускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;logstash&lt;/code&gt; и настраиваем файрволл&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo systemctl restart logstash
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;5066/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка rsyslog&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавляем &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt; сервер &lt;code class=&quot;highlighter-rouge&quot;&gt;elasticsearch, logstash&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.conf
	&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;  action&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;omfwd&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ip&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;5066&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tcp&quot;&lt;/span&gt;
            action.resumeRetryCount&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;100&quot;&lt;/span&gt;
            queue.type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;linkedList&quot;&lt;/span&gt; queue.size&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;10000&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;

sudo systemctl restart rsyslog
sudo systemctl status rsyslog
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ошибка rsyslogd: action ‘action 3’ suspended, next retry is&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Бывает что status отвечает с ошибкой &lt;strong&gt;rsyslogd: action ‘action ‘ suspended, next retry is&lt;/strong&gt; и логи не шлются на &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt; сервер.&lt;/p&gt;

&lt;p&gt;Самое первое что можно попробовать это отключить &lt;code class=&quot;highlighter-rouge&quot;&gt;selinux&lt;/code&gt; и перезапустить сервис &lt;code class=&quot;highlighter-rouge&quot;&gt;rsyslog&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setenforce 0
sudo systemctl restart rsyslog
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если после проделанного логи появились на &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt; сервере предлагаю не тупо отключать &lt;code class=&quot;highlighter-rouge&quot;&gt;selinux&lt;/code&gt; а настроить его. Происходит это из-за того что в &lt;code class=&quot;highlighter-rouge&quot;&gt;selinux&lt;/code&gt; для &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt; прописан только стандартный порт &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt;. Да &lt;code class=&quot;highlighter-rouge&quot;&gt;rsyslog&lt;/code&gt; только шлёт, а не принимает. Но всё же.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo setenforce 1
sudo yum install -y policycoreutils-python
sudo semanage port -a -t syslogd_port_t -p tcp 5045
sudo systemctl restart rsyslog
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Rsyslog отключаем логирование journald&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию все сервисы &lt;code class=&quot;highlighter-rouge&quot;&gt;journald&lt;/code&gt; пишут лони также и в &lt;code class=&quot;highlighter-rouge&quot;&gt;syslog&lt;/code&gt;.
Чтобы исключить сервис создаём дополнительный конфиг файл для &lt;code class=&quot;highlighter-rouge&quot;&gt;rsyslog&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/rsyslog.d/journald-disable.conf
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$programname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'journalbeat'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then &lt;/span&gt;stop
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$programname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'service-1.service'&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then &lt;/span&gt;stop
sudo systemctl restart rsyslog	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 14 Dec 2020 22:35:39 +0600</pubDate>
        <link>http://www.tipoit.kz/syslog-configure</link>
        <guid isPermaLink="true">http://www.tipoit.kz/syslog-configure</guid>
        
        <category>linux</category>
        
        <category>all</category>
        
        <category>syslog</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Splunk мониторинг pgbackrest</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Предисловие&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;pgbackrest&lt;/code&gt; - утилита для создания backup в postgresql. Создавать backup это конечно хорошо, но нужно еще и мониторить это всё дело. Мониторить &lt;code class=&quot;highlighter-rouge&quot;&gt;pgbackrest&lt;/code&gt; не самая простая задача, так как в лог файле не всегда понятно что происходит&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Возможные варианты&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Есть 2 типа:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Через лог файл ( от него я отказался, так как очень муторно )&lt;/li&gt;
  &lt;li&gt;Это использовать &lt;code class=&quot;highlighter-rouge&quot;&gt;pgbackrest info&lt;/code&gt; с созданием функции в &lt;code class=&quot;highlighter-rouge&quot;&gt;postgresql&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Установка postgresql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По ссылке &lt;a href=&quot;https://www.postgresql.org/download/&quot;&gt;link&lt;/a&gt; выбираем версию ОС и по мануалу ставим &lt;code class=&quot;highlighter-rouge&quot;&gt;postgresql&lt;/code&gt;. Я буду ставить на &lt;code class=&quot;highlighter-rouge&quot;&gt;centos 7&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm  
sudo yum install -y postgresql12-server postgresql-devel postgresql-contrib postgresql12-server
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb  
sudo systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;postgresql-12  
sudo systemctl start postgresql-12
sudo firewall-cmd --add-port&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;5432/tcp --permanent
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Установка pgbackrest&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo yum install pgbackrest
sudo -u postgres pgbackrest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Добавление STANZA&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если кратко то &lt;code class=&quot;highlighter-rouge&quot;&gt;STANZA&lt;/code&gt; это наша нода с &lt;code class=&quot;highlighter-rouge&quot;&gt;postgresql&lt;/code&gt;, которую нужно бэкапить&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /etc/pgbackrest.conf
	&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;global]
	&lt;span class=&quot;c&quot;&gt;#тут путь к хранению бэкап файлов&lt;/span&gt;
	repo1-path&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/var/lib/pgbackrest
	repo1-type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;cifs
	&lt;span class=&quot;c&quot;&gt;#тут сколько дифоф хранить&lt;/span&gt;
	repo1-retention-diff&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;4
	&lt;span class=&quot;c&quot;&gt;#тут сколько фулов хранить&lt;/span&gt;
	repo1-retention-full&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;2
	process-max&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;4
	log-level-console&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;info
	log-level-file&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;detail
	start-fast&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;y
	&lt;span class=&quot;nv&quot;&gt;compress&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;y
	compress-level&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3
	
	&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;demo]  
	pg1-path&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/var/lib/pgsql/12/data
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Подготавливаем директорию для backup&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Конфигурация WAL архивации&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi /var/lib/pgsql/12/data/postgresql.conf
	archive_command &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'pgbackrest --stanza=demo archive-push %p'&lt;/span&gt;  
	archive_mode &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; on  
	listen_addresses &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'*'&lt;/span&gt;  
	log_filename &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'postgresql.log'&lt;/span&gt;  
	log_line_prefix &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt;  
	max_wal_senders &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 3  
	wal_level &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; replica

sudo systemctl restart postgresql-12.service	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Создание STANZA&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo -u postgres pgbackrest --stanza&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;demo --log-level-console&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;info stanza-create
&lt;span class=&quot;c&quot;&gt;#проверка конфигурации&lt;/span&gt;
sudo -u postgres pgbackrest --stanza&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;demo --log-level-console&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;info check
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Создание backup&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#для full&lt;/span&gt;
sudo -u postgres pgbackrest --stanza&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;demo --log-level-console&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;info backup
&lt;span class=&quot;c&quot;&gt;#для diff&lt;/span&gt;
sudo -u postgres pgbackrest --stanza&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;demo --type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;diff --log-level-console&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;info backup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Добавление в Cron&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Естественно &lt;code class=&quot;highlighter-rouge&quot;&gt;backup&lt;/code&gt; должен запускаться сам без вашего участия. Для этого добавляем его в &lt;code class=&quot;highlighter-rouge&quot;&gt;cron&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo crontab -e
	30 06  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;   &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;   0     pgbackrest --type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;full --stanza&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;demo backup
	30 06  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;   &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;   1-6   pgbackrest --type&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;diff --stanza&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;demo backup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Создание функции для мониторинга через postgresql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого выкачиваем файл &lt;a href=&quot;https://github.com/ynwasg90/postgresql/blob/main/files/pgsql-pgbackrest-info.sql&quot;&gt;link&lt;/a&gt;  и запускаем sql скрипт.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /tmp
sudo wget https://github.com/ynwasg90/postgresql/blob/main/files/pgsql-pgbackrest-info.sql
sudo -u postgres psql -f /tmp/pgsql-pgbackrest-info.sql
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Проверка функции monitor.pgbackrest_info&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого логинимся в &lt;code class=&quot;highlighter-rouge&quot;&gt;postgresql&lt;/code&gt; и вызываем функцию.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo su - postgres
psql
&lt;span class=&quot;k&quot;&gt;select &lt;/span&gt;monitor.pgbackrest_info&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В выводе должны получить &lt;code class=&quot;highlighter-rouge&quot;&gt;json&lt;/code&gt; список с бэкапами.&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;db&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;12&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;system-id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6899011579127733640&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;demo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;backup&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;info&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42312422&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42312422&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;repository&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3369587&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3369587&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;full&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;
label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;prior&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;archive&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;000000010000000000000003&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;000000010000000000000003&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;backrest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;format&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2.30&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;reference&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1606302918&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1606302916&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;info&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;42314065&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16910394&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;repository&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3369694&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;78253&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;incr&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F_20201125-171527I&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;prior&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;archive&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;000000010000000000000004&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;000000010000000000000004&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;backrest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;format&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2.30&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;reference&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1606302929&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1606302927&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;
info&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;51549488&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30054558&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;repository&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4592491&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;delta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1799806&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;incr&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F_20201203-110242I&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;prior&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F_20201125-171527I&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;archive&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;00000001000
000000000000C&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;00000001000000000000000C&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;backrest&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;format&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2.30&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;reference&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;20201125-171516F&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;timestamp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;stop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1606971764&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1606971762&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cipher&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;none&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;st
atus&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;lock&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;backup&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;held&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;archive&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;12-1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;max&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;00000001000000000000000C&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;min&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;000000010000000000000001&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}]}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Мониторинг в splunk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Создание connection в splunk db connect&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;splunk db connect&lt;/code&gt; - модуль для &lt;code class=&quot;highlighter-rouge&quot;&gt;splunk&lt;/code&gt; который позволяет выполнять запросы на серверах бд и записывать вывод сразу в &lt;code class=&quot;highlighter-rouge&quot;&gt;splunk&lt;/code&gt;.
Идём в &lt;strong&gt;Splunk DB Connect -&amp;gt; Configuration -&amp;gt; Identities -&amp;gt; New Identity&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Identity Name&lt;/strong&gt; - удобочитаемое имя для вас&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Username&lt;/strong&gt; - логин пользователя, которому разрешено подключаться к бд &lt;strong&gt;postgres&lt;/strong&gt;, а также выдана роль &lt;strong&gt;pg_execute_server_program&lt;/strong&gt; ( grant role pg_execute_server_program to user_name )&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Password&lt;/strong&gt; - пароль пользователя&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Идём в &lt;strong&gt;Splunk DB Connect -&amp;gt; Configuration -&amp;gt; New Connection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Connection Name&lt;/strong&gt;- удобочитаемое имя для вас&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt; - тот самый пользователь которого создавали&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Connection Type: Postgresql&lt;/strong&gt; - вид бд ( mssql, postgresql, mysql )&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Timezone&lt;/strong&gt; - временная зона&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt; - ip сервера с бд&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Port: 5432&lt;/strong&gt; - порт для подключения к серверу&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Default Database: postgres&lt;/strong&gt; - база, к которой подключаться по умолчанию&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Read Only: yes&lt;/strong&gt; - указываем что пользователь не может делать запись
&lt;img src=&quot;/static/img/splunk/2020-12-08_10-41.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/static/img/splunk/2020-12-08_10-41_1.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Создание input в splunk db connect&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Идём в &lt;strong&gt;Splunk DB Connect -&amp;gt; Configuration -&amp;gt; Inputs-&amp;gt; New Input&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Connection&lt;/strong&gt; - тот что создавался&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SQL Editor: select monitor.pgbackrest_info();&lt;/strong&gt; - запрос, который будет выполнятся на сервере с бд&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Далее нужно нажать &lt;strong&gt;execute&lt;/strong&gt;. После чего запрос выполнится и выдаст результат.
 &lt;img src=&quot;/static/img/splunk/2020-12-08_10-46.png&quot; alt=&quot;execute&quot; /&gt;
 Далее нужно нажать &lt;strong&gt;next&lt;/strong&gt;.
  &lt;img src=&quot;/static/img/splunk/2020-12-08_10-46_1.png&quot; alt=&quot;next&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; -  удобочитаемое имя для вас&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Execution Frequency&lt;/strong&gt; - тут в какое время или через какой интервал запускать запрос&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt; - можно переназначить имя сервера, которое будет отображаться в &lt;strong&gt;splunk search&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Source&lt;/strong&gt; - имя источника событий&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Source Type&lt;/strong&gt; - тип источника событий&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Index&lt;/strong&gt; - индекс &lt;code class=&quot;highlighter-rouge&quot;&gt;splunk&lt;/code&gt;
  &lt;img src=&quot;/static/img/splunk/2020-12-08_10-52.png&quot; alt=&quot;next&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Добавить SEDCMD&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Про &lt;code class=&quot;highlighter-rouge&quot;&gt;SEDCMD&lt;/code&gt; можно почитать &lt;a href=&quot;https://www.tipoit.kz/splunk-sedcmd&quot;&gt;link&lt;/a&gt;. Выполнять на &lt;code class=&quot;highlighter-rouge&quot;&gt;splunk heavy forwarder&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vi &lt;span class=&quot;nv&quot;&gt;$SPLUNK_HOME&lt;/span&gt;/etc/system/local/props.conf
	&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt;::pg_sql:db_backup]
	SEDCMD-Backups &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; s/.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;pgbackrest_info&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;(.*)&quot;&lt;/span&gt;/&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;pg&quot;&lt;/span&gt;:&lt;span class=&quot;se&quot;&gt;\1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;/g
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Суть в том что по умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;splunk db connect&lt;/code&gt; записывает весь вывод в переменную &lt;code class=&quot;highlighter-rouge&quot;&gt;pgbackrest_info&lt;/code&gt;. Через &lt;code class=&quot;highlighter-rouge&quot;&gt;SEDCMD&lt;/code&gt; убирается переменная и создаётся валидный &lt;code class=&quot;highlighter-rouge&quot;&gt;json&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Просмотр логов в splunk&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Идём в &lt;strong&gt;Splunk  -&amp;gt; Search&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;index=databases source=&quot;pg_sql:db_backup&quot;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Готовые запросы&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ynwasg90/postgresql/blob/main/splunk/diff.search&quot;&gt;diff&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ynwasg90/postgresql/blob/main/splunk/full.search&quot;&gt;full&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ynwasg90/postgresql/blob/main/splunk/pgbackup-all.search&quot;&gt;all&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 08 Dec 2020 17:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/splunk-pgbackup-monitoring</link>
        <guid isPermaLink="true">http://www.tipoit.kz/splunk-pgbackup-monitoring</guid>
        
        <category>splunk</category>
        
        <category>postgres</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Splunk - sedcmd</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Предисловие&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В какой-то момент логирования многие задаются вопросом как логировать события с конфиденциальными данными. Для примера возьмём  банковские операции. Допустим что прошла какая-то транзакция где есть публичные поля ( id и т.п ) и конфиденциальные поля ( card number ).&lt;/p&gt;

&lt;p&gt;Что можно сделать в таком случае? Конечно зашифровать половину данных, как это обычно бывает в истории переводов в том же мобильном приложении от интернет банкинга.&lt;/p&gt;

&lt;p&gt;Т.е допустим номер карты 1111-2222-5555-9999 значит надо перевести его в XXXX-XXXX-XXXX-9999&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;SEDCMD&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В splunk для это можно использовать модуль &lt;code class=&quot;highlighter-rouge&quot;&gt;SEDCMD&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Суть работы SEDCMD:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;forwarder отправляет логи в splunk&lt;/li&gt;
  &lt;li&gt;splunk смотря на источник указанный в props.conf обрабатывает логи согласно правилу  &lt;code class=&quot;highlighter-rouge&quot;&gt;SEDCMD&lt;/code&gt; ( pattern )&lt;/li&gt;
  &lt;li&gt;индексирует логи ( записывает )&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Источник данных ( input )&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для нашего примера создадим файл в который будем писать лог, например &lt;strong&gt;/tmp/test.txt&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;touch /tmp/test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Добавим в &lt;code class=&quot;highlighter-rouge&quot;&gt;inputs.txt&lt;/code&gt; наш файл для логирования &lt;strong&gt;/opt/splunkforwarder/etc/system/local/inputs.conf&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vi /tmp/test.txt
	&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;monitor:///tmp/test.txt]
	disabled &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;false
	&lt;/span&gt;sourcetype &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; mysourcetype
	index &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; myindex

systemctl restart splunk
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Тестирование&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавляем в файл запись 1111-2222-5555-9999&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vi /tmp/test.txt
	1111-2222-5555-9999	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Делаем поиск в splunk&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;index=myindex sourcetype=mysourcetype
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/static/img/splunk/2020-12-07_16-26.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Добавление SEDCMD&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для этого редактируем файл &lt;code class=&quot;highlighter-rouge&quot;&gt;props.conf&lt;/code&gt; на &lt;code class=&quot;highlighter-rouge&quot;&gt;node splunk&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vi &lt;span class=&quot;nv&quot;&gt;$SPLUNK_HOME&lt;/span&gt;/etc/system/local/props.conf
	&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;mysourcetype]
	SEDCMD-Mysourcetype&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; s/&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\d&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;4&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;-&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;3&lt;span class=&quot;o&quot;&gt;}(&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\d&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;4&lt;span class=&quot;o&quot;&gt;})&lt;/span&gt;/xxxx-xxxx-xxxx-&lt;span class=&quot;se&quot;&gt;\2&lt;/span&gt;/g
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Разбор конфига:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;s/&lt;/strong&gt; - добавляется всегда в начале&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;(\d{4}-){3}(\d{4})&lt;/strong&gt; - это pattern для нашей строки, где данные бьются на 4 части&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;/&lt;/strong&gt; - добавляется в конце pattern&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;xxxx-xxxx-xxxx-\2&lt;/strong&gt; - собственно pattern на что менять текст, где &lt;strong&gt;\2&lt;/strong&gt; последняя часть с &lt;strong&gt;(\d{4}-){3}(\d{4})&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;/g&lt;/strong&gt; - добавляется в конце&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Тестирование&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавляем в файл запись 1111-2222-5555-9999&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vi /tmp/test.txt
	1111-2222-5555-9999	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Делаем поиск в splunk&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;index=myindex sourcetype=mysourcetype
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/static/img/splunk/2020-12-07_17-10.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 07 Dec 2020 23:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/splunk-sedcmd</link>
        <guid isPermaLink="true">http://www.tipoit.kz/splunk-sedcmd</guid>
        
        <category>splunk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Splunk - buckets</title>
        <description>&lt;p&gt;В splunk все данные хранятся в buckets, которые в свою очередь входят в индексы.&lt;/p&gt;

&lt;p&gt;Также репликация в кластере происходит именно с помощью копирования bucket на ноды.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Виды bucket&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В splunk существует 5 вида bucket:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;hot ( горячий )&lt;/li&gt;
  &lt;li&gt;warm ( теплый )&lt;/li&gt;
  &lt;li&gt;cold ( холодный )&lt;/li&gt;
  &lt;li&gt;frozen ( замороженный )&lt;/li&gt;
  &lt;li&gt;thawed ( размороженный )&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Как хранятся данные ( index ) в splunk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По мере старения bucket переходит от состояния к состоянию проходя первые 4 вида.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;hot bucket&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда данные индексируются ( поступают в splunk ) впервые они находятся в &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt;. Количество &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt; множественное, ограничивается для каждого индекса в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/etc/system/local/indexes.conf&lt;/code&gt; параметром &lt;strong&gt;maxHotBuckets&lt;/strong&gt;. Данные в &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt; доступны для поиска.
Чтобы посмотреть количество &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt; можно выполнить запрос:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-splunk&quot;&gt;| dbinspect index=*
| search state=hot
| stats count as bucket_count min(startEpoch) as earliest_event by index splunk_server
| eval earliest_event_human = strftime(earliest_event, &quot;%c&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;warm bucket&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt; достигает определённого размера ( &lt;strong&gt;maxDataSize&lt;/strong&gt; ) или предела &lt;strong&gt;maxHotBuckets&lt;/strong&gt; то &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt; становится &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt;.  Т.е файл &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt;  переименовывается в &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; и хранится в том же месте ( &lt;code class=&quot;highlighter-rouge&quot;&gt;homePath&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/etc/system/local/indexes.conf&lt;/code&gt;  ).  &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; также доступен для поиска, но не доступен для записи. Количество &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; множественное, ограничивается для каждого индекса в файле &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/etc/system/local/indexes.conf&lt;/code&gt; параметром &lt;strong&gt;maxWarmDBCount&lt;/strong&gt;, по умолчанию 300. 
Есть формула для расчета количества &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;maxWarmDBCount = (LocalDiskSpace-minFreeSpace-(maxHotBuckets*maxDataSize))/maxDataSize
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Чтобы посмотреть количество &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; можно выполнить запрос:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-splunk&quot;&gt;| dbinspect index=*
| search state=warm 
| stats count as bucket_count min(startEpoch) as earliest_event by index splunk_server
| eval earliest_event_human = strftime(earliest_event, &quot;%c&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;cold bucket&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; достигает определённого размера или предела &lt;strong&gt;maxWarmDBCount&lt;/strong&gt; то &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; становится &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt;.  Т.е файл &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt;  переименовывается в &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt; и хранится в отличном от месте от &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt; и &lt;code class=&quot;highlighter-rouge&quot;&gt;hot bucket&lt;/code&gt; ( &lt;strong&gt;coldPath&lt;/strong&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/etc/system/local/indexes.conf&lt;/code&gt;  ).  Это сделано для возможности перенести &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt; на более дешевое хранилище данных. 
Первым в состояние &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt;  переходит самое старое  &lt;code class=&quot;highlighter-rouge&quot;&gt;warm bucket&lt;/code&gt;. Т.е чем старее, тем раньше перейдёт в &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Чтобы посмотреть количество &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt; можно выполнить запрос:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-splunk&quot;&gt;| dbinspect index=*
| search state=cold
| stats count as bucket_count min(startEpoch) as earliest_event by index splunk_server
| eval earliest_event_human = strftime(earliest_event, &quot;%c&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;frozen bucket&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Наконец, после выполнения некоторых других условий, зависящих от времени ( &lt;strong&gt;frozenTimePeriodInSecs&lt;/strong&gt; ) или размера ( &lt;strong&gt;maxTotalDataSizeMB&lt;/strong&gt; ) , &lt;code class=&quot;highlighter-rouge&quot;&gt;cold bucket&lt;/code&gt; переходят в &lt;code class=&quot;highlighter-rouge&quot;&gt;frozen bucket&lt;/code&gt;, после чего они удаляются из индекса после дополнительной архивации. Данные в &lt;code class=&quot;highlighter-rouge&quot;&gt;frozen bucket&lt;/code&gt; не доступны для поиска.
По умолчанию &lt;code class=&quot;highlighter-rouge&quot;&gt;frozen bucket&lt;/code&gt; удаляются а не архивируются.
Также &lt;code class=&quot;highlighter-rouge&quot;&gt;frozen bucket&lt;/code&gt; может быть переведён в &lt;code class=&quot;highlighter-rouge&quot;&gt;thawed bucket&lt;/code&gt;, который будет доступен для поиска.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Архивирование frozen bucket&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для активирования архивирования &lt;code class=&quot;highlighter-rouge&quot;&gt;frozen bucket&lt;/code&gt; нужно добавить в &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/etc/system/local/indexes.conf&lt;/code&gt; параметры &lt;strong&gt;coldToFrozenDir&lt;/strong&gt; и &lt;strong&gt;coldToFrozenScript&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;coldToFrozenScript&lt;/strong&gt; может быть &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/bin/coldToFrozenExample.py&lt;/code&gt;, который по умолчанию идёт со splunk или свой собственный скрипт.&lt;/p&gt;

&lt;p&gt;Также стоит обратить внимание на то что при использовании кластера количество архивов будет ровняться количеству &lt;strong&gt;replication factor&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Восстановление  frozen bucket ( thawed bucket )&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Копируем файлы &lt;code class=&quot;highlighter-rouge&quot;&gt;thawed bucket&lt;/code&gt; в папку &lt;strong&gt;thawedPath&lt;/strong&gt;, которая назначена в  &lt;code class=&quot;highlighter-rouge&quot;&gt;$SPLUNK_HOME/etc/system/local/indexes.conf&lt;/code&gt;. Когда архивные данные уже не нужны удаляем файлы.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Директории по умолчанию&lt;/p&gt;
&lt;/blockquote&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Состояние bucket&lt;/th&gt;
      &lt;th&gt;Директория&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Hot&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;$SPLUNK_HOME/var/lib/splunk/defaultdb/db/*&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Warm&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;$SPLUNK_HOME/var/lib/splunk/defaultdb/db/*&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Cold&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;$SPLUNK_HOME/var/lib/splunk/defaultdb/colddb/*&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Frozen&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;по умолчанию удаляются, можно изменить&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Thawed&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;$SPLUNK_HOME/var/lib/splunk/defaultdb/thaweddb/*&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Fri, 27 Nov 2020 17:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/splunk-buckets</link>
        <guid isPermaLink="true">http://www.tipoit.kz/splunk-buckets</guid>
        
        
        <category>splunk</category>
        
        <category>all</category>
        
        <category>monitoring</category>
        
      </item>
    
      <item>
        <title>PostgreSQL - пароль пользователя в логах</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Предисловие&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;У postgresql за логирование запросов отвечает параметр log_statement, который может принимать значения:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;none - не вести логирование запросов&lt;/li&gt;
  &lt;li&gt;ddl - записывать CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, TRUNCATE, COPY&lt;/li&gt;
  &lt;li&gt;all - собственно записывает всё, в том числе и SELECT&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Проблема&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При установленном значении log_statement = dll или all также записывается и команды CREATE USER и ALTER USER. В целом ничего страшного, но есть одно но: записывается и пароль для команды.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Воспроизведение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Создаём пользователя&lt;/p&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;psql&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;U&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;aaaaa&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PASSWORD&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'EEEEeee111++'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Проверяем логи Postgres&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /pg_db_path/log/postgresql-2020-11-11_000000.log | grep PASSWORD
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В результате получаем:
&lt;code class=&quot;highlighter-rouge&quot;&gt;statement: CREATE USER aaaaa WITH PASSWORD 'EEEEeee111++';&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Решение&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Решением может послужить отключение логирования запросов для текущей сессии. С одной стороны выход а с другой не будет логироваться создание пользователя.&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;psql&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;U&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgres&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;LOCAL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;log_statement&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'none'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;aaaaa11&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PASSWORD&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'EEEEeee111++'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;И наверное самый лучший вариант это закодировать пароль в md5 и уже подставить это значение в PASSWORD&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;aaaaa33&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PASSWORD&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'md5e723ge6ge7623ge76g3e3287eg932e'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Генерация md5 пароля&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;hashlib&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;md5&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hashlib&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;md5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;password&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hexdigest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 27 Nov 2020 17:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/postgresql-password-in-clear-text-in-log</link>
        <guid isPermaLink="true">http://www.tipoit.kz/postgresql-password-in-clear-text-in-log</guid>
        
        <category>postgres</category>
        
        <category>security</category>
        
        <category>databases</category>
        
        
      </item>
    
      <item>
        <title>Ansible - повисший Gathering Facts</title>
        <description>&lt;p&gt;Не знаю можно ли назвать эту ситуацию bug, но бывает что при запуске task в ansible задача Gathering Facts повисает намертво.&lt;/p&gt;

&lt;p&gt;Одна из возможный причин это соответствие dns имени ( если вы в inventory прописали именно dns имя ) с когда-то уже проинициализированным ( ssh fingerprint ) ip адресом уже удалённого сервера. Ухх сложное предложение )
Т.е&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;я добавил fingerprint &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh 192.168.0.1&lt;/code&gt; и далее удалил виртуалку&lt;/li&gt;
  &lt;li&gt;в .ssh/known_hosts остался fingerprint&lt;/li&gt;
  &lt;li&gt;после я создал новый сервер и дал ему dns имя  aa.local 192.168.0.1&lt;/li&gt;
  &lt;li&gt;добавил fingerprint &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh  aa.local&lt;/code&gt;. На самом деле уже тут будет ясно что что-то не так потому что будет предупреждение &lt;em&gt;host key for aa.local differs from the key for the IP adress ‘192.168.0.1’&lt;/em&gt;. Но иногда бывает что просто автоматом пишешь yes уже по  привычке и игнорируешь это сообщение.&lt;/li&gt;
  &lt;li&gt;и уже ansible task при выполнении висит на задаче Gathering Facts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Решение конечно довольно простое:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;vim /home/user/.ssh/known_hosts&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Удаляем строку с нашим ip 192.168.0.1&lt;/li&gt;
  &lt;li&gt;Добавляем заново fingerprint
    &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh aa.local&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Выполняем task&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 29 Oct 2020 17:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ansible-gathering-facts-stuck</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ansible-gathering-facts-stuck</guid>
        
        <category>ansible</category>
        
        <category>ci/cd</category>
        
        <category>all</category>
        
        <category>devops</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - Failed to connect to VMware Lookup Service</title>
        <description>&lt;h1 id=&quot;vcenter---failed-to-connect-to-vmware-lookup-service-после-смены-ip-адреса&quot;&gt;Vcenter - Failed to connect to VMware Lookup Service после смены ip адреса&lt;/h1&gt;

&lt;p&gt;После смены ip адреса возможно будет ошибка:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[WARN ] cm-catalog-manager-pool-3     com.vmware.vise.vim.lookup.LsCatalogManager                       Invoking ‘detectServiceProviders: getServiceInfo’ unsuccessful, retry time left = None. Returning default result, reason = com.vmware.vise.vim.lookup.LookupServiceConnectionException: Failed to connect to VMware Lookup Service - https://27.0.0.1:443/lookupservice/sdk&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Проблема будет с файлом &lt;strong&gt;/etc/hosts&lt;/strong&gt; ( если используется dns имя ). Нужно будет отредактировать  /etc/hosts и обновить ip&lt;/p&gt;
</description>
        <pubDate>Thu, 29 Oct 2020 17:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-Failed-to-connect-to-VMware-Lookup-Service</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-Failed-to-connect-to-VMware-Lookup-Service</guid>
        
        <category>vcenter</category>
        
        <category>all</category>
        
        <category>virtulization</category>
        
        
      </item>
    
      <item>
        <title>Veeam - Смена имени компьютера</title>
        <description>&lt;p&gt;Veeam при установке прописывает в реестр пути, которые используются для работы службы.&lt;/p&gt;

&lt;p&gt;Для смены имени компьютера нужно выполнить:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Сменить имя компьютера&lt;/li&gt;
  &lt;li&gt;В реестре по пути \HKLM\Software\Veeam\Veeam Backup and Replication\SqlServerName меняем значение на новое имя компьютера
&lt;img src=&quot;/static/img/veeam/2020-10-29_11-03.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;В реестре по пути \HKLM\Software\Veeam\Veeam Backup Catalog\CatalogSharedFolderPath меняем значение на новое имя компьютера
&lt;img src=&quot;/static/img/veeam/2020-10-29_11-04.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;Перезагружаем сервер&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Если не править реестр и просто поменять имя компьютера то служба Veeam Backup Service не запуститься, а при входе в консоль буде ошибка **Failed to connect to the Veeam Backup &amp;amp; Replication server: No connection could be made because the target machine actively refused it &lt;IP&gt;:9392**&lt;/IP&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/veeam/2020-10-29_11-01.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;p&gt;**Failed to connect to the Veeam Backup &amp;amp; Replication server: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение &lt;IP&gt;:9392**&lt;/IP&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 19 Oct 2020 18:11:39 +0600</pubDate>
        <link>http://www.tipoit.kz/veeam-rename-hostname</link>
        <guid isPermaLink="true">http://www.tipoit.kz/veeam-rename-hostname</guid>
        
        <category>veeam</category>
        
        <category>backups</category>
        
        
      </item>
    
      <item>
        <title>Nexus - разрешаем анонимный docker pull</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Разрешаем анонимный docker pull&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В настройках репозитория активируем галочку &lt;strong&gt;Allow anonymous docker pull&lt;/strong&gt; 
&lt;img src=&quot;/static/img/nexus/2020-10-19_12-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Редактируем realms&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В меню &lt;strong&gt;Security » Realms&lt;/strong&gt; добавляем в правую колонку &lt;strong&gt;Docker Bearer Token Realm&lt;/strong&gt;
&lt;img src=&quot;/static/img/nexus/2020-10-19_12-02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 19 Oct 2020 18:11:39 +0600</pubDate>
        <link>http://www.tipoit.kz/docker-pull-anonymous</link>
        <guid isPermaLink="true">http://www.tipoit.kz/docker-pull-anonymous</guid>
        
        <category>nexus</category>
        
        <category>docker</category>
        
        <category>images</category>
        
        
      </item>
    
      <item>
        <title>Установка splunk в Linux</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Установка splunk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Скачиваем rpm пакет с оф сайта &lt;a href=&quot;https://www.splunk.com/en_us/download/splunk-enterprise.html&quot;&gt;https://www.splunk.com/en_us/download/splunk-enterprise.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Устанавливаем скачанный пакет
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /splunk
rpm -i --prefix=/splunk/ splunk-8.0.6-152fb4b2bb96-linux-2.6-x86_64.rpm
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Запускаем splunk ( На запрос вбиваем логин и пароль пользователя splunk )
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bin/splunk start --accept-license
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Добавляем splunk в автозагрузку
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bin/splunk enable boot-start
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Настраиваем файервол
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8000/tcp --permanent
firewall-cmd --add-port=8089/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Логинимся через web интерфейс&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;По ссылке http://ip_addres:8000 будет доступна web панель splunk ( логин и пароль, тот что задавался в 3 пункте )&lt;/p&gt;
</description>
        <pubDate>Sun, 18 Oct 2020 23:11:39 +0600</pubDate>
        <link>http://www.tipoit.kz/splunk-installation</link>
        <guid isPermaLink="true">http://www.tipoit.kz/splunk-installation</guid>
        
        <category>splunkk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Nexus - HTTPS Error 404 - Not Found (Epel)</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;repodata/4a9c32abd5b55bf112a524470f9dbde81b4e0e04e06a7ec5e7d8d23d908f3200-primary.xml.gz: [Errno 14] HTTPS Error 404 - Not Found&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Время от времени в Nexus репозитории epel вылетают ошибки что не найден тот или иной файл для загрузки.&lt;/p&gt;

&lt;p&gt;Решение:&lt;/p&gt;

&lt;p&gt;Убрать галочку с &lt;strong&gt;Cache response for content not present in the proxied repositry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/nexus/2020-10-14_10-05.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 14 Oct 2020 15:46:39 +0600</pubDate>
        <link>http://www.tipoit.kz/nexus-epel-download-error</link>
        <guid isPermaLink="true">http://www.tipoit.kz/nexus-epel-download-error</guid>
        
        <category>nexus</category>
        
        <category>error</category>
        
        <category>updates</category>
        
        
      </item>
    
      <item>
        <title>Gitlab-runner - смена пользователя от которого запускается runner</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;По умолчанию запускается от gitlab-runner&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для смены пользователя придётся редактировать сервис gitlab-runner.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/systemd/system/gitlab-runner.service

ExecStart=/usr/bin/gitlab-runner &quot;run&quot; &quot;--working-directory&quot; &quot;/home/user_name&quot; &quot;--config&quot; &quot;/etc/gitlab-runner/config.toml&quot; &quot;--service&quot; &quot;gitlab-runner&quot; &quot;--syslog&quot; &quot;--user&quot; &quot;user_name&quot;

systemctl daemon-reload

systemctl restart gitlab-runner
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;где user_name - имя пользователя&lt;/p&gt;
</description>
        <pubDate>Wed, 14 Oct 2020 15:46:39 +0600</pubDate>
        <link>http://www.tipoit.kz/gitlab-runner-run-as</link>
        <guid isPermaLink="true">http://www.tipoit.kz/gitlab-runner-run-as</guid>
        
        <category>gitlab</category>
        
        <category>all</category>
        
        <category>ci/cd</category>
        
        <category>devops</category>
        
        
      </item>
    
      <item>
        <title>MSSql - Пустой вывод sys.master_files</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Пустой вывод при select * from sys.master_files&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Даём разрешения пользователю:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GRANT VIEW ANY DEFINITION TO [tuser]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 21 Jul 2020 22:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/msql-sysmaster_filesl</link>
        <guid isPermaLink="true">http://www.tipoit.kz/msql-sysmaster_filesl</guid>
        
        <category>mssql</category>
        
        <category>all</category>
        
        <category>databases</category>
        
        
      </item>
    
      <item>
        <title>MinIO - Установка и конфигурирование MinIO</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;MinIO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;MinIO – популярный открытый сервер хранилища объектов, совместимый с сервисом облачных хранилищ Amazon S3.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tipoit.kz/standalone-minio&quot;&gt;MinIO standalone mode&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Erasure Code&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В MinIO Erasure Code представляет математический алгоритм для восстановления отсутствующих или поврежденных данных.&lt;/p&gt;

&lt;p&gt;По умолчанию MinIO разделяет объекты на диски данных N / 2 и диски четности N / 2.&lt;/p&gt;

&lt;p&gt;Т.е с 12 дисками, когда сервер MinIO работает в конфигурации по умолчанию, вы можете потерять любой из шести дисков и при этом надежно восстановить данные с оставшихся дисков.&lt;/p&gt;

&lt;p&gt;На самом сайте его сравнивают с RAID и пишут что он лучше. Так как может выдержать падение половины дисков. На сайте они сравнивают его с RAID 6 и тут он конечно выигрывает. Но по сути то это и есть RAID 1 (зеркало).&lt;/p&gt;

&lt;p&gt;Реальное преимущество в том что Erasure Code работает на объектном уровне и восстанавливает один объект за раз, а не весь диск как в случае с RAID.&lt;/p&gt;

&lt;p&gt;MinIO разделяет предоставленные вами диски на группы Erasure Code от 4 до 16 дисков. Поэтому количество приводимых вами дисков должно быть кратным одному из этих чисел. Минимальное количество дисков, необходимых для распределенного MinIO, равно 4&lt;/p&gt;

&lt;p&gt;Набор дисков делится на 2 группы Erasure Code. Например, 18 дисков настроены как 2 группы по 9 накопителей, а 24 диска настроены как 2 группы по 12 накопителей.  Каждый объект записывается в одну группу Erasure Code.&lt;/p&gt;

&lt;p&gt;Размер дисков может различаться, но естественно лучше не добавлять диски меньшим размером чем другие.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Bit Rot защита&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Защита от порчи данных. MinIO использует высокоскоростные контрольные суммы HighwayHash для защиты от Bit Rot.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Высокая доступность&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Распределенная установка MinIO с m серверами и n дисками будет защищать ваши данные, пока m / 2 серверы или m * n / 2 или более дисков находятся в сети. При этом данные будут доступны для чтения, но для записи понадобиться  m / 2 + 1 серверов&lt;/p&gt;

&lt;p&gt;Например, 16-серверная распределенная установка с 200 дисками на узел будет продолжать обслуживать файлы, даже если до 8 серверов отключены в конфигурации по умолчанию, т. Е. Около 1600 дисков могут выйти из строя. MinIO продолжит обслуживание файлов. Но для создания новых объектов вам понадобится как минимум 9 серверов.&lt;/p&gt;

&lt;p&gt;MinIO даёт возможность использовать &lt;a href=&quot;https://github.com/minio/minio/tree/master/docs/erasure/storage-class&quot;&gt;классы хранения&lt;/a&gt;, чтобы установить пользовательское распределение четности для каждого объекта&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Добавляем разделы для MinIO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я создал 4 диска по 17GB ( рекомендовано создавать диски одного размера ).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/minio/minio-1.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Создаём разделы&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fdisk /dev/sdi
fdisk /dev/sdj
fdisk /dev/sdk
fdisk /dev/sdl
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Форматируем их в ext4&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkfs.ext4 /dev/sdi1
mkfs.ext4 /dev/sdj1
mkfs.ext4 /dev/sdk1
mkfs.ext4 /dev/sdl1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Создаём папки назначения&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /data1 /data2 /data3 /data4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Получаем UUID разделов&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;blkid /dev/sdi1
blkid /dev/sdj1
blkid /dev/sdk1
blkid /dev/sdl1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Редактируем /etc/fstab&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/fstab

	UUID=40f71a62c6f6 /data1                    ext4     defaults                            0 0
	UUID=9542fdd8bc84 /data2                    ext4     defaults                            0 0
	UUID=aa96ce00c2b6 /data3                    ext4     defaults                            0 0
	UUID=7f3de5487346 /data4                    ext4     defaults                            0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Монтируем разделы&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mount -a
df -h
	
	/dev/sdi1        17G   45M   16G   1% /data1
	/dev/sdj1        17G   45M   16G   1% /data2
	/dev/sdk1        17G   45M   16G   1% /data3
	/dev/sdl1        17G   45M   16G   1% /data4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Установка и конфигурирование MinIO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;useradd -r minio -s /sbin/nologin 
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
chown -R minio:minio /data1 /data2 /data3 /data4
mkdir /usr/share/minio &amp;amp;&amp;amp; cd /usr/share/minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
chown -R minio:minio /usr/share/minio
./minio server /data{1...4}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Заходим на &lt;a href=&quot;http://127,0,0,1:9000&quot;&gt;http://127.0.0.1:9000&lt;/a&gt; (minioadmin/minioadmin)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Использование tls&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По умолчанию каталог с сертификатами находится по пути ${HOME}/.minio/certs, но есть возможность указать другой с помощью –certs-dir. Приватный ключ должен иметь имя private.key, публичный public.crt. Публичный сертификат также должен содержать промежуточные сертификаты.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /etc/ssl/certs/minio
cp public.crt /etc/ssl/certs/minio/public.crt
cp private.key /etc/ssl/certs/minio/private.key

./minio server /data{1...4} --certs-dir /etc/ssl/certs/minio/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Заходим на &lt;a href=&quot;https://mydomain.lan/&quot;&gt;https://mydomain.lan:9000/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Я попробовал залить файл размером 4мб и в итоге получил куски по 2мб на каждом из дисков. 2 файла составляют залитый файл и 2 файла копия ( по сути объектный RAID 1 ).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пользователи&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В MinIO учетные данные администратора или корневые учетные данные могут быть изменены только с использованием переменных, а именно MINIO_ACCESS_KEY и MINIO_SECRET_KEY. Используя комбинацию этих двух значений, MinIO шифрует конфигурацию, хранящуюся в серверной части.э&lt;/p&gt;

&lt;p&gt;Пример смены пароля:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;export MINIO_ACCESS_KEY=newminio
export MINIO_SECRET_KEY=newminio123
export MINIO_ACCESS_KEY_OLD=minio
export MINIO_SECRET_KEY_OLD=minio123
./minio server /data
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Запуск как сервиса systemd&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /usr/lib/systemd/system/minio.service

	[Unit]
	Description=MinIO test cluster
	DefaultDependencies=no
	Wants=network.target # network is required
	After=network.target

	[Service]
	WorkingDirectory=/usr/share/minio
	ExecStart=./minio server /data{1...4} --certs-dir $certs_path
	Restart=always
	RestartSec=10
	SyslogIdentifier=minio.service
	User=minio
	Group=minio
	# Specifies the maximum file descriptor number that can be opened by this process
	LimitNOFILE=65536
	# Disable timeout logic and wait until process is stopped
	TimeoutStopSec=infinity
	SendSIGKILL=no

	Environment=certs_path=/etc/ssl/certs/minio/
	Environment=MINIO_ACCESS_KEY=minioadmin
	Environment=MINIO_SECRET_KEY=minioadmin2

	[Install]
	WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable minio
systemctl start minio
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Управление пользователями&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#добавить пользователя
mc admin user add minio readeronly password123

#список пользователей
mc admin user list minio

#добавить группу
mc admin group add minio readergroup readeronly

#список групп
mc admin group list minio

#назначить политику для группы (writeonly, readonly или readwrite)
mc admin policy set minio/* readonly group=readergroup 

#отключить пользователя
mc admin user disable minio readeronly

#удалить пользователя
mc admin user remove minio readeronly

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;При readonly в браузере вы ничего не увидите. Работать будет только через:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mc cat minio/2020/test.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Тестирование&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;При &lt;code class=&quot;highlighter-rouge&quot;&gt;umount /data1&lt;/code&gt; сервис понял что пропал диск и в логах выдал:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;DeploymentID: af2fbe1c-ec71-4f6f-bca8-c3a484f3e11d
minio.service[9152]: Error: open /data3/.writable-check-150748cd27ff66de.tmp: permission denied
minio.service[9152]: endpoint=/data3
minio.service[9152]: 2: github.com/minio/minio@/cmd/prepare-storage.go:57:cmd.glob..func5.1()
minio.service[9152]: 1: github.com/minio/minio@/cmd/erasure-sets.go:207:cmd.(*erasureSets).connectDisks.func1()
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Т.е из лога понятно что сервис пытается время от времени создать файл ( каждые 10 секунд ) &lt;code class=&quot;highlighter-rouge&quot;&gt;/data3/.writable-check-150748cd27ff66de.tmp&lt;/code&gt; и если не получается выдаёт ошибки.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;./mc admin info minio&lt;/code&gt; показало &lt;strong&gt;3 drives online, 1 drive offline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;./mc cp /tmp/test.1 minio/2020/test.4&lt;/code&gt; отработал нормально&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;./mc stat minio/2020/&lt;/code&gt; вывел файлы&lt;/p&gt;

&lt;p&gt;Заметил странное поведение в web версии, там при частом обновлении страницы попадаешь на &lt;strong&gt;We encountered an internal error, please try again.&lt;/strong&gt;.&lt;br /&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;mc stat&lt;/code&gt; отрабатывает отлично&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;!!! Очень важно&lt;/strong&gt;
Синхронизация файлов не сработала сама после &lt;code class=&quot;highlighter-rouge&quot;&gt;mount /data1&lt;/code&gt;. Т.е на разделе /data1 было на один файл меньше, чем на всех остальных. Чтобы синхронизация / rebuild прошла запускаем &lt;code class=&quot;highlighter-rouge&quot;&gt;./mc admin heal --recursive minio&lt;/code&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;При umount /dev/sdk1  /dev/sdi1 /dev/sdj1 mc не смог подключиться. Web ответил &lt;strong&gt;We encountered an internal error, please try again.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;./mc cp /tmp/test.1 minio/2020/test.1&lt;/code&gt; не сработало. При этом сам запрос висел, не убивался
&lt;code class=&quot;highlighter-rouge&quot;&gt;./mc stat minio/2020/&lt;/code&gt; выводит файлы&lt;/p&gt;

&lt;p&gt;После mount всё заработало. Зависший copy отработал тоже ( меня хватило на 5 минут ожидания ).&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Когда место кончается на диске получаем &lt;strong&gt;Error: Storage resources are insufficient for the write operation.&lt;/strong&gt;
 Место нужно добавлять на всех дисках, на которых оно закончилось.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Распределенный MinIO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;По сути всё тоже самое, только команда будет вида &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/share/minio/minio server https://minio.lan:9000/data{1...4} https://minio-2.lan:9000/data{1...4}&lt;/code&gt; на обоих серверах.&lt;/p&gt;

&lt;p&gt;Важно чтобы логин и пароль от MinIO совпадали на обоих серверах, чтобы кол-во дисков и их размеры были одинаковы.&lt;/p&gt;

&lt;p&gt;Нужно помнить что Write quorum &lt;a href=&quot;https://docs.minio.io/docs/minio-server-limits-per-tenant&quot;&gt;N/2+1&lt;/a&gt;. Т.е если из 2 нод одна упала, то у вас будет только нода для чтения.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Плюсы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Защита от дурака присутствует, т.е при попытке удаления /data4 Device or resource busy. Даже при выключенном сервисе&lt;/p&gt;

&lt;p&gt;Используя &lt;code class=&quot;highlighter-rouge&quot;&gt;--address :9001&lt;/code&gt; можно запустить несколько экземпляров с разными портами на одном сервере ( разделы дисков естественно должны быть разные, или папки )&lt;/p&gt;

&lt;p&gt;Возможность отправлять логи об операциях с файлами. Причем систем для принятия логов поддерживается куча ( &lt;a href=&quot;https://docs.min.io/docs/minio-bucket-notification-guide.html&quot;&gt;elk, postgresql и т.д&lt;/a&gt; )&lt;/p&gt;

&lt;p&gt;Можно настроить автоматическое удаление объектов через указанное количество дней или указанную дату. ( &lt;a href=&quot;https://docs.min.io/docs/minio-bucket-lifecycle-guide.html&quot;&gt;Bucket Lifecycle&lt;/a&gt; )&lt;/p&gt;

&lt;p&gt;Возможность подключить &lt;a href=&quot;https://docs.min.io/docs/minio-disk-cache-guide.html&quot;&gt;cache&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Недостатки&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Umount отрабатывает.&lt;/p&gt;

&lt;p&gt;Непонятно почему нельзя было сделать автоматический heal. Можно запустить на любой ноде.&lt;/p&gt;

&lt;p&gt;Если удалять файл при unmount какого-то диска, то на отключенном останется кусок файла. И после mount команда &lt;code class=&quot;highlighter-rouge&quot;&gt;./mc admin heal --recursive minio&lt;/code&gt; ничего не изменит&lt;/p&gt;

&lt;p&gt;Наверное было бы хорошо иметь возможность выставлять Write quorum 1. Хотя понять разработчиков можно, так все начнут выставлять в 1 и терять данные. В идеале 4 ноды по 4 диска. Минимальный кластер считаю 3 ноды по 2 диска или 4 ноды по 1 диску.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ограничения&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я не уверен что кто-то в них упрётся, но можно &lt;a href=&quot;https://docs.minio.io/docs/minio-server-limits-per-tenant.html&quot;&gt;почитать&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;MinIO client&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc config host add minio https://minio.lan:9000 minioadmin minioadmin2	#добавить узел
./mc admin info minio	#вывод информации
./mc admin heal minio	#восстановление
./mc ls minio/2020	#просмотр содержимого backet
./mc mb minio/newbucket	#backet create
./mc rb minio/newbucket	#backet delete
./mc stat minio/2020/  #инфо о файлах
./mc cp /tmp/test.1 minio/2020/test.1	#скопировать файл
./mc cat minio/2020/test.1	#вывод файла
./mc admin config set minio #получить все параметры конфигурации
./mc admin config set minio compression --env #получить ве параметры конфигурации compression в виде переменных
export MINIO_BROWSER=off #отключит web
mc admin service restart minio #перезагрузка кластера
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Видео&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/1mcdnGZpXUI&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/wFqJfM9A9ns&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/AZ2yPnAVA4o&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Tue, 21 Jul 2020 18:27:39 +0600</pubDate>
        <link>http://www.tipoit.kz/minio-install</link>
        <guid isPermaLink="true">http://www.tipoit.kz/minio-install</guid>
        
        <category>linux</category>
        
        <category>minio</category>
        
        <category>storage</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu 19.10 - Отключить автоматическое обновление</title>
        <description>&lt;p&gt;В целом автоматическое обновление это хорошо. Своевременные закрытия каких-то уязвимостей, багов.&lt;/p&gt;

&lt;p&gt;Но в моём случае автоматическое обновление залочило apt. Сам процесс висел около 3 дней.&lt;/p&gt;

&lt;p&gt;В общем я решил просто отключить автоматическое обновление, так как после этого еще и обычный ребут не работал. А если это серверный продукт, то как-то не очень приятно получать такую ситуацию.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Отключить автоматическое обновление из командной строки&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo vim /etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Update-Package-Lists &quot;0&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 08 Jul 2020 18:21:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ubuntu-disable-autoupdate</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ubuntu-disable-autoupdate</guid>
        
        <category>ubuntu</category>
        
        <category>linux</category>
        
        <category>all</category>
        
        <category>updates</category>
        
        
      </item>
    
      <item>
        <title>Проверка tls, ssl версий на сайте</title>
        <description>&lt;p&gt;Иногда бывает нужно проверить какие протоколы поддерживает веб-сайт. 
Сохраню тут, ибо использую не часто и бывает забываю.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Для Linux&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;openssl s_client -connect mysite.com:443 -ssl3
openssl s_client -connect mysite.com:443 -tls1
openssl s_client -connect mysite.com:443 -tls1_1
openssl s_client -connect mysite.com:443 -tls1_2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Для Windows (Powershell)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[Net.ServicePointManager]::SecurityProtocol 
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls11
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest https://mysite.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 19 Jun 2020 16:30:39 +0600</pubDate>
        <link>http://www.tipoit.kz/check-site-tls-version</link>
        <guid isPermaLink="true">http://www.tipoit.kz/check-site-tls-version</guid>
        
        <category>all</category>
        
        <category>security</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>SSLyze - Библиотека сканирования SSL / TLS</title>
        <description>&lt;p&gt;Позволяет анализировать конфигурацию SSL / TLS сервера, подключаясь к нему. Обнаруживает различные проблемы (плохой сертификат, слабые комплекты шифров, Heartbleed, ROBOT, поддержка TLS 1.3 и т. д.).&lt;/p&gt;

&lt;p&gt;github: &lt;a href=&quot;https://github.com/nabla-c0d3/sslyze/releases&quot;&gt;url&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;offsite: &lt;a href=&quot;https://nabla-c0d3.github.io/sslyze/documentation/&quot;&gt;url&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Примеры&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;python -m sslyze –regular www.yahoo.com:443 www.google.com “[2607:f8b0:400a:807::2004]:443”&lt;/p&gt;

&lt;p&gt;sslyze.exe  –regular www.yahoo.com&lt;/p&gt;
</description>
        <pubDate>Fri, 19 Jun 2020 16:30:39 +0600</pubDate>
        <link>http://www.tipoit.kz/sslyze-scan-ssl-tls</link>
        <guid isPermaLink="true">http://www.tipoit.kz/sslyze-scan-ssl-tls</guid>
        
        <category>programs</category>
        
        <category>security</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Huawei 2288H V5 - Настройка RAID</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Загрузка в режиме Smart Provisioning&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При старте сервера нажимаем F6 и ждём пока загрузится (тот момент когда предоставляется возможность выбора что загрузить: BIOS, SP …).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка RAID&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;Выбираем RAID config&lt;/li&gt;
  &lt;li&gt;Нажимаем Edit и отключаем JBOD&lt;/li&gt;
  &lt;li&gt;Нажимаем Create RAID&lt;/li&gt;
  &lt;li&gt;Выбираем сами диски, тип Raid&lt;/li&gt;
  &lt;li&gt;Жмём OK&lt;/li&gt;
  &lt;li&gt;Выходим на главную или закрываем вовсе Smart Provisioning&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 01 Jun 2020 20:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/huawei-2288h-raid-configure</link>
        <guid isPermaLink="true">http://www.tipoit.kz/huawei-2288h-raid-configure</guid>
        
        <category>hardware</category>
        
        <category>huawei</category>
        
        <category>all</category>
        
        <category>raid</category>
        
        
      </item>
    
      <item>
        <title>Huawei 2288H V5 - Установка ESXI</title>
        <description>&lt;p&gt;Установка осуществляется через IBMC ( удаленное управление сервером MGMT ).
Если не настроено, советую это сделать. Вообще любая настройка сервера начинается с настройки IBMC, ILO, IDRAC и т.д.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Конфигурация BIOS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;На офсайте &lt;a href=&quot;https://support.huawei.com/enterprise/en/doc/EDOC1100002435?section=j005&quot;&gt;HUAWEI&lt;/a&gt; рекомендуют включить следующие опции в BIOS:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Hyper-Threading[ALL] - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monitor/Mwait[1] - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;VMX - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PCIe SR-IOV - Enabled&lt;/strong&gt; (Advanced &amp;gt; Peripheral Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Intel VT for Direct I/O(VT-d)&lt;/strong&gt; - Enabled (Advanced &amp;gt; IIO configuration &amp;gt; Intel(R) VT for Directed I/O)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interrupt Remapping - Enabled&lt;/strong&gt; (Advanced &amp;gt; IIO configuration &amp;gt; Intel(R) VT for Directed I/O)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PCI 64-Bit Resource Allocation - Enabled&lt;/strong&gt; (Advanced &amp;gt; IIO configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hardware Prefetcher - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Adjacent Cache Prefetch - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DCU Streamer Prefetcher - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DCU IP Prefetcher - Enabled&lt;/strong&gt; (Advanced &amp;gt; Socket Configuration &amp;gt; Processor Configuration)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Загрузка в режиме Smart Provisioning&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При старте сервера нажимаем F6 и ждём пока загрузится (тот момент когда предоставляется возможность выбора что загрузить: BIOS, SP …).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка RAID&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Про настройку RAID можно почитать &lt;a href=&quot;https://www.tipoit.kz/huawei-2288h-raid-configure&quot;&gt;тут&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Монтирование образа ESXI&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В консоли IBMC ( remote console ) выбираем CD/DVD и монтируем image с ESXI.
ibmc-1.PNG&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Установка ESXI&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В главном меню Smart Provisioning выбираем Deploy OS:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В зависимости то желания выбираем &lt;strong&gt;Installation Mode&lt;/strong&gt;
    Recomended Mode - сам ставит и настраивает ESXI. Задаётся root пароль, диск для установки и ключ
    Customized Mode - настройка ESXI саморучно&lt;/li&gt;
  &lt;li&gt;Выбираем esxi версию в &lt;strong&gt;Select OS and Version&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Выбираем &lt;strong&gt;Boot Type&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Жмём next (На запрос о установки прошивок жмём Confirm)&lt;/li&gt;
  &lt;li&gt;Выбираем диск для установки&lt;/li&gt;
  &lt;li&gt;Просто жмём next, next ( если выбрано Recomended Mode то надо будет ввести пароль для root )&lt;/li&gt;
  &lt;li&gt;В итоге должен установится ESXI&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка ESXI&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если выбран &lt;strong&gt;Customized Mode&lt;/strong&gt; то после установки нужно будет также его (ESXI) настроить/установить как в обычном режиме установки ESXI&lt;/p&gt;

&lt;p&gt;Ссылка на мануал &lt;a href=&quot;https://support.huawei.com/enterprise/en/doc/EDOC1100034052/2c4609a1/installing-an-os#EN-US_TOPIC_0235818349&quot;&gt;HUAWEI&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Jun 2020 20:00:39 +0600</pubDate>
        <link>http://www.tipoit.kz/huawei-2288h-install-esxi</link>
        <guid isPermaLink="true">http://www.tipoit.kz/huawei-2288h-install-esxi</guid>
        
        <category>hardware</category>
        
        <category>huawei</category>
        
        <category>esxi</category>
        
        <category>virtualization</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu 19.10 - Установка PostgreSQL 11</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Добавляем репозиторий&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo &quot;deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main&quot; |sudo tee  /etc/apt/sources.list.d/pgdg.list
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ставим  postgresql-11&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt-get install postgresql-11 postgresql-server-dev-11
ufw allow 5432
ps axfww | grep postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Если хотим установить в отдельную директорию&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir /pg
chown postgres:postgres /pg

su - postgres
/usr/lib/postgresql/11/bin/initdb -D /nvme/pg_database11
vim /etc/postgresql/11/main/postgresql.conf

data_directory='/pg'
hba_file='/pg/pg_hba.conf'
ident_file='/pg/pg_ident.conf'
listen_address='192.192.192.192'

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Перезапускаем postgresql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl restart postgresql
ps axfww | grep postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Меняем пароль пользователя postgres&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;su - postgres
psql
alter user postgres with encrypted password 'password';
\q
exit
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Ставим postgis (Если нужно)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt install postgresql-11-postgis-2.5
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 01 Jun 2020 18:20:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ubuntu-install-postgresql</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ubuntu-install-postgresql</guid>
        
        <category>ubuntu</category>
        
        <category>linux</category>
        
        <category>all</category>
        
        <category>postgresql</category>
        
        <category>databases</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu 19.10 - Установка .NET Core SDK</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Добавляем репозиторий&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://packages.microsoft.com/config/ubuntu/19.10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb 
sudo dpkg -i packages-microsoft-prod.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ставим  .NET Core SDK&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ставим ASP.NET Core runtime&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install aspnetcore-runtime-3.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ставим  .NET Core runtime&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-runtime-3.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;В принцепе всё понятно расписано на самом сайте MS &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-ubuntu-1910&quot;&gt;https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-ubuntu-1910&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Jun 2020 18:06:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ubuntu-install-dotnet-core</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ubuntu-install-dotnet-core</guid>
        
        <category>ubuntu</category>
        
        <category>linux</category>
        
        <category>dotnet</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu - Добавить доверенный корневой сертификат</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/9Wfv5lB8q6Y&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;первый-способ&quot;&gt;Первый способ&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Просто копируем сертификаты в директорию &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/local/share/ca-certificates&lt;/code&gt; и выполняем &lt;code class=&quot;highlighter-rouge&quot;&gt;update-ca-certificates&lt;/code&gt;. Заметьте, что сертификат должен быть с расширением &lt;code class=&quot;highlighter-rouge&quot;&gt;crt&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cp /tmp/11111.cer /usr/local/share/ca-certificates/11111.crt
update-ca-certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если нужно удалить сертификат:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;rm /usr/local/share/ca-certificates/11111.crt
update-ca-certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;ещё-один-способ&quot;&gt;Ещё один способ&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo mkdir /usr/share/ca-certificates/extra
sudo cp my.crt /usr/share/ca-certificates/extra/my.crt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Если сертификат не в crt, возможно потребуется конвертировать:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;openssl x509 -in my.pem -inform PEM -out my.crt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Добавляем сертификат, редактируя файл ca-certificates.com.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/ca-certificates.com&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;exta/my.crt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;update-ca-certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Можно также воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;dkpg-reconfigure ca-certificates&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Если надо удалить:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vim /etc/ca-certificates.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;
		&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;!exta/my.crt&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;update-ca-certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Можно также воспользоваться &lt;code class=&quot;highlighter-rouge&quot;&gt;dkpg-reconfigure ca-certificates&lt;/code&gt; (убрать галочки на ненужных)&lt;/p&gt;
</description>
        <pubDate>Thu, 14 May 2020 19:45:39 +0600</pubDate>
        <link>http://www.tipoit.kz/ubuntu-install-ca-crtificate</link>
        <guid isPermaLink="true">http://www.tipoit.kz/ubuntu-install-ca-crtificate</guid>
        
        <category>ubuntu</category>
        
        <category>linux</category>
        
        <category>all</category>
        
        <category>certificates</category>
        
        
      </item>
    
      <item>
        <title>Vault - Распечатывание (unseal)</title>
        <description>&lt;p&gt;По умолчанию vault находится в запечатанном состоянии после перезагрузки сервера. Единственные возможные операции - распечатать хранилище и проверить состояние распечатывания.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Проверка статуса vault&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если в выводе команды &lt;code class=&quot;highlighter-rouge&quot;&gt;vault status&lt;/code&gt; видите &lt;strong&gt;Sealed true&lt;/strong&gt;, то значит vault находится в запечатанном состоянии.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Распечатываем vault&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При старте сервера в первый раз он выдал Unseal Key (в моём случае достаточно 3 из 5). Их естественно нужно было сохранить (о чем указанно в мануале по установке vault).
Для распечатывания:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Вводим команду &lt;code class=&quot;highlighter-rouge&quot;&gt;vault operator unseal&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Вводим сам &lt;strong&gt;unseal key&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Повторяем процедуру с другими ключами, пока не добъёмся &lt;strong&gt;Unseal Progress 3/3&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Проверяем vault&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если в выводе команды &lt;code class=&quot;highlighter-rouge&quot;&gt;vault status&lt;/code&gt; видите &lt;strong&gt;Sealed false&lt;/strong&gt;, то значит vault находится в распечатанном / рабочем состоянии.&lt;/p&gt;
</description>
        <pubDate>Tue, 12 May 2020 02:16:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vault-unseal</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vault-unseal</guid>
        
        <category>vault</category>
        
        <category>all</category>
        
        <category>secret</category>
        
        
      </item>
    
      <item>
        <title>Kaspersky - Bug при установке компонентов управления для виртуальных сред 5.1</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Всё установилось удачно, но в консоли KSC нет ни политик, ни плагинов для виртуальных сред 5.1&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После установки видим окно об удачной установке компонентов управления.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/kaspersky/kasp-1.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Но в консоли KSC ничего не появляется никаких плагинов для виртуальных сред 5.1.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пробуем установить заново компоненты управления&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот тут уже установка проходит с ошибкой. Программа установки говорит нам что можно порыскать в temp папке и почитать кучу непонятных для обычного человека логов установки.&lt;/p&gt;

&lt;p&gt;Но всё же я нашёл один интересный лог файл dd_vcredist_x86_20200507232126 со строкой Error 0x80070666: Cannot install a product when a newer version is installed.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Устраняем проблему&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Собственно насколько я понял Kaspersky для виртуальных сред 5.1 использует Microsoft Visual C++ 2015. И наш установщик не может установить Microsoft Visual C++ 2015, потому что уже в системе стоит более новая версия.&lt;/p&gt;

&lt;p&gt;Удаляем новые версии Microsoft Visual C++ и запускаем установку компонентов для виртуальных сред 5.1 заново. После успешной установки в консоли KSC наконец видим плагины.&lt;/p&gt;

&lt;p&gt;Более правильным вариантом будет установить Microsoft Visual C++ 2015, вместо удаления новых версий.&lt;/p&gt;
</description>
        <pubDate>Sat, 09 May 2020 19:26:39 +0600</pubDate>
        <link>http://www.tipoit.kz/kaspersky-for-virtualization-5-1-components</link>
        <guid isPermaLink="true">http://www.tipoit.kz/kaspersky-for-virtualization-5-1-components</guid>
        
        <category>kaspersky</category>
        
        <category>bug</category>
        
        
      </item>
    
      <item>
        <title>Splunk - Включаем https</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Редактируем файл web.conf&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;vim /splunk/etc/system/local/web.conf&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; [settings]
 enableSplunkWebSSL = 1
 privKeyPath = /path_to_private_key/key.key
 serverCert = /path_to_crt/crt..crt
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Перезагружаем Splunk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;/splunk/bin/splunk restart&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Проверяем доступность&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;curl https://mysplunk.local.lan:8000&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 15 Apr 2020 19:26:39 +0600</pubDate>
        <link>http://www.tipoit.kz/Splunk-enable-ssl(https)</link>
        <guid isPermaLink="true">http://www.tipoit.kz/Splunk-enable-ssl(https)</guid>
        
        <category>splunk</category>
        
        <category>monitoring</category>
        
        
      </item>
    
      <item>
        <title>Docker - Перенос на другой диск</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Останавливаем Docker&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;systemctl stop docker&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Копируем существующие контейнеры, образы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;rsync -aP –sparse /var/lib/docker/ /docker/&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Добавляем новую директорию в конфиг&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;vim /etc/docker/daemon.json&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;graph&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/docker&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Запускаем docker&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;systemctl start docker&lt;/li&gt;
  &lt;li&gt;docker images&lt;/li&gt;
  &lt;li&gt;docker ps -a&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Удаляем старую папку&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как убедились что всё работает можно удалять старую папку:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;rm -rf /var/lib/docker&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 15 Apr 2020 19:26:39 +0600</pubDate>
        <link>http://www.tipoit.kz/Docker-move-to-another=volume</link>
        <guid isPermaLink="true">http://www.tipoit.kz/Docker-move-to-another=volume</guid>
        
        <category>docker</category>
        
        <category>all</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - The OVF package is invalid and cannot be deployed</title>
        <description>&lt;blockquote&gt;
  &lt;h2 id=&quot;vcenter---the-ovf-package-is-invalid-and-cannot-be-deployed&quot;&gt;Vcenter - The OVF package is invalid and cannot be deployed.&lt;/h2&gt;
  &lt;p&gt;The following manifest file entry (line 1) is invalid: SHA256 (xxxxxxx.ovf).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Может возникнуть если пытаться сделать deploy на более старом vcenter, чем был у template когда создавали.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Скачиваем ovftool&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Идём по &lt;a href=&quot;https://code.vmware.com/web/tool/4.4.0/ovf&quot;&gt;ссылке&lt;/a&gt; и скачиваем ovftool&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Преобразование OVA из алгоритма хеширования SHA256 в SHA1&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;cd “C:\Program Files\VMware\VMware OVF Tool”&lt;/li&gt;
  &lt;li&gt;ovftool.exe –shaAlgorithm=SHA1 /path/to/the/original/ova_file.ova /path/to/the/new/ova/file-SHA1.ova&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Делаем Deploy OVF Template&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После всего проделанного делаем deploy.&lt;/p&gt;

</description>
        <pubDate>Wed, 15 Apr 2020 19:26:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-The-OVF-package-is-invalid-and-cannot-be-deployed.</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-The-OVF-package-is-invalid-and-cannot-be-deployed.</guid>
        
        <category>vcenter</category>
        
        <category>error</category>
        
        <category>virtualization</category>
        
        
      </item>
    
      <item>
        <title>Vcenter - Failed to export ovf package vcenter 6.5</title>
        <description>&lt;p&gt;Может быть что при попытке экспорта ovf template вылезет ошибка failed to e
xport ovf package vcenter 6.5, при этом никакого вразумительного лога может и не быть (как в моём случае).&lt;/p&gt;

&lt;p&gt;Лучший способ это зайти напрямую на хост ESXI через web либо esxi client и уже оттуда попробовать сделать export. Как минимум возможно получите нормальную информативную ошибку.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;В моём случае экспорт не мог произойти из-за адаптера сети, который не был прикреплен ни к одной из сетей&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Apr 2020 18:36:39 +0600</pubDate>
        <link>http://www.tipoit.kz/vcenter-failed-to-export-ovf-package</link>
        <guid isPermaLink="true">http://www.tipoit.kz/vcenter-failed-to-export-ovf-package</guid>
        
        <category>vcenter</category>
        
        <category>all</category>
        
        <category>virtualization</category>
        
        
      </item>
    
      <item>
        <title>RabbitMQ - Установка на CentOS 7</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Установка Erlang&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавляем репозиторий Erlang и открытый ключ для проверки подписанного пакета:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rpm -Uvh erlang-solutions-2.0-1.noarch.rpm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Проверяем доступные версии:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;yum list available erlang --showduplicates&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ставим erlang:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;yum install -y erlang-22.3.1-1.el7&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Установка RabbitMQ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавляем репозиторий RabbitMQ и открытый ключ для проверки подписанного пакета:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;vim /etc/yum.repos.d/rabbit-mq.repo&lt;/code&gt;&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; [bintray-rabbitmq-server]
 name=bintray-rabbitmq-rpm
 baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
 gpgcheck=0
 repo_gpgcheck=0
 enabled=1
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Проверяем доступные версии RabbitMQ:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;yum list available rabbitmq-server --showduplicates&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ставим RabbitMQ:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;yum install -y rabbitmq-server-3.8.3-1.el7&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;systemctl start rabbitmq-server.service&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;systemctl enable rabbitmq-server.service&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Включаем консоль управления RabbitMQ (Веб панель)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rabbitmq-plugins enable rabbitmq_management&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Добавляем пользователя / администратора RabbitMQ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rabbitmqctl add_user mqadmin adminpwd&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rabbitmqctl set_user_tags mqadmin administrator&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rabbitmqctl set_permissions -p / mqadmin &quot;.*&quot; &quot;.*&quot; &quot;.*&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Изменение настроек ротаций логов RabbitMQ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;vim /etc/logrotate.d/rabbitmq-server&lt;/code&gt;&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; /var/log/rabbitmq/*.log {
     daily    (может быть daily, weekly, monthly)
     missingok
     rotate 20 	(максимальное кол-во файлов)
     size 50M 	(минимальный размер для ротации)
     compress
     notifempty
 }
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Настройка файервола&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Добавляем исключения для файервола:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp  --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp --add-port=80/tcp&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;firewall-cmd --reload&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Вход в веб панель&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После всего проделанного переходим в браузере по URL http://myip:15672/.&lt;/p&gt;

&lt;p&gt;Вбиваем логин и пароль что создавали выше и попадаем в Веб консоль RabbitMQ.&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Apr 2020 04:36:39 +0600</pubDate>
        <link>http://www.tipoit.kz/centos-install-rabbitmq</link>
        <guid isPermaLink="true">http://www.tipoit.kz/centos-install-rabbitmq</guid>
        
        <category>rabbitmq</category>
        
        <category>centos</category>
        
        
      </item>
    
      <item>
        <title>Squid - Режем ютубчик</title>
        <description>&lt;p&gt;Эх кто-же не любит посмотреть youtube сидя на работе. Но как говорится канал не резиновый, особенно во время карантина и удаленной работы (vpn, все дела). 
Для большего понимания как работает шейпинг в squid рекомендую прочесть &lt;a href=&quot;http://www.tipoit.kz/squid-channel-shape&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Режем ютубчик&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#видео youtube подгружает с googlevideo
acl youtube dstdomain .googlevideo.com

delay_pools 1
delay_class 1 1
delay_access 1 allow youtube
delay_access 4 deny all

delay_parameters 1 212000/212000
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;!!! Если уже режете канал с помощью пулов не забудьте в delay_access добавить !youtube.&lt;/code&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Apr 2020 03:36:39 +0600</pubDate>
        <link>http://www.tipoit.kz/squid-youtube-shaping</link>
        <guid isPermaLink="true">http://www.tipoit.kz/squid-youtube-shaping</guid>
        
        <category>squid</category>
        
        <category>proxy</category>
        
        
      </item>
    
      <item>
        <title>Squid - Ограничение полосы пропускания (скорость клиентов)</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Squid пулы&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для ограничения в Squid используется механизм пулов. Собственно каждый пул имеет свои настройки (ограничения). Для упрощенного понимания можно назвать пул этакой группой, имеющей свои хосты и свою скорость.
Настройки применимые к пулу:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;размер пула (задается в байтах, -1/-1 - нет ограничения)&lt;/li&gt;
  &lt;li&gt;скорость заполнения (задается в байтах, -1/-1 - нет ограничения)
Любой объект ( web ресурс, скачка файла, медиа контент ), запрошенный клиентом сначала помещается в пул, а затем выдаётся клиенту.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Пример&lt;/strong&gt;: delay_parameters 1 -1/-1 ( &lt;code class=&quot;highlighter-rouge&quot;&gt;delay_parameters    id пула    размер пула/скорость заполнения&lt;/code&gt; )&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Squid классификация пулов&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Всего три вида:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;1 - ограничивается общая скорость загрузки ( скорость для всех )&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; #размещаем доступ в интернет
 http_access allow all
 #кол-во пулов
 delay_pools 1
 #выбираем класс для пула номер 1
 delay_class 1 1
 #прикрепляем all к пулу номер 1
 delay_access 1 allow all
 #выставляем скорость для всех (512 kbits = 64 kbytes = 64000  bytes per second) 
 delay_parameters 1 64000/64000   
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;2 - ограничивается общая скорость загрузки и скорость каждого хоста&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; #список доступа
 acl host-0 src 192.168.0.1/32
 #размещаем доступ в интернет
 http_access allow host-0    
 #кол-во пулов
 delay_pools 1   
 #выбираем класс для пула номер 1
 delay_class 1 2 
 #прикрепляем host-0 к пулу номер 1
 delay_access 1 allow host-0  
 #для хоста номер 1 512 kbits, для всех остальных без лимит (512 kbits = 64 kbytes = 64000  bytes per second) 
 delay_parameters 1 -1/-1 64000/64000  
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;3 - ограничивается общая скорость загрузки, скорость подсети и скорость каждого хоста&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; #список доступа
 acl local-0 src 192.168.0.0/24
 acl host-0 src 192.168.0.1/32 
 #размещаем доступ в интернет
 http_access allow local-0  host-0 
 #кол-во пулов
 delay_pools 1    
 #выбираем класс для пула номер 1
 delay_class 1 3  
 #прикрепляем local-0 и host-0 к пулу номер 1
 delay_access 1 allow local-0  
 delay_access 1 allow host-0
 #для всех без лимит, для пула номер 1 512 kbits, для хоста номер 1 256 kbits, (512 kbits = 64 kbytes = 64000  bytes per second) 
 delay_parameters 1 -1/-1 64000/64000 32000/32000   
&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Fri, 10 Apr 2020 03:36:39 +0600</pubDate>
        <link>http://www.tipoit.kz/squid-channel-shape</link>
        <guid isPermaLink="true">http://www.tipoit.kz/squid-channel-shape</guid>
        
        <category>squid</category>
        
        <category>proxy</category>
        
        
      </item>
    
      <item>
        <title>Splunk - Создание input (app)</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Создание input (app)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Идём &lt;code class=&quot;highlighter-rouge&quot;&gt;Settings -&amp;gt; Data inputs&lt;/code&gt; и в зависимости от задачи выбираем input type жмём Add new. В моём случае это &lt;code class=&quot;highlighter-rouge&quot;&gt;Forwarded inputs -&amp;gt; Scripts -&amp;gt; Add new&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Далее выбираем &lt;code class=&quot;highlighter-rouge&quot;&gt;Server Class ( по сути просто группировка клиентов )&lt;/code&gt;, или создаём новый.&lt;/li&gt;
  &lt;li&gt;&lt;img src=&quot;/static/img/splunk/splunk-app-1.PNG&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Next&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В поле &lt;strong&gt;Script Path&lt;/strong&gt; выбираем путь к скрипту ( это путь на сомом сервере splunk )&lt;/li&gt;
  &lt;li&gt;В поле &lt;strong&gt;Command&lt;/strong&gt; имя скрипта&lt;/li&gt;
  &lt;li&gt;В поле &lt;strong&gt;Interval&lt;/strong&gt; время выполнения скрипта ( будет повторятся по timeout )&lt;/li&gt;
  &lt;li&gt;В поле &lt;strong&gt;Source name override&lt;/strong&gt; можно заменить поле source, которое будет выводится уже в search&lt;/li&gt;
  &lt;li&gt;&lt;img src=&quot;/static/img/splunk/splunk-app-2.PNG&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Next&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В поле &lt;strong&gt;Source type&lt;/strong&gt; ( удобно для сортировки событий, что то на подобии категории ) выбираем существующий либо создаём новый&lt;/li&gt;
  &lt;li&gt;В поле &lt;strong&gt;Index&lt;/strong&gt; ( если очень просто бд, содержащая события ) выбираем существующий либо создаём новый&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Review&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;img src=&quot;/static/img/splunk/splunk-app-3.PNG&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Если вас всё устраивает жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Submit&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;img src=&quot;/static/img/splunk/splunk-app-4.PNG&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Дальше нажимаем &lt;code class=&quot;highlighter-rouge&quot;&gt;Start Searching&lt;/code&gt; и смотрим какие данные нам вернулись после выполнения скрипта на клиенте&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;img src=&quot;/static/img/splunk/splunk-app-5.PNG&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 29 Mar 2020 23:10:39 +0600</pubDate>
        <link>http://www.tipoit.kz/splunk-add-new-app</link>
        <guid isPermaLink="true">http://www.tipoit.kz/splunk-add-new-app</guid>
        
        <category>splunk</category>
        
        
      </item>
    
      <item>
        <title>Powershell замена строки в файле</title>
        <description>&lt;p&gt;Буду использовать для реализации задачи по замене значения &lt;code class=&quot;highlighter-rouge&quot;&gt;targetUri&lt;/code&gt; в &lt;code class=&quot;highlighter-rouge&quot;&gt;deploymentclient.conf&lt;/code&gt; splunk agent forwarder.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(Get-Content -path &quot;C:\Program Files\SplunkUniversalForwarder\etc\system\local\deploymentclient.conf&quot; -Raw) -replace 'targetUri = server1:8089','targetUri = server2:8089' | Set-Content -Path &quot;C:\Program Files\SplunkUniversalForwarder\etc\system\local\deploymentclient.conf&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ну и restart splunk agent&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&quot;C:\Program Files\SplunkUniversalForwarder\bin\splunk.exe&quot; restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 29 Mar 2020 22:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/powershell-replace-string-in-file</link>
        <guid isPermaLink="true">http://www.tipoit.kz/powershell-replace-string-in-file</guid>
        
        <category>powershell</category>
        
        <category>splunk</category>
        
        <category>scripts</category>
        
        
      </item>
    
      <item>
        <title>Настройка OpenVpn на PfSense</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Установка openvpn-client-export&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Первым делом установим openvpn-client-export, для экспорта файлов конфигурации пользователя vpn и самого OpenVPN client.&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;System -&amp;gt; Package Manager -&amp;gt; Available Packages&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;В поле поиска вбиваем &lt;strong&gt;openvpn-client-export&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Ну и жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;install&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание OpenVPN server&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Далее настраиваем OpenVPN сервер&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;System -&amp;gt; Certificate Manager -&amp;gt; СAs&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Создаём сертификат CA&lt;/li&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;VPN -&amp;gt; OpenVPN -&amp;gt; Wizard&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;В графе &lt;strong&gt;Select an Authentication Backend Type&lt;/strong&gt; выбираем &lt;strong&gt;Local User Access&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Далее в &lt;strong&gt;Choose a Certificate Authority (CA)&lt;/strong&gt; выбираем наш сертификат, созданный во 2 пункте&lt;/li&gt;
  &lt;li&gt;В следующем окне выбираем &lt;strong&gt;Add new certificte&lt;/strong&gt; и создаем сертификат для сервера, или выбираем в списке уже существующий&lt;/li&gt;
  &lt;li&gt;Собственно главный шаг при создании сервера OpenVPN  со множеством настроек. Ниже список с применяемыми настройками:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Interface&lt;/strong&gt; - WAN&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Protocol&lt;/strong&gt; - UDP&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Local Port&lt;/strong&gt; - 1194 ( Лучше указать не стандартный )&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;TLS Authentication&lt;/strong&gt; - true&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Generate TLS Key&lt;/strong&gt; - true&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;DH Parameters Length&lt;/strong&gt; - 4096 bit ( Тут на свое усмотрение )&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Encryption Algorithm&lt;/strong&gt; - Тут на свое усмотрение&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Auth Digest Algorithm&lt;/strong&gt; - Тут на свое усмотрение&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Tunnel Network&lt;/strong&gt; - 10.10.1.0/24 ( Это будет сеть которая будет выдаваться клиентам OpenVPN )&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Redirect Gateway&lt;/strong&gt; - false ( Но возможно для кого-то будет лучше true. Если включить, то после подключения весь трафик на клиенте будет уходить в vpn. Т.е если открыть youtube, то смотреть его вы будете через OpenVPN server )&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;DNS Server 1&lt;/strong&gt; - можно указать конкретный DNS для клиентов&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;next&lt;/code&gt; и выставляем галочки напротив &lt;strong&gt;Firewall Rule, OpenVPN rule&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Finish&lt;/code&gt;
После всего проделанного в &lt;code class=&quot;highlighter-rouge&quot;&gt;VPN -&amp;gt; OpenVPN -&amp;gt; Servers&lt;/code&gt; появится VPN сервер.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Добавление routes&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Тот кто хоть немного разбирается в сети сразу заметит что я остался без роутов, потому что выставил &lt;strong&gt;Redirect Gateway - false&lt;/strong&gt;. Для того чтобы прописать роуты:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;edit&lt;/code&gt; на vpn сервере и в поле &lt;strong&gt;Custom options&lt;/strong&gt; вбиваем наш route push &lt;strong&gt;“route 10.0.0.0 255.255.255.0”&lt;/strong&gt;. Собственно в описании к полю всё понятно&lt;/li&gt;
  &lt;li&gt;Есть второй способ, о нём напишу ниже&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Создание клиента OpenVPN&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Следующий этап это создание клиента OpenVPN&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;System -&amp;gt; User Manager -&amp;gt; Users&lt;/code&gt; и жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;add&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Username&lt;/strong&gt; - test&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Password&lt;/strong&gt; - password&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Full name&lt;/strong&gt; - test&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Certificate&lt;/strong&gt; - true&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Descriptive name&lt;/strong&gt; - test&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;save&lt;/code&gt; и пользователь создан&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Экспорт файлов конфигурации для клиента через openvpn-client-export&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь всё готово для подключения ( !!! если у вас всё нормально на сетевом уровне ). Используем openvpn-client-export, который ставили в самом начале:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Переходим в &lt;code class=&quot;highlighter-rouge&quot;&gt;OpenVPN -&amp;gt; Client Export Utility&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Remote Access Server&lt;/strong&gt; - настроенный OpenVPN servrer&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Host Name&lt;/strong&gt; - Если вы используете nat для wan интерфейса PfSense пишем тут внешний IP. Если нет, то пусто&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Use Random Local Port&lt;/strong&gt; - true&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Жмём &lt;code class=&quot;highlighter-rouge&quot;&gt;Save as default&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Во вкладке &lt;code class=&quot;highlighter-rouge&quot;&gt;OpenVPN Clients&lt;/code&gt; видим созданного нашего пользователя &lt;strong&gt;test&lt;/strong&gt;. Жмём на интересующую нас кнопку в поле &lt;code class=&quot;highlighter-rouge&quot;&gt;Export&lt;/code&gt; и сохраняем файл установки с конфигурацией именно для этого пользователя.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;Client Specific Overrides&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Суть этой вкладки в том, что вы можете в зависимости от пользователя OpenVPN прописывать разные routes или выдавать им определенные ip. 
Проще говоря своя конфигурация для каждого пользователя. Причем после изменения или создания не надо переустанавливать ничего у клиента, все применяется автоматически после соединения пользователя / клиента с OpenVPN  сервером&lt;/p&gt;

&lt;p&gt;Настройки&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Server List&lt;/strong&gt; - сервер OpenVPN&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Common Name&lt;/strong&gt; - имя пользователя ( test )&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IPv4 Tunnel Network&lt;/strong&gt; - ip адрес клиента ( но с маской подсети чтобы был доступен шлюз 1.1.1.1/24 )&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Advanced&lt;/strong&gt; - можно прописать route для конкретного пользователя&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Подключение к серверу OpenVPN&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;После того как скачали файл установки с конфигурацией пользователя ( описано выше ) запускаем установку, где просто жмём далее.&lt;/p&gt;

&lt;p&gt;После установки запускаем OpenVPN client, жмём правой кнопкой на значке в трее, выбираем наш конфиг и жмём connect. Приложение запросит логин и пароль ( создавали выше ). После удачного подключения значок в трее станет зелёным.&lt;/p&gt;

&lt;p&gt;Вот и ВСЁ. Работает&lt;/p&gt;

&lt;p&gt;Также настоятельно рекомендую добавить правила в Firewall и удалить стандартные для соблюдения правил ИБ. Но статья не об этом.&lt;/p&gt;
</description>
        <pubDate>Fri, 20 Mar 2020 19:50:39 +0600</pubDate>
        <link>http://www.tipoit.kz/configure-openvpn-pn-pfsense</link>
        <guid isPermaLink="true">http://www.tipoit.kz/configure-openvpn-pn-pfsense</guid>
        
        <category>pfsense</category>
        
        <category>openvpn</category>
        
        <category>vpn</category>
        
        
      </item>
    
    
  </channel>
</rss>
